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

C OpenSSL-在证书链中查找错误深度,c,ssl,openssl,C,Ssl,Openssl,我正在编写一个C程序,用OpenSSL检索和验证x509证书链。这是我第一次用C语言编程,我在很大程度上依赖于 我可以使用以下代码从连接中检索任何错误代码: 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)); } 然而,我

我正在编写一个C程序,用OpenSSL检索和验证x509证书链。这是我第一次用C语言编程,我在很大程度上依赖于

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

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_客户端那样确定错误链深度的方法?任何示例代码都将不胜感激。

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