Encryption
使用 openssl 程式碼發送未加密的 TLS 消息
是否可以在不加密的情況下通過 TLS 發送消息?
如果是這樣,這需要哪個密碼套件?
是的,有許多不包含任何加密的 TLS 密碼套件。這些密碼套件通常不被 OpenSSL 使用,但可以明確地請求它們,例如使用
-cipher
OpenSSL 工具的選項。
NULL
具體來說,在和aNULL
cipher 類下可以找到不提供加密和/或身份驗證的套件。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 ---