2016-07-28 95 views
0

在OpenSSL中,我試圖在握手期間檢查證書鏈。
當客戶端連接創建澈SSL_CTX*SSL*然後我設置驗證回調OpenSSL在證書驗證錯誤時自行終止

SSL_set_verify(_ssl, SSL_VERIFY_PEER | SSL_VERIFY_CLIENT_ONCE | SSL_VERIFY_FAIL_IF_NO_PEER_CERT, verify_callback); 

然後在功能我有

int verify_callback(int preverify_ok, X509_STORE_CTX *x509_ctx) { 
    bool ok = false; 
    [...] 
    return ok ? 1 : 0; 
} 

(我在GitHub上的例子複製的代碼)
當我執行它,如果函數返回1,一切正常,但當它返回0(又名失敗)整個過程停止(退出代碼0)

我目前在Win10 x64下編譯cygwin64,這是最新版本

我在做什麼錯?

+0

另請參閱OpenSSL wiki上的[TLS Client](http://wiki.openssl.org/index.php/SSL/TLS_Client)。示例代碼具有打印證書的回調。 – jww

回答

0

文檔給出了答案:

The return value of verify_callback controls the strategy of the further verification process. If verify_callback returns 0, the verification process is immediately stopped with "verification failed" state. If SSL_VERIFY_PEER is set, a verification failure alert is sent to the peer and the TLS/SSL handshake is terminated.

來自 https://www.openssl.org/docs/manmaster/ssl/SSL_CTX_set_verify.html

所以也許你錯過了一個異常或東西。

+0

該文檔沒有討論類似於殺死進程的內容。我附加了你在stdout/stderr(取自Netbeans輸出窗口)中的程序寫入了什麼'4294956672:錯誤:14089086:SSL例程:ssl3_get_client_certificate:證書驗證失敗:s3_srvr.c:3270:' – full98

+0

您是否嘗試單步執行代碼一個調試器?同時檢查是否有任何拋出的異常。 –

+0

Ops ...我以爲我在try ... catch語句中寫了一些代碼,但實際上並沒有。我的錯!無論如何非常感謝你 – full98

相關問題