在安全审计和服务器配置中,检测 TLS 版本支持是重要的一环。本文介绍使用 OpenSSL 命令行工具检测目标服务器支持的 TLS 协议版本。
基本检测方法#
检测特定 TLS 版本#
1
2
3
4
5
6
7
8
9
10
11
|
# 检测 TLS 1.2
openssl s_client -connect example.com:443 -tls1_2 </dev/null
# 检测 TLS 1.3
openssl s_client -connect example.com:443 -tls1_3 </dev/null
# 检测 TLS 1.1(已不安全)
openssl s_client -connect example.com:443 -tls1_1 </dev/null
# 检测 TLS 1.0(已不安全)
openssl s_client -connect example.com:443 -tls1 </dev/null
|
判断是否支持#
连接成功后会显示协议和加密套件:
1
2
|
New, TLSv1.2, Cipher is ECDHE-RSA-AES128-GCM-SHA256
Protocol : TLSv1.2
|
如果不支持,会显示错误或 Cipher is (NONE)。
快速检测脚本#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
#!/bin/bash
# check_tls.sh - 检测服务器 TLS 版本支持
HOST=${1:-"example.com"}
PORT=${2:-"443"}
echo "检测 $HOST:$PORT 的 TLS 版本支持..."
echo
for ver in tls1 tls1_1 tls1_2 tls1_3; do
result=$(echo "Q" | timeout 5 openssl s_client -connect "$HOST:$PORT" -$ver 2>/dev/null | grep "Protocol")
if echo "$result" | grep -q "TLSv"; then
protocol=$(echo "$result" | awk '{print $3}')
cipher=$(echo "Q" | timeout 5 openssl s_client -connect "$HOST:$PORT" -$ver 2>/dev/null | grep "Cipher is" | awk '{print $5}')
echo "✓ $ver 支持 ($protocol, $cipher)"
else
echo "✗ $ver 不支持"
fi
done
|
使用方法:
1
2
|
chmod +x check_tls.sh
./check_tls.sh www.baidu.com 443
|
检测示例#
1
2
3
4
5
6
|
# 检测百度
echo "Q" | openssl s_client -connect www.baidu.com:443 -tls1_2 2>/dev/null | grep -E "Protocol|Cipher"
# 输出: Protocol : TLSv1.2
# 检测本地服务
echo "Q" | openssl s_client -connect localhost:8443 -tls1_3 2>/dev/null | grep -E "Protocol|Cipher"
|
OpenSSL 支持的协议选项#
查看本地 OpenSSL 支持哪些协议:
1
|
openssl s_client -help 2>&1 | grep -E "^\s+-tls"
|
典型输出:
1
2
3
4
|
-tls1 Just use TLSv1
-tls1_1 Just use TLSv1.1
-tls1_2 Just use TLSv1.2
-tls1_3 Just use TLSv1.3
|
指定 SNI(Server Name Indication)#
对于使用 SNI 的服务器,需要指定 -servername:
1
|
openssl s_client -connect example.com:443 -servername example.com -tls1_2 </dev/null
|
查看完整握手信息#
1
|
openssl s_client -connect example.com:443 -tls1_2 -showcerts </dev/null
|
这会显示:
安全建议#
| 协议 |
状态 |
建议 |
| SSL 2.0 |
已废弃 |
禁用 |
| SSL 3.0 |
已废弃 |
禁用 |
| TLS 1.0 |
不安全 |
禁用 |
| TLS 1.1 |
不安全 |
禁用 |
| TLS 1.2 |
安全 |
保留 |
| TLS 1.3 |
推荐 |
启用 |
常见问题#
连接超时#
1
2
|
# 使用 timeout 命令限制等待时间
timeout 5 openssl s_client -connect example.com:443 -tls1_2 </dev/null
|
OpenSSL 版本过低#
TLS 1.3 需要 OpenSSL 1.1.1 或更高版本:
1
2
|
openssl version
# 需要: OpenSSL 1.1.1 或更高
|
参考来源#