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 certificaten");
    fprintf(stderr, "Error Code: %lun", SSL_get_verify_result(ssl));
}
但是,我还需要知道哪个证书是错误的。是否有办法确定像命令行s_client错误的链深度?如有任何示例代码将不胜感激。

我在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);
  }
}