Tls
ecdhe_ecdsa_with_aes128_cbc_sha256 的 OpenSSL 密碼套件支持/密鑰要求
我希望這是解決這類問題的正確地方。
所以實際上我正在嘗試測試一些工業設備的 TLS 實現。我必須為此編寫自己的 TLS 實現,為此我使用 OpenSSL 庫,並且我還通過控制台命令進行測試,版本是 1.1.1f。
我測試的設備僅支持密碼套件 tls_ecdhe_ecdsa_with_aes128_cbc_sha256 (0xc023)。
作為準備,我想測試 OpenSSL 客戶端與 OpenSSL 伺服器,我正在使用以下命令來設置兩者(之前也使用 OpenSSL 生成了證書):
openssl.exe s_server -accept 2 -cipher ECDHE-ECDSA-AES128-SHA256 -key cs_key.pem -cert cs_cert.pem -msg -state -debug -tlsextdebug -bugs
和
openssl.exe s_client -connect localhost:2 -tls1_2 -cipher ECDHE-ECDSA-AES128-SHA256 -msg -state -debug -tlsextdebug -bugs
伺服器使用警報消息和控制台輸出中止 TLS 握手
11096:error:1417A0C1:SSL routines:tls_post_process_client_hello:no shared cipher:ssl\statem\statem_srvr.c:2284: shutting down SSL
當我使用我的真實設備作為客戶端時也會發生這種情況。
我的問題是:
- 當我明確地將伺服器設置為僅支持一個密碼套件時,為什麼伺服器會說沒有共享密碼?我想 OpenSSL 實現支持它,否則 s_server 呼叫將失敗。
- 我怎樣才能使這項工作?
附錄:
如果我支持客戶端中的所有 ECDHE-ECDSA 密碼,請使用
openssl.exe s_client -connect localhost:2 -tls1_2 -cipher ECDHE+ECDSA -msg -state -debug -tlsextdebug
握手以同樣的方式失敗。
解決方案:
與此同時,我偶然發現了這個問題,發現這個問題是正確生成密鑰的問題。通過在連結執行緒中應用建議的解決方案,我能夠讓我的範例正常工作。
當我明確地將伺服器設置為僅支持一個密碼套件時,為什麼伺服器會說沒有共享密碼?
選擇的密碼套件要求使用 ECC 證書。可能您有 RSA 證書,因為大多數關於如何創建證書的說明僅涵蓋這一點。如果您有 RSA 證書,則不能使用 ECDSA 密碼,因此伺服器基本上沒有可供選擇的密碼 - 這導致沒有共享密碼。
我怎樣才能使這項工作?
為伺服器創建 ECC 證書。有關說明,請參見例如創建自簽名 ECC 證書。