目前客戶端模式下的OpenSSL只有在服務器選擇的DH參數的密鑰長度小於768位(源代碼中進行了硬編碼)時纔會停止握手。如何在OpenSSL客戶端拒絕弱DH參數?
在我的客戶端中,如果服務器選擇的DH參數的密鑰長度小於2048位,我想停止握手。優選的方式是通過API進行設置,例如,由OpenSSL公開的選項設置。
有什麼方法可以使用公共API設置最小密鑰長度嗎?
目前客戶端模式下的OpenSSL只有在服務器選擇的DH參數的密鑰長度小於768位(源代碼中進行了硬編碼)時纔會停止握手。如何在OpenSSL客戶端拒絕弱DH參數?
在我的客戶端中,如果服務器選擇的DH參數的密鑰長度小於2048位,我想停止握手。優選的方式是通過API進行設置,例如,由OpenSSL公開的選項設置。
有什麼方法可以使用公共API設置最小密鑰長度嗎?
是否有任何方式使用公共API設置最小密鑰長度?
是的(或者我應該說,「我相信」)。使用你的Diffie-Hellman回調。回調設置爲SSL_CTX_set_tmp_dh_callback和SSL_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。它執行關鍵長度檢查。
我已經在服務器模式下使用這些函數,但它們在客戶端模式下被openssl忽略。服務器首先選擇dh參數並與客戶協商。 – user3027786
@ user3027786 - 好的,謝謝。在客戶端生成用作公鑰的隨機值顯然選擇了一個DH參數,所以在某處存在一個錯誤。 (我不知道它是否應該工作,它的實現錯誤;還是它不應該工作,它的文檔錯誤)。你想用OpenSSL提交錯誤報告,還是你想要我這樣做? – jww
這將是很好,如果你可以這樣做:)謝謝 – user3027786
DH和'SSL_CTX_set_tmp_dh_callback'的問題似乎是(1)功能請求;和(2)文檔錯誤。 – jww
Dr. Henson在[Doc Bug:SSL_CTX_set_tmp_dh_callback(和朋友)和客戶端代碼](https://rt.openssl.org/Ticket/Display.html?id=4071)中向bug報告添加了一些示例代碼。 – jww