Encryption

使用 openssl 程式碼發送未加密的 TLS 消息

  • July 25, 2013

是否可以在不加密的情況下通過 TLS 發送消息?

如果是這樣,這需要哪個密碼套件?

是的,有許多不包含任何加密的 TLS 密碼套件。這些密碼套件通常不被 OpenSSL 使用,但可以明確地請求它們,例如使用-cipherOpenSSL 工具的選項。

NULL具體來說,在和aNULLcipher 類下可以找到不提供加密和/或身份驗證的套件。openssl ciphers手冊頁將它們描述為:

" eNULL, NULL : 那些不提供加密的 “NULL” 密碼。因為它們根本不提供加密並且存在安全風險,除非明確包含,否則它們將被禁用。

aNULL:不提供身份驗證的密碼套件。這是目前的匿名 DH 算法。這些密碼套件容易受到“中間人”攻擊,因此通常不鼓勵使用它們。”

要獲取NULL課程中包含的密碼套件列表,請執行openssl ciphers -v NULL. 對我來說,返回的列表如下所示:

ECDHE-RSA-NULL-SHA      SSLv3 Kx=ECDH     Au=RSA  Enc=None      Mac=SHA1
ECDHE-ECDSA-NULL-SHA    SSLv3 Kx=ECDH     Au=ECDSA Enc=None      Mac=SHA1
AECDH-NULL-SHA          SSLv3 Kx=ECDH     Au=None Enc=None      Mac=SHA1
ECDH-RSA-NULL-SHA       SSLv3 Kx=ECDH/RSA Au=ECDH Enc=None      Mac=SHA1
ECDH-ECDSA-NULL-SHA     SSLv3 Kx=ECDH/ECDSA Au=ECDH Enc=None      Mac=SHA1
NULL-SHA256             TLSv1.2 Kx=RSA      Au=RSA  Enc=None      Mac=SHA256
NULL-SHA                SSLv3 Kx=RSA      Au=RSA  Enc=None      Mac=SHA1
NULL-MD5                SSLv3 Kx=RSA      Au=RSA  Enc=None      Mac=MD5 

要查看特定伺服器是否允許您使用這些套件之一連接到它,請執行:

openssl s_client -connect*主機*:*埠*-cipher NULL

當然,對於大多數服務,這應該會導緻密碼套件協商失敗,如下所示:

$ openssl s_client -connect www.google.com:443 -cipher NULL
CONNECTED(00000003)
3073382600:error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert
handshake failure:s23_clnt.c:724:
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 7 bytes and written 139 bytes
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
---

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