Ubuntu 上确保 OpenSSL 安全的实用清单
一 系统与软件更新
- 保持系统与 OpenSSL 为最新安全版本,及时修补已知漏洞;优先通过官方仓库更新,避免引入不受控的第三方包。
- 例行更新与重启示例:
- sudo apt update && sudo apt full-upgrade && sudo reboot
- 如确需单独升级 OpenSSL(不推荐):sudo apt install --only-upgrade openssl
- 验证更新结果:
- openssl version(查看运行时版本)
- dpkg -l | grep openssl(查看已安装包版本与状态)
- 发生类似 Heartbleed(CVE-2014-0160) 这类高危漏洞时,除更新外还需对受影响密钥/证书执行吊销与重签发,并重启相关服务。
二 生成与保管密钥证书
- 生成强密钥与证书:
- RSA:openssl genpkey -algorithm RSA -out server.key -aes256(私钥使用 AES-256 加密)
- CSR:openssl req -new -key server.key -out server.csr
- 自签名证书:openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
- 密钥与证书安全要点:
- 使用足够强度:RSA ≥ 2048 位,ECC ≥ 256 位
- 禁用不安全算法与散列:MD5、SHA-1 不应再用于新证书或握手
- 私钥保护:设置强口令、最小权限(仅服务账户可读)、存储在受限目录(如 /etc/ssl/private),必要时使用 HSM/KMS
- 证书生命周期:设置合理有效期(如 ≤ 365 天),并实施定期轮换与撤销流程。
三 服务端 TLS 安全配置
- 仅启用安全协议与套件:
- 协议:TLSv1.2、TLSv1.3
- 套件(示例):ECDHE-ECDSA-AES128-GCM-SHA256、ECDHE-RSA-AES128-GCM-SHA256、ECDHE-ECDSA-AES256-GCM-SHA384、ECDHE-RSA-AES256-GCM-SHA384、DHE-RSA-AES128-GCM-SHA256、DHE-RSA-AES256-GCM-SHA384
- Nginx 示例片段:
- ssl_protocols TLSv1.2 TLSv1.3;
- ssl_ciphers ‘ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384’;
- ssl_prefer_server_ciphers on;
- Apache 示例要点:
- SSLEngine on
- SSLProtocol +TLSv1.2 +TLSv1.3
- SSLCipherSuite 采用高强套件并启用 SSLHonorCipherOrder on
- 部署后执行配置语法检查与平滑重启:
- Nginx:sudo nginx -t && sudo systemctl reload nginx
- Apache:sudo apache2ctl configtest && sudo systemctl reload apache2
四 配置与运行时的加固
- 配置文件安全:
- 主配置通常为 /etc/ssl/openssl.cnf;仅由 root 拥有,权限 600/644 视内容而定;备份后再变更
- 在配置中统一设置安全基线:禁用 SSLv2/SSLv3、MD5、SHA-1;将默认消息摘要设为 SHA-256(如:default_md = sha256)
- 熵与随机数质量:确保系统熵源充足(如 haveged 等),避免密钥/IV 可预测
- 最小权限与隔离:
- 服务以最小权限账户运行,私钥仅对该账户可读
- 使用 chroot/jail 或容器隔离高风险服务
- 网络与访问控制:
- 仅开放必要端口与来源;在边界/主机防火墙(如 UFW)限制访问
- 监控与审计:
- 集中收集与审计系统/应用日志,关注异常握手、证书失效与密钥访问告警
五 验证与演练
- 版本与更新核验:
- openssl version;dpkg -l | grep openssl(确认安全更新已生效)
- 协议与套件核查:
- 使用 nmap:nmap --script ssl-enum-ciphers -p 443 your.domain
- 使用 testssl.sh:testssl.sh your.domain
- 证书链与有效期:
- 检查链与到期:openssl s_client -connect your.domain:443 -servername your.domain -showcerts
- 解析证书信息:openssl x509 -in server.crt -noout -text
- 漏洞处置演练:
- 针对历史高危问题(如 Heartbleed)进行桌面推演:更新→吊销旧证书→重签发→重启服务→通知用户变更密码/密钥