จัดการ TLS/SSL & Cipher บน NGINX Web Server (Linux Server)
ปรับค่า config ของ Nginx ดังนี้
- ไฟล์การตั้งค่า Nginx ส่วนใหญ่อยู่ใน /etc/nginx และไฟล์การตั้งค่าเว็บไซต์แต่ละเว็บไซต์มักจะอยู่ใน sites-available และ sites-enabled
- แก้ไขเนื้อหาตามตัวอย่าง
server { listen 443 ssl default_server; listen [::]:443 ssl default_server; server_name [YOUR_SERVER_NAME]; ssl_certificate /path/to/your/fullchain.pem; ssl_certificate_key /path/to/your/privkey.pem; ssl_protocols TLSv1.2 TLSv1.3; 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'; ssl_prefer_server_ciphers on; ssl_stapling on; ssl_stapling_verify on; location / { proxy_pass http://[YOUR_BACKEND]; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "Upgrade"; proxy_set_header Host $host; } }
ssl_protocols TLSv1.2 TLSv1.3;
บรรทัดนี้กำหนดให้เซิร์ฟเวอร์รองรับโปรโตคอล TLS เวอร์ชัน 1.2 และ 1.3 เท่านั้น การกำหนดเช่นนี้จะช่วยให้มั่นใจว่าเซิร์ฟเวอร์จะไม่ใช้โปรโตคอลรุ่นเก่าที่มีช่องโหว่เช่น SSLv3, TLSv1.0 และ TLSv1.1 ซึ่งมีความปลอดภัยต่ำ
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';
บรรทัดนี้กำหนดชุดรหัส (cipher suites) ที่เซิร์ฟเวอร์จะใช้ในการเข้ารหัสข้อมูล ชุดรหัสเหล่านี้เป็นชุดรหัสที่ทันสมัยและปลอดภัย ซึ่งใช้การเข้ารหัสที่แข็งแกร่ง (AES-256, AES-128) และวิธีการแลกเปลี่ยนกุญแจที่ปลอดภัย (ECDHE) นอกจากนี้ยังมีการใช้ชุดรหัส CHACHA20-POLY1305 ซึ่งมีประสิทธิภาพสูงบนอุปกรณ์ที่ไม่มีการเร่งความเร็วฮาร์ดแวร์สำหรับ AES
ssl_prefer_server_ciphers on;
บรรทัดนี้กำหนดให้เซิร์ฟเวอร์เลือกใช้ชุดรหัสที่เซิร์ฟเวอร์กำหนดแทนที่จะให้ไคลเอนต์เป็นผู้เลือก วิธีนี้ช่วยให้มั่นใจว่าเซิร์ฟเวอร์จะไม่ใช้ชุดรหัสที่อ่อนแอซึ่งไคลเอนต์อาจเสนอมา