1.需要先升级 OpenSSL 到 1.1.1+
升级后,查看 openssl 支持的加密套件
openssl ciphers -v
2.Nginx 配置支持 TLS v1.3
# 增加 TLSv1.3(1和1.1不安全,废弃)
#TLSv1.3(需要openSSL支持TLS1.3)
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers TLS13-AES-256-GCM-SHA384:TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:!aNULL:!eNULL:!LOW:!ADH:!RC4:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS;
包含 TLS13 是 TLS 1.3 新增的 Cipher Suite,加在最前面即可,只保留安全级别比较高的加密套件。
3.配置 Perfect Forward Secrecy
修复服务器瞬时 Diffie-Hellman 公共密钥过弱。
先进入NGINX的配置目录
cd /etc/nginx/
需要生成足够强的Diffie-Hellman参数,
openssl dhparam -out dh4096.pem 4096
有人认为 4096 位是过大的,会给系统的CPU造成不必要的负担,但是对于现代计算能力来说,这似乎是一个值得的妥协。(有人使用 2048 位)
在nginx中配置
ssl_dhparam dh4096.pem;
重启nginx生效。
还可参考:Implementing SSL Perfect Forward Secrecy in NGINX Web-Server
4.验证是否支持 TLS 1.3
检测浏览器验证
目前最新版 Chrome 和 Firefox 都支持 TLS 1.3,但需要手动开启:
Chrome 84 已经完全移除了 TLS 1.0 和 TLS 1.1;
Firefox 61+,将 about:config
中的 security.tls.version.max
改为 4
;
服务端检测
SSL Server Test(Powered by Qualys SSL Labs)
5.开启 HSTS
HTTP Strict Transport Security(通常简称为HSTS)是一个安全功能,它告诉浏览器只能通过 HTTPS 访问当前资源,而不是HTTP,浏览器应该自动把所有尝试使用 HTTP 的请求自动替换为 HTTPS 请求。
需要全站开启 HTTPS
Nginx 添加配置
add_header Strict-Transport-Security "max-age=15768000; includeSubdomains; preload" always;
6.DNS CAA
使用 CAA 记录防止域名证书劫持,目前阿里云已支持。
可参考:阿里云官方文档
可以访问 https://sslmate.com/caa ,在1、Enter Your Domain Name
这里输入主域名(一级域名),点Auto-GeneratePolicy
生成主域名的CAA记录值;
评论区