【发布时间】:2015-02-10 08:50:14
【问题描述】:
例如,我的 Linux 系统上有 OpenSSL 版本 1.0.0o,我想知道此构建支持哪些 SSL/TLS 版本。
有没有一个shell命令来完成这个?
【问题讨论】:
例如,我的 Linux 系统上有 OpenSSL 版本 1.0.0o,我想知道此构建支持哪些 SSL/TLS 版本。
有没有一个shell命令来完成这个?
【问题讨论】:
使用这个
openssl ciphers -v | awk '{print $2}' | sort | uniq
【讨论】:
ciphers -v 中的第二列是密码套件的最低 版本;由于 TLSv1.0 和 1.1 不添加 SSLv3 中不存在的任何密码套件,因此在 1.0.1 和 1.0.2 中仅列出 SSLv3 和 TLSv1.2,即使支持 1.0 和 1.1。由于一个明显的错误,在 1.1.0 中列出了 1.0,但仍然没有列出 1.1。此外,1.0.0-2 确实支持 SSLv2,但不将 v2 套件放在 default 密码字符串中,因此未列出;这可以通过使用ALL 来解决。 (OTOH SSLv3 和 SSLv3 均已损坏,不应使用。)
sort|uniq 可以替换为sort -u,如果顺序无关紧要,或者您使用在for 中具有自动排序功能的 GNU awk 4,awk 可以轻松地自行抑制重复项.但这些都是 SO 的主题。
您无法通过命令行检查版本支持。最好的选择是检查OpenSSL changelog。
直到 1.0.0h 的 Openssl 版本支持 SSLv2、SSLv3 和 TLSv1.0。从 Openssl 1.0.1 开始,增加了对 TLSv1.1 和 TLSv1.2 的支持。
【讨论】:
./Configure 可以将其添加回来。 1.1.0 基础版(2016 年 8 月)完全删除了 SSLv2 的代码(无法重新添加)并默认禁用 SSLv3。
这对我有用:
openssl s_client -help 2>&1 > /dev/null | egrep "\-(ssl|tls)[^a-z]"
如果有错误请告诉我。
【讨论】:
这很笨拙,但您可以从 s_client 或 s_server 的使用消息中获得此信息,这些消息在编译时是 #ifed 以匹配支持的协议版本。使用类似的东西
openssl s_client -help 2>&1 | awk '/-ssl[0-9]|-tls[0-9]/{print $1}'
# in older releases any unknown -option will work; in 1.1.0 must be exactly -help
【讨论】:
试试下面的命令:
openssl ciphers
这应该会生成您的 openssl 版本支持的所有密码的列表。
要查看一组特定的密码(例如,仅 sslv3 密码),请尝试:
openssl ciphers -ssl3
【讨论】:
当您使用 s_client 运行 OPENSSL 命令时,这是输出。查看密码,如果密码为 NULL,则表示不支持该版本的 TLS。
TLSv1/SSLv3, Cipher is ECDHE-RSA-AES256
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
Protocol : TLSv1
Cipher : ECDHE-RSA-AES256
Session-ID: A84600002D4945DE6
Session-ID-ctx:
Master-Key:
Start Time: 15852343333860
Timeout : 2343 (sec)
Verify return code: 0 (ok)
【讨论】: