最常用可靠方式是用openssl s_client -connect example.com:443 -cipher all模拟握手并列出服务器支持的密码套件,结果反映实际运行行为;还可限定协议如-tls1_2或配合nmap --script ssl-enum-ciphers快速扫描。
直接用 openssl s_client 命令连接服务器并列出支持的密码套件,是最常用、最可靠的方式。它模拟真实 tls 握手过程,结果反映实际运行时的行为。
使用 openssl 检查支持的 TLS 密码套件
在服务器本地或任意能访问目标 Apache 的机器上执行:
- 查看默认协商结果(通常为最高兼容性):
openssl s_client -connect example.com:443 -servername example.com
连接成功后按Ctrl+C退出,输出中会显示实际使用的协议版本和密码套件,如TLSv1.2, ECDHE-ECDSA-AES256-GCM-SHA384 - 枚举所有可能支持的套件(需 OpenSSL 1.1.1+):
openssl s_client -connect example.com:443 -servername example.com -cipher ALL:COMPLEMENTOFALL
该命令尝试逐个测试每个可用套件,观察是否握手成功。注意:部分套件可能因服务端配置或 OpenSSL 版本限制而跳过。 - 限定协议版本测试(例如只看 TLSv1.2 支持哪些):
openssl s_client -connect example.com:443 -tls1_2 -cipher ALL
借助 nmap 快速扫描常见套件
nmap 的 ssl-enum-ciphers 脚本能批量识别主流密码套件及协议支持情况,适合快速评估:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 安装必要组件(如未预装):
sudo apt install nmap(Debian/Ubuntu)或sudo dnf install nmap(RHEL/CentOS/Fedora) - 运行扫描:
nmap --script ssl-enum-ciphers -p 443 example.com - 输出会按协议分组(TLSv1.0 / TLSv1.2 / TLSv1.3),列出每个协议下实际启用的密码套件,并标注强度(strong / weak / insecure)
检查 Apache 配置中的显式设置
配置文件中的指令决定了最终对外暴露的算法范围,重点检查以下位置:
- 主配置或虚拟主机块中是否存在
SSLProtocol,例如:SSLProtocol TLSv1.2 TLSv1.3—— 表示仅启用这两个版本 - 是否存在
SSLCipherSuite,例如:SSLCipherSuite ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384
该行明确限定了允许的套件列表(注意:Apache 2.4.37+ 支持更现代的语法如SSLProxyCipherSuite,但主站仍用SSLCipherSuite) - 确认是否启用了
SSLHonorCipherOrder on—— 若开启,服务器将按配置顺序优先选择靠前的套件;若关闭,则由客户端主导选择
验证国密或特殊算法支持(如需)
若已部署国密增强版 OpenSSL(如 GMSSL),标准 openssl s_client 可能无法识别 SM2/SM4 套件。此时应改用对应工具:
- 使用
gmssl s_client -connect example.com:443 -sm2测试国密握手 - 查看 Apache 错误日志(
/var/log/httpd/error_log)中是否有加载失败提示,例如:SSL Library Error: error:141E70BF:SSL routines:tls_construct_server_hello:no ciphers available
说明配置的套件与底层 OpenSSL 不兼容










