วิธีตั้งค่า TLS 1.2 และ TLS 1.3 บน Apache
วิธีตั้งค่า TLS 1.2 และ TLS 1.3 บน Apache
คู่มือนี้ยึดแนว Mozilla SSL Configuration ระดับ Intermediate ซึ่งสมดุลระหว่างความปลอดภัยและความเข้ากันได้
ความต้องการ
- Apache HTTP Server 2.4.37 ขึ้นไปสำหรับ
SSLProtocolที่ระบุ TLS 1.3 ได้ชัดเจน - OpenSSL 1.1.1 ขึ้นไป (รองรับ TLS 1.3)
- โมดูล
mod_sslและmod_headers
อ้างอิงเอกสารอย่างเป็นทางการที่ Apache Module mod_ssl
การตั้งค่า ssl.conf
apache
SSLProtocol -all +TLSv1.2 +TLSv1.3
SSLCipherSuite TLSv1.3 TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256
SSLCipherSuite 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
SSLHonorCipherOrder off
SSLSessionTickets off
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
SSLUseStapling on
SSLStaplingCache shmcb:/run/httpd/stapling_cache(128000)SSLHonorCipherOrder off สอดคล้องกับคำแนะนำปัจจุบันของ Mozilla ที่ให้ไคลเอนต์เลือก cipher จากชุดที่เซิร์ฟเวอร์ยอมรับ (โดยเฉพาะบน TLS 1.3)
Virtual Host
apache
<VirtualHost *:443>
ServerName example.com
SSLEngine on
SSLCertificateFile /etc/ssl/certs/example.crt
SSLCertificateKeyFile /etc/ssl/private/example.key
SSLCertificateChainFile /etc/ssl/certs/chain.crt
</VirtualHost>บน Apache 2.4.8+ สามารถรวมใบรับรองกับ intermediate ใน SSLCertificateFile ได้ตามเอกสาร mod_ssl
การตรวจสอบ
bash
apachectl configtest
openssl s_client -connect example.com:443 -tls1_3
openssl s_client -connect example.com:443 -tls1_2
openssl s_client -connect example.com:443 -tls1คำสั่งสุดท้ายต้องล้มเหลวถ้าปิด TLS 1.0 แล้ว
สรุป
ตั้งค่าโปรโตคอลให้แคบ, จำกัด cipher ของ TLS 1.2 เป็น AEAD กับ ECDHE, เปิด HSTS เมื่อ HTTPS พร้อมแล้ว และส่งใบรับรองครบ chain