nginx ssl安全设置有哪些
导读:Nginx SSL/TLS 安全设置清单 一 基础协议与套件 仅启用安全协议:优先使用 TLSv1.2/TLSv1.3,禁用 SSLv2/SSLv3/TLSv1.0/TLSv1.1。示例:ssl_protocols TLSv1.2 TLS...
Nginx SSL/TLS 安全设置清单
一 基础协议与套件
- 仅启用安全协议:优先使用 TLSv1.2/TLSv1.3,禁用 SSLv2/SSLv3/TLSv1.0/TLSv1.1。示例:ssl_protocols TLSv1.2 TLSv1.3。
- 选择安全套件并优先服务器端顺序:启用 ECDHE 实现 Forward Secrecy(FS),优先 AEAD 套件(如 AES-GCM、ChaCha20-Poly1305)。示例:ssl_ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;ssl_prefer_server_ciphers on。
- 禁用不安全算法与散列:如 RC4、DES、MD5、ADH、NULL 等。
- 证书与链:部署 完整证书链(fullchain),确保中间证书就位,避免链不完整导致信任问题。
- 版本与组件:保持 Nginx 与 OpenSSL 为较新版本,及时获得安全修复。
二 握手与会话优化
- 会话缓存与会话复用:开启共享会话缓存,减少完整握手次数。示例:ssl_session_cache shared:SSL:10m; ssl_session_timeout 5m。
- 会话票据(Session Tickets):可按需开启(ssl_session_tickets on),在多节点场景建议配置一致的 ssl_session_ticket_key 以便共享;若无法保证一致性与安全存储,可关闭并使用会话缓存替代。
- HTTP/2:在 TLS 之上启用 HTTP/2 提升性能(需 Nginx ≥ 1.9.5、OpenSSL ≥ 1.0.2):listen 443 ssl http2。
三 证书与信任链
- 证书链完整性:使用 fullchain.pem 作为 ssl_certificate,确保服务器发送完整链(站点证书 + 中间证书),避免客户端验证失败。
- OCSP Stapling:开启 OCSP 装订以减少验证延迟并避免泄露客户端查询。要点:ssl_stapling on; 配置 resolver;若 ssl_certificate 不含中间证书,使用 ssl_trusted_certificate 提供受信任 CA/中间证书;按需启用 ssl_stapling_verify on 做响应校验。
- 客户端证书校验(可选,双向 TLS):启用 ssl_verify_client on|optional;指定 ssl_client_certificate(用于发送给客户端以选择证书)与 ssl_trusted_certificate(用于验证客户端证书链);设置 ssl_verify_depth 控制链深度。
四 强化与运维实践
- 强制 HTTPS 与 HSTS:将 HTTP→HTTPS 301 重定向;启用 Strict-Transport-Security 头:add_header Strict-Transport-Security “max-age=31536000; includeSubDomains; preload”; 。
- 安全响应头:补充 X-Frame-Options、X-XSS-Protection、X-Content-Type-Options、Referrer-Policy、Content-Security-Policy 等,降低常见 Web 攻击面。
- 隐藏版本信息:设置 server_tokens off; ,减少信息泄露。
- DH/ECDH 参数:为 DHE 提供强参数(ssl_dhparam),并选择合适的椭圆曲线(ssl_ecdh_curve,如 prime256v1 或 auto)。
- 访问控制与抗滥用:对敏感路径使用 allow/deny 做 IP 白名单;通过 limit_conn_zone/limit_conn 限制单 IP 连接数与速率,缓解 DoS。
- 变更与验证:修改后执行 nginx -t 校验并用 nginx -s reload 生效;定期用在线工具(如 SSL Labs)或命令行(如 openssl s_client)复核配置与证书状态。
五 最小可用示例
# HTTP → HTTPS 与 HSTS
server {
listen 80;
server_name example.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name example.com;
# 证书与链
ssl_certificate /etc/nginx/ssl/fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/privkey.pem;
# 协议与套件
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:
ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:
ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
ssl_prefer_server_ciphers on;
# 会话复用
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 5m;
# OCSP Stapling
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 1.1.1.1 valid=300s;
ssl_trusted_certificate /etc/nginx/ssl/chain.pem;
# 中间证书或根证书链
# 安全头
add_header Strict-Transport-Security "max-age=31536000;
includeSubDomains;
preload";
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;
# 其他
server_tokens off;
}
说明:按需调整 resolver 地址与 ssl_trusted_certificate 路径;若启用 DH,额外配置 ssl_dhparam /path/to/dhparam.pem。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: nginx ssl安全设置有哪些
本文地址: https://pptw.com/jishu/762443.html
