2015-10-05 22 views
1

目前客戶端模式下的OpenSSL只有在服務器選擇的DH參數的密鑰長度小於768位(源代碼中進行了硬編碼)時纔會停止握手。如何在OpenSSL客戶端拒絕弱DH參數?

在我的客戶端中,如果服務器選擇的DH參數的密鑰長度小於2048位,我想停止握手。優選的方式是通過API進行設置,例如,由OpenSSL公開的選項設置。

有什麼方法可以使用公共API設置最小密鑰長度嗎?

+0

DH和'SSL_CTX_set_tmp_dh_callback'的問題似乎是(1)功能請求;和(2)文檔錯誤。 – jww

+0

Dr. Henson在[Doc Bug:SSL_CTX_set_tmp_dh_callback(和朋友)和客戶端代碼](https://rt.openssl.org/Ticket/Display.html?id=4071)中向bug報告添加了一些示例代碼。 – jww

回答

0

是否有任何方式使用公共API設置最小密鑰長度?

是的(或者我應該說,「我相信」)。使用你的Diffie-Hellman回調。回調設置爲SSL_CTX_set_tmp_dh_callbackSSL_set_tmp_dh_callback

通常在服務器上使用Diffie-Hellman回調來生成密鑰。但是根據OpenSSL的SSL_CTX_set_tmp_dh_callback(3)手冊頁,其「...在tmp_dh_callback需要DH參數時使用......」。

有關在服務器環境中使用回調(應該類似於在客戶端中使用回調)的示例,請參閱'No Shared Cipher' Error with EDH-RSA-DES-CBC3-SHA。它執行關鍵長度檢查。

+1

我已經在服務器模式下使用這些函數,但它們在客戶端模式下被openssl忽略。服務器首先選擇dh參數並與客戶協商。 – user3027786

+0

@ user3027786 - 好的,謝謝。在客戶端生成用作公鑰的隨機值顯然選擇了一個DH參數,所以在某處存在一個錯誤。 (我不知道它是否應該工作,它的實現錯誤;還是它不應該工作,它的文檔錯誤)。你想用OpenSSL提交錯誤報告,還是你想要我這樣做? – jww

+0

這將是很好,如果你可以這樣做:)謝謝 – user3027786

相關問題