## 1.需要先升级 OpenSSL 到 1.1.1+
可参考:[CentOS7 Nginx 服务化、开机自启动](/archives/centos7-nginx-service)
升级后,查看 openssl 支持的加密套件
```bash
openssl ciphers -v
```
## 2.Nginx 配置支持 TLS v1.3
```bash
# 增加 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的配置目录
```bash
cd /etc/nginx/
```
需要生成足够强的Diffie-Hellman参数,
```bash
openssl dhparam -out dh4096.pem 4096
```
> 有人认为 4096 位是过大的,会给系统的CPU造成不必要的负担,但是对于现代计算能力来说,这似乎是一个值得的妥协。(有人使用 2048 位)
在nginx中配置
```bash
ssl_dhparam dh4096.pem;
```
重启nginx生效。
> 还可参考:[Implementing SSL Perfect Forward Secrecy in NGINX Web-Server](https://www.howtoforge.com/ssl-perfect-forward-secrecy-in-nginx-webserver)
## 4.验证是否支持 TLS 1.3
### 检测浏览器验证
[ssl.haka.se](https://ssl.haka.se/)
目前最新版 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)](https://www.ssllabs.com/ssltest/index.html)
## 5.开启 HSTS
HTTP Strict Transport Security(通常简称为HSTS)是一个安全功能,它告诉浏览器只能通过 HTTPS 访问当前资源,而不是HTTP,浏览器应该自动把所有尝试使用 HTTP 的请求自动替换为 HTTPS 请求。
> 需要全站开启 HTTPS
Nginx 添加配置
```bash
add_header Strict-Transport-Security "max-age=15768000; includeSubdomains; preload" always;
```
> 具体可参考:[HTTP Strict Transport Security](https://developer.mozilla.org/zh-CN/docs/Security/HTTP_Strict_Transport_Security)
## 6.DNS CAA
使用 CAA 记录防止域名证书劫持,目前阿里云已支持。
可参考:[阿里云官方文档](https://help.aliyun.com/document_detail/65537.html)
可以访问 https://sslmate.com/caa ,在``1、Enter Your Domain Name``这里输入主域名(一级域名),点``Auto-GeneratePolicy``生成主域名的CAA记录值;
具体可参考:[教你给阿里云域名解析添加CAA记录,防止你的域名证书被劫持!](https://wp.gxnas.com/4594.html)

本博客开始支持 TLS 1.3