- ส่วนมากเข้าได้ปกติ แต่บางครั้งขึ้นแบบนี้ คับ ก็เข้าใจว่าโดน MITM
- แต่เข้าไปดู cer info ก็ถูกต้องปกตินิ
Your connection is not private
Attackers might be trying to steal your information from domain.com (for example, passwords, messages, or credit cards). Learn more about this warning
- ถาม GPT เค้าแนะนำประมาณให้ทำ fullchain.crt
- เราทำ nginx และ reverse proxy เข้าไปอีกที
- ตั้ง SSL ที่ nginx นี่แหละ linux ด้วย
- ได้ไฟล์สำหรับคอนฟิก ssl มา 3 ไฟล์
DigiCertCA.crtwildcard_mydomain.crtwildcard_mydomain.key
อาการนี้มีความเป็นไปได้สูงว่า Nginx ส่ง certificate chain ไม่ครบ ครับ โดยเฉพาะจากข้อมูลที่บอกว่า ได้ 3 ไฟล์ และตอนนี้ Nginx ใช้เฉพาะ wildcard_mydomain.crtซึ่งอาจเป็นแค่ server certificate ไม่รวม DigiCert intermediate certificateจุดสำคัญคือไฟล์เหล่านี้:
wildcard_mydomain.crt ← Certificate ของเว็บ wildcard_mydomain.key ← Private key DigiCertCA.crt ← Intermediate CA
- คุณ GPT ให้ทำ
$ sudo cat DigiCertCA.crt wildcard_mydomain.crt > wildcard_mydomain-fullchain.crt
- แล้วใช้ config ไฟล์นี้แทน
- จากนั้นก็ reload config file
$ sudo systemctl reload nginx
- ระบบยังทำงานได้ปกติ รอด รอดูยาวๆ จะเป็นอีกมั้ย
ssl_certificate /etc/letsencrypt/live/mydomain/wildcard_mydomain-fullchain.crt;
# ssl_certificate /etc/letsencrypt/live/mydomain/wildcard_mydomain.crt;
ssl_certificate_key /etc/letsencrypt/live/mydomain/wildcard_mydomain.key;
- ดูทรงแล้ว ปัญหาน่าจะเกิดจาก DNS หลายตัว ชี้ domain name นี้ไป คนละไอพี เดานะ ไอพีใน หรือ ไปไอพีนอก สลับกัน
คำสั่งนี้ทำไปเพื่ออะไร?
การใช้คำสั่ง cat รวมไฟล์แบบนี้ ทำไปเพื่อ สร้างความน่าเชื่อถือที่สมบูรณ์ (Chain of Trust) ให้กับเบราว์เซอร์ของผู้ใช้งานครับ
อธิบายให้เห็นภาพง่ายๆ คือ:
เบราว์เซอร์ของผู้ใช้ (เช่น Chrome, Safari) จะมีความน่าเชื่อถือพื้นฐานที่ฝังมาในเครื่อง เรียกว่า Root CA
ใบรับรองเว็บของคุณ (
wildcard_mydomain.crt) ไม่ได้ถูกออกโดย Root CA โดยตรง แต่ถูกออกโดยคนกลางที่เรียกว่า Intermediate CA (DigiCertCA.crt)ถ้า Web Server ของคุณส่งแค่ใบรับรองเว็บ (
wildcard_mydomain.crt) ไปให้เบราว์เซอร์ เบราว์เซอร์บางตัว (โดยเฉพาะในมือถือรุ่นเก่าๆ หรือบางระบบปฏิบัติการ) จะหาทางเชื่อมกลับไปที่ Root CA ไม่เจอ ทำให้มันแจ้งเตือนผู้ใช้ว่า "เว็บนี้ไม่ปลอดภัย (Not Secure)"
การรวมไฟล์ (Bundle) จึงเป็นการเอาใบรับรองเว็บของคุณและใบรับรองของคนกลางมาต่อกันเป็นไฟล์เดียว เพื่อให้ Web Server (เช่น Nginx หรือ HAProxy) ส่งแพ็กเกจนี้ไปให้เบราว์เซอร์ทีเดียวจบ เบราว์เซอร์จะสามารถตรวจสอบย้อนกลับไปถึง Root CA ได้อย่างไร้รอยต่อครับ
ข้อควรระวังที่สำคัญ: ลำดับไฟล์ของคุณสลับกันอยู่
คำสั่งที่คุณระบุมาคือ:
sudo cat DigiCertCA.crt wildcard_mydomain.crt > wildcard_mydomain-fullchain.crt
ลำดับนี้ผิดหลักการของ Web Server ส่วนใหญ่ (เช่น Nginx) ครับ การต่อไฟล์ Full Chain ที่ถูกต้อง จะต้องให้ ใบรับรองของโดเมนเราอยู่บนสุด แล้วเรียงลำดับลงไปหา Intermediate CA ครับ หากเอา Intermediate ขึ้นก่อน Web Server อาจจะ Error สตาร์ทไม่ขึ้น หรือเบราว์เซอร์อ่านค่าผิดพลาดได้
คำสั่งที่ถูกต้องคือต้องสลับที่กันแบบนี้ครับ:
sudo cat wildcard_mydomain.crt DigiCertCA.crt > wildcard_mydomain-fullchain.crt
เมื่อใช้คำสั่งนี้เสร็จ คุณจะได้ไฟล์ wildcard_mydomain-fullchain.crt และคุณจะใช้แค่ไฟล์นี้ คู่กับไฟล์ Private Key (wildcard_mydomain.key) ไปตั้งค่าใน Web Server ของคุณครับ (ส่วน 2 ไฟล์แรกที่เป็น .crt ไม่ต้องเอาไปคอนฟิกใน Web Server แล้ว)