作者:gc(at)sysin.org,主页:www.sysin.org
3. Nginx
Nginx SSL 证书配置方法
server {
listen 443 ssl;
server_name www.example.com;
ssl_certificate www.example.com.crt;
ssl_certificate_key www.example.com.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
...
}
证书文件使用 PEM 格式。
证书文件使用相对路径时,证书文件要放在主配置文件相同目录下(默认 /etc/nginx)。
更多配置,这篇文章可以参考:Strong SSL Security on nginx
TLSv1.3
版本支持如下:
- The
TLSv1.1
andTLSv1.2
parameters (1.1.13, 1.0.12) work only when OpenSSL 1.0.1 or higher is used. - The
TLSv1.3
parameter (1.13.0) works only when OpenSSL 1.1.1 built with TLSv1.3 support is used.
More info on the NGINX documentation
HTTP/2
版本要求
openssl 的版本必须在 1.0.2e 及以上,执行以下命令验证:
openssl version
nginx 的版本必须在 1.9.5 以上,需要添加 --with-http_v2_module 模块,执行以下命令验证:
nginx -V
参考配置
以下配置:启用 HTTP/2、TLSv1.3、推荐的 Ciphers、HSTS,可以获得 A+ 得分
server {
#listen 443 ssl;
listen 443 ssl http2; # HTTP/2 Enable
listen [::]:443 ssl http2; # IPv6
server_name www.sysin.org;
ssl_certificate www.sysin.org.crt;
ssl_certificate_key www.sysin.org.key;
ssl_protocols TLSv1.2 TLSv1.3; # Requires nginx >= 1.13.0 else use TLSv1.2
ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!kRSA;
add_header Strict-Transport-Security "max-age=31536000; includeSubdomains; preload" always;
...
}
#ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
#ssl_ciphers HIGH:!aNULL:!MD5; #B
#ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!kRSA; #A
#ssl_ciphers ALL:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS:!RC4; #B
#ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384; #A (Mozilla Intermediate)