安全最佳实践

常见问题 18分钟阅读 3210次浏览

🔒 HTTPS 安全加固

仅仅安装SSL证书是不够的,还需要进行全面的HTTPS安全配置来保护您的网站和用户。

核心安全原则

强制全站 HTTPS

所有页面必须通过加密连接访问,禁止HTTP明文传输

基础要求
禁用不安全的协议

移除 SSLv2/3, TLS 1.0/1.1 等已知漏洞协议

关键步骤
使用强加密套件

仅允许现代、安全的加密算法组合

性能与安全平衡
定期更新补丁

及时修复服务器软件和库的安全漏洞

持续维护

🚀 HSTS (HTTP Strict Transport Security)

HSTS强制浏览器只使用HTTPS连接您的网站,有效防止SSL剥离攻击(SSL Stripping)。

为什么需要HSTS?

没有HSTS的风险:
  • 攻击者可以将HTTPS降级为HTTP(中间人攻击)
  • 用户首次访问时可能被劫持到恶意网站
  • HSTS可以彻底消除这种风险

Nginx HSTS配置

# 在 server 块中添加
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;

# 参数说明:
# max-age=31536000     → 有效期1年(秒)
# includeSubDomains    → 包含所有子域名
# preload              → 提交到浏览器预加载列表(需谨慎)
# always               → 所有响应都添加此头(包括错误页)

Apache HSTS配置

<IfModule mod_headers.c>
    Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
</IfModule>
⚠️ Preload 警告: 一旦提交到 HSTS Preload List,您的网站将在未来数月甚至数年内被所有主流浏览器强制使用HTTPS。请确保:
  • ✅ 全站已正确部署HTTPS
  • ✅ 所有子域名都支持HTTPS
  • ✅ 不再需要使用HTTP访问任何资源

🛡️ 安全响应头

除了HSTS,还应配置以下安全头以增强防护:

头名称 推荐值 作用 优先级
X-Content-Type-Options nosniff 防止MIME类型嗅探攻击
X-Frame-Options DENYSAMEORIGIN 防止点击劫持(Clickjacking)
X-XSS-Protection 1; mode=block 启用浏览器XSS过滤器
Referrer-Policy strict-origin-when-cross-origin 控制Referer头信息泄露
Content-Security-Policy default-src 'self' 防止XSS和数据注入攻击 需定制
Permissions-Policy camera=(), microphone=() 限制浏览器功能权限 按需

Nginx 完整安全头配置

# 安全响应头
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;

# 内容安全策略(根据实际需求调整)
add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:; font-src 'self' data:;" always;

# 权限策略
add_header Permissions-Policy "camera=(), microphone=(), geolocation=()" always;

⚙️ TLS 配置优化

协议版本选择

协议版本 状态 说明
SSL 2.0 / 3.0 ❌ 必须禁用 Poodle、Drown等严重漏洞
TLS 1.0 / 1.1 ❌ 必须禁用 BEAST、RC4等弱点
TLS 1.2 ✅ 推荐启用 广泛支持,安全性良好
TLS 1.3 ✅ 强烈推荐 最新标准,性能最优(0-RTT握手)

Nginx TLS优化配置

# 仅启用TLS 1.2 和 1.3
ssl_protocols TLSv1.2 TLSv1.3;

# 推荐的加密套件(2026年最新)
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;

# 优先使用服务器的密码顺序
ssl_prefer_server_ciphers off;

# 会话缓存
ssl_session_cache shared:SSL:50m;
ssl_session_timeout 1d;
ssl_session_tickets on;

# OCSP Stapling
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /path/to/fullchain.pem;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;

验证TLS配置强度

使用以下在线工具测试您的TLS配置:

📋 证书生命周期管理

自动化管理流程

购买/申请
选择合适的证书类型
完成域名验证
安装部署
下载证书文件
配置Web服务器
监控维护
定期检测状态
关注到期提醒
续期替换
提前30天续期
平滑切换新证书

证书到期提醒机制

方案1:TrustySSL控制台提醒
  • 系统会在到期前30天、14天、7天发送邮件/SMS提醒
  • 确保联系邮箱和手机号准确
方案2:脚本自动检测
#!/bin/bash
# check_ssl_expiry.sh - 检查证书到期时间

DOMAIN="yourdomain.com"
DAYS_WARNING=30

EXPIRY_DATE=$(echo | openssl s_client -servername $DOMAIN -connect $DOMAIN:443 2>/dev/null | openssl x509 -noout -enddate 2>/dev/null | cut -d= -f2)

if [ -z "$EXPIRY_DATE" ]; then
    echo "ERROR: 无法获取证书信息"
    exit 1
fi

EXPIRY_EPOCH=$(date -d "$EXPIRY_DATE" +%s)
NOW_EPOCH=$(date +%s)
DAYS_LEFT=$(( ($EXPIRY_EPOCH - $NOW_EPOCH) / 86400 ))

if [ $DAYS_LEFT -le $DAYS_WARNING ]; then
    echo "警告:证书将在 $DAYS_LEFT 天后过期!"
    # 发送告警邮件或调用API通知
else
    echo "正常:证书还有 $DAYS_LEFT 天过期"
fi
方案3:监控服务集成
  • Prometheus + Alertmanager
  • Zabbix 自定义监控项
  • Datadog / New Relic 合成监控

📊 监控与告警

关键监控指标

性能指标
  • SSL握手时间 < 200ms
  • TLS协商成功率 > 99.9%
  • 证书链完整性 持续检测
  • OCSP响应时间 < 100ms
安全指标
  • 弱密码套件使用率 = 0%
  • 旧版协议请求 监控趋势
  • 证书错误次数 异常告警
  • 混合内容数量 定期扫描

日志审计

# Nginx SSL相关日志格式
log_format ssl_log '$remote_addr - $remote_user [$time_local] '
                   '"$request" $status $body_bytes_sent '
                   '"$http_referer" "$http_user_agent" '
                   'ssl_protocol=$ssl_protocol '
                   'ssl_cipher=$ssl_cipher';

access_log /var/log/nginx/ssl_access.log ssl_log;

✅ 安全检查清单

部署完成后,请逐项确认以下安全措施:

# 检查项 验证方法 优先级 状态
1 全站HTTPS强制跳转 访问 http:// 应301重定向到 https:// P0
2 禁用旧版TLS/SSL SSL Labs 测试无旧协议支持 P0
3 HSTS已启用 响应头包含Strict-Transport-Security P0
4 强加密套件 无RC4、DES、3DES等弱算法 P0
5 证书链完整 无证书链错误警告 P1
6 OCSP Stapling开启 握手时间显著降低 P1
7 安全响应头完整 X-Frame-Options、CSP等已配置 P1
8 无混合内容 控制台无Mixed Content警告 P1
9 私钥权限正确 .key 文件权限为600 P2
10 到期提醒已设置 收到或配置了续期通知 P2
11 SSL Labs评级 A+ 在线测试 目标
12 监控告警就绪 异常情况能及时收到通知 运维
达成目标

完成以上所有检查项后,您的网站将达到企业级安全标准
如有疑问,随时查看 常见问题排查 或联系技术支持。


最后更新:2026-05-26
文档反馈

这篇文档对您有帮助吗?您的反馈将帮助我们改进内容质量

相关文档
暂无相关文档