จัดการ 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;
บรรทัดนี้กำหนดให้เซิร์ฟเวอร์เลือกใช้ชุดรหัสที่เซิร์ฟเวอร์กำหนดแทนที่จะให้ไคลเอนต์เป็นผู้เลือก วิธีนี้ช่วยให้มั่นใจว่าเซิร์ฟเวอร์จะไม่ใช้ชุดรหัสที่อ่อนแอซึ่งไคลเอนต์อาจเสนอมา