OpenSSL - 在证书链中查找错误深度

时间:2013-04-25 11:09:35

标签: c ssl openssl

我正在编写一个C程序来使用OpenSSL检索和验证x509证书链。这是我第一次使用C语言进行编程,并且在很大程度上依赖于http://www.ibm.com/developerworks/linux/library/l-openssl/

上的教程

我可以使用以下代码从连接中检索任何错误代码:

if (SSL_get_verify_result(ssl) != X509_V_OK)
{
    printf("\nError verifying certificate\n");
    fprintf(stderr, "Error Code: %lu\n", SSL_get_verify_result(ssl));
}

然而,我还需要知道哪个证书是违规证书。是否有办法确定错误的链深度,如命令行s_client?任何示例代码都将非常感激。

1 个答案:

答案 0 :(得分:0)

我在Chandra,Messier和Viega的“OpenSSL网络安全”中找到了答案。

它使用SSL_CTX_set_verify来指定在链中每个证书的验证例程之后运行的回调函数。

SSL_CTX_set_verify(ctx, SSL_VERIFY_PEER, verify_callback);


int verify_callback(int ok, X509_STORE_CTX * store)
{
  if (!ok) //if this particular cert had an error
  {
    int depth = X509_STORE_CTX_get_error_depth(store);
    int err = X509_STORE_CTX_get_error(store);
  }
}