Debian 上使用 OpenSSL 防范中间人攻击的实用清单
一 基础与快速加固
- 保持组件为最新:在 Debian 上及时更新 OpenSSL 与服务器软件(如 Nginx/Apache),及时修补已知漏洞(例如历史上的 CVE-2016-0800,DROWN 要求禁用 SSLv2 并升级到修复版本)。
- 全站 HTTPS 与强制跳转:将 HTTP→HTTPS,仅开放 443/TCP,对外服务尽量只提供 TLS。
- 仅启用安全协议与套件:使用 TLSv1.2/TLSv1.3,禁用 SSLv2/SSLv3/TLSv1/TLSv1.1 与不安全套件;优先 ECDHE 密钥交换与 AEAD 套件。
- 证书与链路安全:优先使用 Let’s Encrypt 等受信任 CA 的证书;启用 OCSP Stapling 提升证书状态校验效率与隐私性;对外仅提供必要端口与服务。
二 服务器配置示例 Nginx
- 获取证书(示例):
sudo apt update && sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com
- 安全配置要点(/etc/nginx/sites-available/yourdomain.com):
- 协议与套件:仅启用 TLSv1.2/1.3;使用强套件并优先服务端选择。
- 证书链与密钥:使用 fullchain.pem 与 privkey.pem。
- HSTS:下发 Strict-Transport-Security,建议 max-age=31536000; includeSubDomains。
- OCSP Stapling:开启并正确配置解析器与受信链。
- 安全头:如 X-Frame-Options、X-Content-Type-Options、X-XSS-Protection。
示例片段:
server {
listen 443 ssl http2;
server_name yourdomain.com;
ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
add_header Strict-Transport-Security “max-age=31536000; includeSubDomains” always;
ssl_stapling on; ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s; resolver_timeout 5s;
add_header X-Frame-Options SAMEORIGIN;
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection “1; mode=block”;
}
检查并重载:sudo nginx -t && sudo systemctl reload nginx。
三 服务器配置示例 Apache
- 启用模块:sudo a2enmod ssl headers
- 虚拟主机关键配置:
- 协议与套件:仅启用 TLSv1.2/1.3;禁用 SSLv2/SSLv3。
- 证书链与密钥:配置 SSLCertificateFile/SSLCertificateKeyFile(或链文件)。
- HSTS:Header always set Strict-Transport-Security “max-age=31536000; includeSubDomains”
- OCSP Stapling:SSLUseStapling on; SSLStaplingCache “shmcb:logs/stapling-cache(150000)”
检查并重载:sudo apache2ctl configtest && sudo systemctl reload apache2。
四 客户端与运维侧的纵深防护
- 证书固定 Certificate Pinning:在客户端预置服务器证书/公钥指纹(推荐 SHA-256),连接时本地校验,即使 CA 被攻破也能阻断伪造证书。示例(OpenSSL 取指纹):
- 取服务器证书公钥的 SHA-256 指纹:
echo | openssl s_client -connect example.com:443 2>/dev/null | openssl x509 -pubkey -noout | openssl pkey -pubin -outform der | openssl dgst -sha256 -binary | base64
- 移动端(如 OkHttp CertificatePinner)可按主机名绑定多个指纹,便于证书轮换过渡。
- 主动校验与回归测试:
- 使用 openssl s_client -connect host:443 -servername yourdomain.com -showcerts 查看链路证书;
- 回归测试禁用不安全协议/套件,确认业务正常。
- 域名解析安全:启用 DNSSEC 降低 DNS 劫持 风险,配合 TLS 形成端到端防护。
- 变更与续期流程:证书更新前先在客户端加入新指纹,再平滑切换,避免固定策略导致服务中断。
五 快速核查清单
| 检查项 |
期望结果 |
工具/命令示例 |
| OpenSSL 与组件版本 |
无已知漏洞版本 |
openssl version;apt update/upgrade |
| 仅启用 TLS1.2/1.3 |
无 SSLv2/3、TLS1.0/1.1 |
服务端配置核查 |
| 证书与链 |
使用受信任 CA;链路完整 |
浏览器查看;Nginx fullchain.pem |
| HSTS |
已下发且包含子域 |
curl -I https://yourdomain.com |
| OCSP Stapling |
开启且响应正常 |
服务端配置与日志 |
| 端口与防火墙 |
仅 443/TCP 对外开放 |
ufw allow 443/tcp;ss -lntp |
| 证书固定 |
客户端预置并校验通过 |
OpenSSL 指纹;客户端日志 |
以上措施协同作用:强加密与证书校验阻断窃听与伪装,HSTS 与强制 HTTPS 降低降级与劫持风险,OCSP Stapling 提升校验效率与隐私性,证书固定提供“第二道防线”,再配合及时更新与最小暴露面运维,可显著降低 中间人攻击 成功率。