2015-10-30 39 views
1

SSL_CTX_set_verify()SSL_set_verify()調用可分別用於設置基礎上下文和ssl的verify_callback()函數。下面是從verify_callback()文檔片段:OpenSSL verify_callback和SSL_connect

verify_callback的返回值控制 進一步驗證過程的策略。如果verify_callback返回0,則 驗證過程立即停止,並顯示「驗證失敗」 狀態。如果設置了SSL_VERIFY_PEER,則向對等方發送驗證失敗警報​​ ,並終止TLS/SSL握手。如果 verify_callback返回1,則驗證過程將繼續。如果 verify_callback總是返回1,那麼TLS/SSL握手將不會是 因驗證失敗而終止,並且將建立連接 。

現在我的問題。如果我設置的verify_callback()(與任何其他必要的OpenSSL安裝程序調用,證書一起,等等),然後調用SSL_connect(),是安全的假設,到verify_callback()任何呼叫連接建立的目的將SSL_connect()調用的返回之前返回?

在我看來,這是一個安全的假設,因爲文檔指出,這個回調是什麼決定的連接是否將被建立。因此,回調將直接影響SSL_connect()呼叫的返回值。任何人都可以證實/否認這個假設?

回答

1

假設你有興趣只在TCP連接:簡短的回答:,長回答:這取決於

  • 如果您在阻塞模式連接 - 總是
  • 如果您在非阻塞模式連接 - SSL_connect可能會在建立連接的過程中返回-1。在這種情況下,您應該致電SSL_get_error並檢查問題是什麼(如果它返回SSL_ERROR_WANT_READSSL_ERROR_WANT_WRITE您需要重複撥打SSL_connect)。如果您需要重複呼叫 - 則回答爲verify_callback將在第一個和最後一個SSL_connect呼叫之間調用)。
+0

感謝您的回答。我假設你的答案意味着如下:如果底層套接字是非阻塞的,並且'SSL_connect'成功返回(即使在多次重複調用之後),那麼這意味着'verify_callback'被調用並在'SSL_connect'前返回。回報? –

+1

@HK - 是的,如果是非阻塞套接字'verify_callback',將會在第一個和最後一個'SSL_connect'調用之間被調用。 – sirgeorge

+0

還有一件事。你介意告訴我這是否記錄在某處?還是它沒有使用OpenSSL的經驗? –