2013-04-25 29 views
1

我正在編寫一個C程序來使用OpenSSL檢索和驗證x509證書鏈。這是用C我第一次編程,並在http://www.ibm.com/developerworks/linux/library/l-openssl/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

我在Chandra,Messier和Viega的「Network Security with 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); 
    } 
}