Tls

ecdhe_ecdsa_with_aes128_cbc_sha256 的 OpenSSL 密碼套件支持/密鑰要求

  • September 22, 2020

我希望這是解決這類問題的正確地方。

所以實際上我正在嘗試測試一些工業設備的 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

當我使用我的真實設備作為客戶端時也會發生這種情況。

我的問題是:

  1. 當我明確地將伺服器設置為僅支持一個密碼套件時,為什麼伺服器會說沒有共享密碼?我想 OpenSSL 實現支持它,否則 s_server 呼叫將失敗。
  2. 我怎樣才能使這項工作?

附錄:

如果我支持客戶端中的所有 ECDHE-ECDSA 密碼,請使用

openssl.exe s_client -connect localhost:2 -tls1_2 -cipher ECDHE+ECDSA -msg -state -debug -tlsextdebug

握手以同樣的方式失敗。

解決方案:

與此同時,我偶然發現了這個問題,發現這個問題是正確生成密鑰的問題。通過在連結執行緒中應用建議的解決方案,我能夠讓我的範例正常工作。

當我明確地將伺服器設置為僅支持一個密碼套件時,為什麼伺服器會說沒有共享密碼?

選擇的密碼套件要求使用 ECC 證書。可能您有 RSA 證書,因為大多數關於如何創建證書的說明僅涵蓋這一點。如果您有 RSA 證書,則不能使用 ECDSA 密碼,因此伺服器基本上沒有可供選擇的密碼 - 這導致沒有共享密碼。

我怎樣才能使這項工作?

為伺服器創建 ECC 證書。有關說明,請參見例如創建自簽名 ECC 證書

引用自:https://crypto.stackexchange.com/questions/84087