Certificate Chain และ Chain of Trust คืออะไร
Certificate Chain คืออะไร
Chain of Trust คือลำดับใบรับรองที่เชื่อมจากใบของเซิร์ฟเวอร์ (end-entity) ผ่านใบรับรองระดับกลางไปยังรูท CA ที่ไคลเอนต์เชื่อถืออยู่แล้ว หลักการ path validation อยู่ใน RFC 5280
โครงสร้างทั่วไป
Root CA (อยู่ใน trust store ของ OS/เบราว์เซอร์)
└── Intermediate CA
└── End-entity certificate (เว็บไซต์)รูท CA มักไม่ออกใบให้เว็บไซต์โดยตรง เพื่อลดความเสี่ยงหากคีย์ออกใบถูกใช้บ่อย ใบระดับกลางทำหน้าที่ออกใบจริงและสามารถเพิกถอนได้โดยไม่ต้องเปลี่ยนรูททั้งระบบ
การตรวจสอบของไคลเอนต์
1. ตรวจลายเซ็นของใบ end-entity ว่าออกโดย intermediate ที่ระบุใน Issuer
2. ตรวจใบ intermediate ต่อไปจนถึงรูท
3. ตรวจช่วงอายุ, key usage, extended key usage (เช่น serverAuth) และนโยบายชื่อ
4. ถ้า path สร้างไม่ได้ การเชื่อมต่อ HTTPS จะล้มเหลวหรือแสดงคำเตือน
ปัญหาที่พบบ่อยคือเซิร์ฟเวอร์ส่งเฉพาะใบของเว็บไซต์ ไม่ส่ง intermediate บางระบบปฏิบัติการอาจดึง AIA ได้ แต่ไคลเอนต์จำนวนมากไม่ทำเช่นนั้น โดยเฉพาะมือถือและไลบรารี
วิธีตรวจและแก้
openssl s_client -connect example.com:443 -showcertsดูว่ามีใบครบหรือไม่ และมีข้อความเช่น unable to get local issuer certificate หรือไม่
Apache
SSLCertificateChainFile /path/to/intermediate.pemหรือรวมใบเซิร์ฟเวอร์กับ intermediate ในไฟล์เดียวแล้วชี้ SSLCertificateFile
Nginx
ssl_certificate /path/to/fullchain.pem;Let's Encrypt ให้ไฟล์ fullchain.pem สำหรับกรณีนี้โดยตรง
สรุป
chain ที่ไม่ครบทำให้เว็บเปิดได้บนบางเครื่องแต่พังบนเครื่องอื่น ควรทดสอบจากภายนอกและส่ง intermediate ครบทุกครั้ง