我正在编写一个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?任何示例代码都将非常感激。
答案 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);
}
}