Turn Your Website SSL Labs Test Grade to A+
注意: SSL Labs 在2020/1/31將所有允許TLS 1.0和TLS 1.1的網站分數一律調成B
所以我們可以先去設定檔把TLS 1.0和TLS 1.1拿掉
sudo vim /etc/nginx/nginx.conf
#ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_protocols TLSv1.2 TLSv1.3;
如果你有使用Let’s Encrypt SSL Certificate,記得要去設定檔把Cerbot的設定註解,不要直接更改他的設定檔,否則憑證可能就沒辦法自動更新。
sudo vim /etc/nginx/sites-available/default
#include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
到這一步你可以到SSL Labs測看看,應該能到A,把下列網址改成你的domain
https://www.ssllabs.com/ssltest/analyze.html?d=yourdomain.com
to A+
其實很簡單,就是啟用HSTS,雖然我們都會設定讓http request重新導向到https,但如果啟用了HSTS(HTTP Strict Transport Security)就可以避免這些重導向,當瀏覽器發現你的網站的HSTS header時,就不會嘗試去連HTTP(一段時間內,可設定),而是直接連HTTPS,HSTS還能避免downgrade attacks。
現在開始吧!
在設定檔裡加上http2
sudo vim /etc/nginx/sites-available/default
...
listen [::]:443 ssl http2 ipv6only=on;
listen 443 ssl http2;
...
這樣有支援http2的瀏覽器nginx就會自動使用http2
加入這行:
ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
檢查語法後重新載入設定
sudo nginx -t
sudo systemctl reload nginx
你可以用這個方法來看http2 header有沒有順利加入
curl -I -L https://your_domain
看是否出現HTTP/2 200
HTTP/2 200
server: nginx/1.14.0 (Ubuntu)
date: Wed, 22 Apr 2020 20:57:26 GMT
content-type: text/html; charset=UTF-8
編輯設定檔
sudo vim /etc/nginx/nginx.conf
啟動Http2並設定效期(6個月)
http {
...
##
# Virtual Host Configs
##
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
add_header Strict-Transport-Security "max-age=15768000" always;
}
...
如果你有subdomains也要用HSTS,可以加上includeSubDomains
add_header Strict-Transport-Security "max-age=15768000; includeSubDomains" always;
檢查語法後重新載入設定
sudo nginx -t
sudo systemctl reload nginx
這時候再到到SSL Labs測試看到,看分數是否能到A+!