Server Configuration

วิธีตั้งค่า TLS 1.2 และ TLS 1.3 บน Apache

A
admin
1 พฤษภาคม 2568 0 ครั้ง
แชร์:

วิธีตั้งค่า 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

แหล่งอ้างอิง

หมวดหมู่: Server Configuration