ssllabs.com评分A+的nginx ssl配置

什么是 ssllabs

ssllabs是一个在线版全球知名的HTTPS 网站检测工具 。 Qualys SSL Labs 同时也是很具有影响力的 SSL 安全和性能研究机构。在线监测地址为:https://www.ssllabs.com/ssltest/index.html

使用openssl工具生成自己的证书

  • 生成一个RSA秘钥 openssl genrsa -des3 -out demo.key 2048

    要记住这里输入的密码,在下面的步骤中都会用到
  • 拷贝一个不需要输入密码的密钥文件 openssl rsa -in demo.key -out demo_nopass.key

    这个秘钥会在nginx的配置中使用到,如果使用上面的秘钥,nginx重新加载配置文件都要输入密码
  • 生成一个证书请求 openssl req -new -key demo.key -out demo.csr
  • 使用SHA-2签名算法,生成证书 openssl req -x509 -sha256 -days 365 -newkey rsa:2048 -key demo.key -out demo.crt
  • 生成交换秘钥 openssl dhparam -out dhparam.pem 2048

    秘钥的位数越大,生成秘钥花费的时间越长,默认 2048

配置nginx


server {
    listen       443 ssl;
    ssl      on;
    server_name  demo.com;
    root /data1/www/demo;
    access_log /var/log/nginx/demo-access.log main;
    error_log /var/log/nginx/demo-error.log warn;
    ssl_certificate /usr/local/nginx/conf/conf.d/ssl/demo.crt;
    ssl_certificate_key /usr/local/nginx/conf/conf.d/ssl/demo_nopass.key;
    resolver_timeout 1d;
    #ssl 会话缓存配置,参考:http://nginx.org/en/docs/http/configuring_https_servers.html
    ssl_session_cache shared:SSL:50m;
    ssl_session_tickets off;
    ssl_dhparam /usr/local/nginx/conf/conf.d/ssl/dhparam.pem;
    #不再使用旧的不安全的 SSLv2 和 SSLv3 
    ssl_protocols   TLSv1 TLSv1.1 TLSv1.2;
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:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256';
    ssl_prefer_server_ciphers on;
    resolver 202.106.0.20 8.8.8.8 valid=300s;
}