วิธีตั้งค่า TLS 1.2 และ TLS 1.3 บน Nginx
วิธีตั้งค่า TLS 1.2 และ TLS 1.3 บน Nginx
Nginx รองรับ TLS 1.3 เมื่อคอมไพล์กับ OpenSSL 1.1.1 หรือใหม่กว่า (เริ่มมีใน Nginx 1.13.0) รายละเอียดไดเรกทิฟอยู่ที่ nginx ngx_http_ssl_module
การตั้งค่าหลัก
nginx
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
ssl_session_timeout 1d;
ssl_session_cache shared:MozSSL:10m;
ssl_session_tickets off;
ssl_stapling on;
ssl_stapling_verify on;
resolver 1.1.1.1 8.8.8.8 valid=300s;
resolver_timeout 5s;
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains" always;ชุด ssl_ciphers มีผลกับ TLS 1.2 เท่านั้น TLS 1.3 ใช้ cipher ของตัวโปรโตคอลเอง
Server block
nginx
server {
listen 443 ssl;
http2 on;
server_name example.com;
ssl_certificate /etc/nginx/ssl/fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/privkey.pem;
ssl_trusted_certificate /etc/nginx/ssl/chain.pem;
ssl_protocols TLSv1.2 TLSv1.3;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
}
server {
listen 80;
server_name example.com;
return 301 https://$host$request_uri;
}ไดเรกทิฟ http2 on; ใช้กับ Nginx 1.25.1+ ส่วนเวอร์ชันเก่าใช้ listen 443 ssl http2;
สรุป
ปิดโปรโตคอลเก่า, ใช้ full chain ใน ssl_certificate, เปิด OCSP stapling และอย่าเปิด session tickets ถ้ายังไม่ได้หมุนกุญแจอย่างถูกต้อง