构建一个安全的HTTPS环境

https://www.ssllabs.com/ssltest/ 上,你可以对你的 HTTPS 站点进行评分,如果是A+,则说明你的站点安全性特别高。如图所示

如何构建一个高安全性的站点

那么,如何搭建一个安全性特别高的 HTTPS 类型站点呢?ssllabs 给了我们一份SSL and TLS Deployment Best Practices 有兴趣的可以看下,因为是全英文的。我稍微总结一下:

  • 密钥足够复杂,最好超过2048位,并且要保护好私钥,避免外泄
  • 选择目前主流安全性比较高的签名算法
  • 证书要从可靠的CA厂商申请,因为不可靠的厂商(比如不被主流浏览器信任的证书厂商)会乱修改证书日期,重复签发证书。
  • 使用安全协议,比如TLS1.2 禁止使用不安全的协议,比如SSLV2 SSLV3。
  • 使用安全密码套件
  • 使用完整的证书链
  • 使用HTTP/2
  • 使用OCSP装订
  • 禁止TLS压缩
  • 不缓存敏感信息
  • 采用HSTS

参考配置

server
    {
        listen 443 ssl http2 default_server;
        server_name www.awen.me awen.me;
        index index.html index.htm index.php;
        root  /web;
        ssl on;
        ssl_certificate /nginx/ssl/awen/fullchain.cer;
        ssl_certificate_key /nginx/ssl/awen/awen.me.key;
        ssl_ciphers                EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
        ssl_prefer_server_ciphers  on;
        ssl_protocols              TLSv1.2;
        ssl_session_cache          shared:SSL:50m;
        ssl_session_timeout        1d;
        ssl_session_tickets        on;
        resolver                   114.114.114.114 valid=300s;
        resolver_timeout           10s;

        if ($request_method !~ ^(GET|HEAD)$ ) {
            return           444;
         }
       add_header  Strict-Transport-Security  "max-age=31536000; includeSubDomains; preload";
       add_header  X-Frame-Options  deny;
       add_header  X-Content-Type-Options  nosniff;
       add_header CIP $http_x_real_ip;
       add_header Accept-Ranges bytes;


}

server {
    listen  80;
    server_name _;
    server_name www.fangwenjun.com fangwennjun.com awen.me www.awen.me;
    if ($request_method !~ ^(GET|HEAD|POST)$ ) {
            return        444;
        }
    rewrite ^(.*)$  https://awen.me$1 permanent;
}