我正在编写一个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);
}
}