Nginx SSL 配置

/

乘着双十一购买了 Comodo Positive SSL,简要记录一下配置要点:

获取 crt 证书

openssl req -new -newkey rsa:2048 -nodes -keyout example.com.key -out example.com.csr

Country NameCNCommon Name 中填入网站域名,对于单域名证书而言,www.example.comimg.example.com 是不同的两个域名;泛域名证书可填入 *.example.com

生成的 key 文件是私钥,csr 文件是证书签名请求,把其上传到官方请求生成 crt 证书。

Nginx 配置

生成 ssl_certificatessl_trusted_certificatessl_dhparam

cat example.com.crt COMODORSADomainValidationSecureServerCA.crt COMODORSAAddTrustCA.crt > ssl-bundle.crt
cat AddTrustExternalCARoot.crt > trusted.crt
openssl dhparam -out dhparam.pem 2048

相关 crt 可以从官方下载

server {
    server_name example.com;
    return 301 https://www.example.com$request_uri;
}

server {
    listen 443 ssl reuseport;
    server_name www.example.com;

    ssl on;
    ssl_certificate /etc/nginx/certs/ssl-bundle.crt;
    ssl_trusted_certificate /etc/nginx/certs/trusted.crt;
    ssl_certificate_key /etc/ssl/private/example.com.key;
    ssl_dhparam /etc/nginx/certs/dhparam.pem;
    ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH:ECDHE-RSA-AES128-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA128:DHE-RSA-AES128-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-GCM-SHA128:ECDHE-RSA-AES128-SHA384:ECDHE-RSA-AES128-SHA128:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES128-SHA128:DHE-RSA-AES128-SHA128:DHE-RSA-AES128-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA384:AES128-GCM-SHA128:AES128-SHA128:AES128-SHA128:AES128-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4";
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;
    ssl_session_tickets on;
    ssl_stapling on;
    ssl_stapling_verify on;
    resolver  8.8.8.8 8.8.4.4  valid=300s;
    resolver_timeout 10s;
    add_header Strict-Transport-Security "max-age=63072000";
    add_header X-Frame-Options SAMEORIGIN;
    add_header X-Content-Type-Options nosniff;
    keepalive_timeout 70;

如何配置 ssl_ciphers 可以参这个网站Strict-Transport-Security 告诉浏览器在指定的 max-age 内始终通过 https 访问。X-Frame-Options 用来指定网页是否允许被 iframe 嵌套,DENY 不允许被任何页面嵌入,SAMEORIGIN 不允许被本域以外的页面嵌入,由于我的个别页面用到了 iframe,所以在此设置为 SAMEORIGIN。X-Content-Type-Options 设置对未指定或错误指定的 Content-Type 资源真正类型的猜测行为,nosniff 表示不允许任何猜测。

建立 https 连接包括获取证书、校验证书、TLS 握手等步骤。为了简化 TLS 握手过程,缩短握手时间,可以对之前握手的 session 进行缓存,有两种方案:ssl_session_cache 存在服务端,占用服务端资源;ssl_session_tickets 存在客户端。ssl_stapling 这几行用来配置 OCSP stapling 策略,服务端通过它可以在证书链中封装证书颁发机构的 OCSP(Online Certificate Status Protocol)响应,从而让浏览器在建立 TLS 连接时跳过对证书有效性的在线验证,避免了 TLS 握手过程中的阻塞。

最后,可以通过 Qualys SSL Server Test 这个工具检验安全性能以及配置是否生效,并对你的站点综合打分。

ssllabs

Comments