在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;
}