Apache 本身不提供实时会话级“当前连接”SSL详情,但可通过检查模块与端口监听、分析HTTPS响应头(如X-SSL-Protocol)、启用SSL引擎日志(SSLLogLevel info)及OpenSSL命令验证证书链四类方法获取协议版本、密码套件、证书等关键状态。

直接查看当前连接的 SSL 加密状态,Apache 本身不提供实时会话级的“当前连接”详情(比如某次访问用了 TLS 1.3 还是 AES-GCM),但可通过组合命令和日志配置,获取正在使用的协议版本、加密套件、证书信息等关键 SSL 状态。核心方法分三类:检查模块与监听、验证 HTTPS 响应头、启用并分析 SSL 日志。
确认 SSL/TLS 模块已启用且 443 端口在监听
这是基础前提。若服务未监听 443 或 mod_ssl 未加载,就不存在 HTTPS 连接。
- 运行
apachectl -M | grep ssl(或httpd -M | grep ssl),输出含ssl_module (shared)表示模块已加载 - 执行
ss -tlnp | grep ':443'或netstat -tlnp | grep ':443',确认 Apache 进程正在监听 443 端口 - 检查配置中是否启用
SSLEngine on,并在对应虚拟主机中设置了证书路径(SSLCertificateFile和SSLCertificateKeyFile)
通过 HTTP 响应头判断实际协商结果
浏览器开发者工具或 curl 可直接看到本次请求使用的 TLS 版本和加密套件(需 Apache 启用相关响应头)。
- 在 Apache 配置中添加:
Header always set X-SSL-Protocol "%{SSL_PROTOCOL}e"<br>Header always set X-SSL-Cipher "%{SSL_CIPHER}e"
然后重启 Apache - 用 curl 测试:
curl -I https://your-domain.com
返回头中会出现类似X-SSL-Protocol: TLSv1.3和X-SSL-Cipher: TLS_AES_256_GCM_SHA384 - 注意:该方式反映的是**本次请求协商结果**,不是全局配置;不同客户端可能协商出不同结果
启用 SSL 会话日志获取详细握手信息
如需长期追踪或排查问题,可开启 mod_ssl 的详细日志,记录每次 SSL 握手细节。
- 在虚拟主机或主配置中加入:
SSLLogLevel info<br>SSLLog /var/log/apache2/ssl_engine_log
(路径按实际日志目录调整,确保 Apache 对该文件有写权限) - 日志中会包含:
– 协商的协议版本(如 TLSv1.2)
– 使用的密码套件(如 ECDHE-ECDSA-AES128-GCM-SHA256)
– 客户端证书信息(若启用双向认证)
– 会话 ID 和重用状态 - 查看日志:
tail -f /var/log/apache2/ssl_engine_log
发起 HTTPS 请求后即可实时观察握手过程
验证证书有效性与链路完整性
证书过期、链不全或域名不匹配会导致加密降级甚至连接失败,这也属于“SSL 状态”的关键部分。
- 用 OpenSSL 检查当前服务证书:
openssl s_client -connect your-domain.com:443 -servername your-domain.com 2>/dev/null | openssl x509 -noout -dates -issuer -subject - 检查证书链是否完整:
openssl s_client -connect your-domain.com:443 -servername your-domain.com -showcerts
看输出中是否有多个 CERTIFICATE 块,且末尾无 “Verify return code: 0 (ok)” 则说明链有问题 - 浏览器地址栏点击锁图标 → 查看证书,是最直观的终端验证方式


















