我在我的Linux系统上有OpenSSL版本为
1.0.0o
,我想知道这个版本支持哪些SSL/TLS
版本。是否有一个shell命令可以实现这个功能?使用此功能
openssl ciphers -v | awk '{print $2}' | sort | uniq
你无法通过命令行检查版本支持情况。最好的选择是检查OpenSSL变更日志。
Openssl版本1.0.0h及之前支持SSLv2、SSLv3和TLSv1.0。从Openssl 1.0.1开始,添加了对TLSv1.1和TLSv1.2的支持。
./Configure
可以将其添加回来。1.1.0基础版以上(2016年8月)完全删除了SSLv2的代码(无法添加回来),并默认禁用SSLv3。 - dave_thompson_085这对我有用:
openssl s_client -help 2>&1 > /dev/null | egrep "\-(ssl|tls)[^a-z]"
如果这不正确,请告诉我。
虽然有些麻烦,但你可以从s_client
或s_server
的使用消息中获取此信息,这些消息在编译时使用#if
匹配支持的协议版本。使用类似以下的内容:
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 ciphers -ssl3
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)
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套件放入默认的cipherstring中,因此不会列出;可以通过使用ALL
来解决这个问题。(另一方面,SSLv2和SSLv3都已经被破解并且不应该被使用。) - dave_thompson_085sort|uniq
可以被替换为sort -u
。但是这些内容适合在SO上讨论。 - dave_thompson_085