Debian 上检查 Nginx SSL 漏洞的实用流程
一 快速自检与连通性验证
sudo systemctl status nginx、sudo ufw status、sudo netstat -tulpen | grep ':443'。sudo nginx -t、openssl x509 -in /path/cert.crt -noout -dates、cat domain.crt intermediate.crt > combined.crt 并在 ssl_certificate 使用合并后的文件。openssl s_client -connect example.com:443 -servername example.com -showcerts。二 本地与命令行漏洞扫描
nmap -sV --script ssl-enum-ciphers -p 443 your_domain。./testssl.sh -U your_domain(或 ./testssl.sh your_domain 获取完整报告)。openssl s_client -connect your_domain:443 -tls1_2。三 在线评测与深度分析
四 常见漏洞与修复要点对照表
| 检查项 | 快速命令或现象 | 修复建议 |
|---|---|---|
| 过时协议(SSLv2/3、TLS1.0/1.1) | nmap 显示支持 SSLv2/3/TLS1.0/1.1 | 仅启用 TLSv1.2/1.3 |
| 弱套件、无 PFS | testssl.sh 提示弱套件或 PFS 缺失 | 使用 ECDHE 套件,禁用 DES/3DES、RC4、NULL 等 |
| SWEET32(3DES) | testssl.sh 报 SWEET32 | 禁用 3DES,优先 AES-GCM/ChaCha20-Poly1305 |
| Heartbleed | testssl.sh 报 Heartbleed | 升级 OpenSSL 与 Nginx,确保无漏洞版本 |
| POODLE | testssl.sh 报 POODLE | 禁用 SSLv3 |
| FREAK | testssl.sh 报 FREAK | 禁用 EXPORT 级弱套件 |
| LOGJAM | testssl.sh 报 LOGJAM | 禁用 EXPORT 与 DHE 小素数,使用 ECDHE |
| DROWN | testssl.sh 报 DROWN | 禁用 SSLv2 并移除与 RSA 密钥共享的旧证书 |
| CCS Injection | testssl.sh 报 CCS | 升级到包含修复的 OpenSSL/Nginx |
| Ticketbleed | testssl.sh 报 Ticketbleed | 升级受影响设备/组件 |
| Renegotiation | testssl.sh 报不安全重协商 | 启用安全重协商 |
| CRIME/BREACH | testssl.sh 报 CRIME/BREACH | 禁用 TLS 压缩;对 HTTP 压缩按路径/头做条件化 |
| Lucky13 | testssl.sh 报 Lucky13 | 升级 OpenSSL 至修复版本 |
| 证书链不完整 | SSL Labs/Observatory 提示链不完整 | 合并 中间证书,在 ssl_certificate 使用完整链 |
| OCSP Stapling 异常 | SSL Labs 报 Stapling 错误 | 开启 ssl_stapling on; ssl_stapling_verify on;,配置 ssl_trusted_certificate,确保可访问 OCSP 地址与 DNS 解析 |
上述条目对应的检测命令与修复方向,可结合 testssl.sh、nmap、SSL Labs 与 Mozilla Observatory 的结果逐项整改。
五 加固后的验证与持续监控
openssl x509 -in /path/cert.crt -noout -dates。curl -s -I https://your_domain | grep -E 'Strict-Transport-Security|X-Frame-Options|X-XSS-Protection'。