วิธีแก้ปัญหา SSL Certificate ที่พบบ่อย

เมื่อ SSL Certificate มีปัญหา เบราว์เซอร์จะขึ้นหน้าเตือนสีแดงเต็มจอ ซึ่งทำให้ผู้เยี่ยมชมส่วนใหญ่กดออกทันทีโดยไม่เข้าเว็บ ปัญหา SSL จึงกระทบทั้งความน่าเชื่อถือและยอดผู้เข้าชมโดยตรง ข่าวดีคือ Error แต่ละแบบมีสาเหตุที่ระบุได้ชัดเจน บทความนี้ไล่ปัญหา SSL ที่พบบ่อยทีละกรณี พร้อมวิธีแก้และเครื่องมือตรวจสอบ

ERR_SSL_PROTOCOL_ERROR

สาเหตุ: Browser ไม่สามารถสร้าง SSL Handshake กับ Server ได้

วิธีแก้:

NET::ERR_CERT_DATE_INVALID (Certificate หมดอายุ)

สาเหตุ: SSL Certificate หมดอายุแล้ว

วิธีแก้:

NET::ERR_CERT_COMMON_NAME_INVALID

สาเหตุ: Certificate ไม่ตรงกับ Domain ที่ใช้งาน

วิธีแก้:

SSL_ERROR_RX_RECORD_TOO_LONG

สาเหตุ: Server ส่ง HTTP Response แทน HTTPS มักเกิดจาก Apache ฟัง Port 443 แต่ส่ง HTTP

วิธีแก้: ตรวจสอบ Apache Virtual Host Config และ SSL Module ว่า Enable อยู่

Incomplete Certificate Chain

บางครั้ง SSL ทำงานบน Chrome แต่ Error บน Firefox หรือมือถือ เกิดจาก Intermediate Certificate ไม่ครบ

ตรวจสอบที่ ssllabs.com/ssltest แล้วดู Certificate Chain ว่าสมบูรณ์หรือไม่

เครื่องมือ Diagnose SSL

เคล็ดลับ: เมื่อเจอปัญหา SSL ให้เปิด Browser แบบ Incognito ก่อน เพราะ SSL Error บางอย่างเกิดจาก Cached Certificate ในเครื่องผู้ใช้ ไม่ใช่ปัญหาจาก Server

ตารางปัญหา SSL ที่พบบ่อย สาเหตุ และวิธีแก้

ก่อนจะลงลึกในแต่ละกรณี ตารางด้านล่างสรุปข้อความ Error ของ SSL ที่พบบ่อยที่สุดบนเบราว์เซอร์ พร้อมสาเหตุที่แท้จริงและแนวทางแก้ไขแบบรวบรัด เมื่อเจอหน้าจอเตือนสีแดง ให้จดข้อความ Error ที่ปรากฏ (เช่น โค้ดที่ขึ้นต้นด้วย NET::ERR_CERT_) แล้วเทียบกับตารางนี้ก่อน จะช่วยให้ระบุทิศทางการแก้ได้เร็วขึ้นมาก โดยไม่ต้องลองผิดลองถูกทีละอย่าง:

ข้อความ Error สาเหตุ วิธีแก้
NET::ERR_CERT_DATE_INVALID ใบรับรองหมดอายุ หรือนาฬิกาในเครื่องผู้ใช้ตั้งวันที่ผิด ต่ออายุใบรับรอง และเปิด Auto-Renew; ถ้าเครื่องเดียวที่เจอ ให้ตั้งวันเวลาในเครื่องให้ถูกต้อง
NET::ERR_CERT_COMMON_NAME_INVALID ชื่อโดเมนในใบรับรองไม่ตรงกับโดเมนที่เปิด (name mismatch) ออกใบรับรองที่ครอบคลุมทั้ง root และ www; ตรวจ SAN ให้ตรงกับโดเมนที่ใช้งานจริง
NET::ERR_CERT_AUTHORITY_INVALID Certificate Chain ไม่ครบ (ขาด Intermediate) หรือใบ self-signed ติดตั้งใบรับรองใหม่พร้อม CA Bundle เต็ม; ถ้าทดสอบภายในให้ใช้ใบจาก CA จริง
ERR_SSL_PROTOCOL_ERROR Handshake ล้มเหลว เช่น TLS version ไม่ตรง หรือ SSL Mode ผิดที่ Cloudflare เปิด TLS 1.2/1.3 ที่เซิร์ฟเวอร์; ตั้ง Cloudflare SSL เป็น Full (Strict)
SSL_ERROR_RX_RECORD_TOO_LONG เซิร์ฟเวอร์ส่ง HTTP ออกทาง Port 443 แทน HTTPS ตรวจ Virtual Host ให้เปิด SSL Module และฟัง Port 443 ด้วย directive SSL ครบ
Incomplete Chain (เตือนเฉพาะบางเบราว์เซอร์) Intermediate Certificate ไม่ครบ บางเบราว์เซอร์เติม chain เองไม่ได้ ติดตั้ง CA Bundle เต็ม ตรวจซ้ำที่ SSL Labs ว่า chain สมบูรณ์
Mixed Content (กุญแจไม่ขึ้น/ขีดทับ) หน้า HTTPS โหลด resource (รูป, JS, CSS) ผ่าน HTTP เปลี่ยน asset ทั้งหมดเป็น HTTPS หรือ relative URL; ตรวจด้วย whynopadlock.com

หากเจอ Error ที่ไม่อยู่ในตารางนี้ ให้คัดลอกข้อความเต็มไปค้นหา เพราะเบราว์เซอร์แต่ละค่ายตั้งชื่อ Error ต่างกันแม้สาเหตุเดียวกัน เช่น Firefox จะใช้คำว่า SEC_ERROR_UNKNOWN_ISSUER ในกรณีเดียวกับ NET::ERR_CERT_AUTHORITY_INVALID ของ Chrome ทั้งคู่หมายถึง Chain ไม่ครบเหมือนกัน

ตรวจสอบ SSL ด้วยเครื่องมือ (openssl s_client, SSL Labs, browser)

การวินิจฉัยปัญหา SSL ที่แม่นยำต้องเริ่มจากการ "มองเห็น" สิ่งที่เซิร์ฟเวอร์ส่งออกมาจริง ๆ ไม่ใช่เดาจากข้อความ Error อย่างเดียว เครื่องมือสามกลุ่มต่อไปนี้ครอบคลุมการตรวจสอบเกือบทุกกรณี ตั้งแต่ระดับ command line ไปจนถึงรายงานแบบเห็นภาพ:

1. openssl s_client — ตรวจจากเครื่องโดยตรง

คำสั่ง openssl s_client เชื่อมต่อไปยังเซิร์ฟเวอร์แล้วแสดง chain ทั้งหมดที่ได้รับ เหมาะสำหรับเช็คว่า Intermediate ครบหรือไม่โดยไม่ต้องพึ่งเว็บภายนอก:

openssl s_client -connect yourdomain.com:443 -servername yourdomain.com

ดูที่ส่วน Certificate chain ถ้ามีเฉพาะใบของโดเมน (depth 0) แต่ไม่มี Intermediate (depth 1) แสดงว่า chain ไม่ครบ และให้สังเกตบรรทัด Verify return code — ถ้าได้ 0 (ok) คือใช้ได้ ส่วนตรวจวันหมดอายุใช้คำสั่งนี้:

echo | openssl s_client -connect yourdomain.com:443 2>/dev/null | openssl x509 -noout -dates

2. SSL Labs — รายงานเกรดแบบเห็นภาพ

เปิด ssllabs.com/ssltest แล้วกรอกโดเมน ระบบจะให้เกรด A ถึง F พร้อมระบุชัดว่า chain สมบูรณ์ไหม รองรับ TLS version ใด และมีช่องโหว่ที่รู้จักหรือไม่ เหมาะกับการยืนยันผลหลังแก้ไข และส่งให้ลูกค้า/ทีมงานดูเป็นหลักฐาน

3. Developer Tools ในเบราว์เซอร์

กด F12 เปิด DevTools ไปที่แท็บ Security (Chrome) จะเห็นสถานะใบรับรองและรายการ resource ที่ไม่ปลอดภัย ส่วนแท็บ Console จะแจ้ง Mixed Content ทุกรายการพร้อม URL ที่ยังเป็น HTTP ทำให้ไล่แก้ได้ตรงจุด

แก้ certificate chain ไม่ครบ (intermediate/CA bundle)

ปัญหา chain ไม่ครบเป็นสาเหตุอันดับต้น ๆ ที่ทำให้ "เปิดได้บน Chrome แต่ Error บนมือถือหรือ Firefox" เพราะเบราว์เซอร์เดสก์ท็อปบางตัวมีความสามารถ AIA fetching ดึง Intermediate มาเติมเองได้ แต่มือถือและไลบรารีฝั่ง API ส่วนใหญ่ทำไม่ได้ จึงมองว่าใบรับรองไม่น่าเชื่อถือ การแก้ที่ถูกต้องคือทำให้เซิร์ฟเวอร์ส่ง chain ครบเองตั้งแต่แรก

โครงสร้าง chain ที่สมบูรณ์ต้องเรียงจากใบของโดเมน (Leaf) ตามด้วย Intermediate ของ CA และไม่จำเป็นต้องใส่ Root (เพราะ Root อยู่ใน trust store ของเครื่องผู้ใช้อยู่แล้ว) ขั้นตอนแก้:

สำหรับใบ Let's Encrypt เครื่องมือออกใบรับรอง (เช่น certbot) จะสร้างไฟล์ fullchain.pem ที่รวม Leaf + Intermediate ไว้แล้ว ให้ชี้เว็บเซิร์ฟเวอร์ไปที่ fullchain.pem แทน cert.pem เสมอ เพื่อกัน chain ขาด

ปัญหา SSL กับ www/non-www และ subdomain

หลายเว็บตั้งใบรับรองให้เฉพาะ yourdomain.com แต่ลืมว่าผู้ใช้บางคนพิมพ์ www.yourdomain.com เข้ามา ทำให้เจอ name mismatch เฉพาะเวอร์ชัน www หรือกลับกัน ใบรับรอง DV ส่วนใหญ่จากผู้ให้บริการชั้นนำจะใส่ทั้งสองชื่อ (root + www) ให้อัตโนมัติอยู่แล้ว แต่ควรตรวจให้แน่ใจในช่อง SAN (Subject Alternative Name) ว่ามีครบทั้งคู่

ส่วน subdomain อื่น ๆ เช่น shop.yourdomain.com หรือ mail.yourdomain.com จะ ไม่ ถูกครอบคลุมโดยใบรับรองของ root โดยอัตโนมัติ ทางเลือกมีดังนี้:

ในระดับ redirect ควรตั้งให้ www ↔ non-www ชี้ไปทางเดียวกัน (เลือกอันใดอันหนึ่งเป็นหลัก) และบังคับ HTTPS ผ่าน .htaccess เพื่อไม่ให้ผู้ใช้ค้างอยู่บนเวอร์ชันที่ใบรับรองไม่ครอบคลุม

คำถามที่พบบ่อย

SSL ใช้ได้บนคอมแต่ Error บนมือถือ เกิดจากอะไร

มักเกิดจาก Intermediate Certificate ไม่ครบ เบราว์เซอร์บางตัวเติม chain ให้เองได้ บางตัวไม่ได้ — แก้โดยติดตั้งใบรับรองใหม่พร้อม chain bundle เต็ม

แก้ที่เซิร์ฟเวอร์แล้ว แต่ยังเห็น Error เดิม

ลองเปิดเว็บในโหมด Incognito เพราะ Error บางอย่างมาจากใบรับรองเก่าที่ถูกแคชในเครื่อง ไม่ใช่ปัญหาจากเซิร์ฟเวอร์

ควรตรวจ SSL ด้วยเครื่องมืออะไร

ssllabs.com/ssltest ตรวจ chain และโปรโตคอลได้ละเอียดที่สุด ส่วน whynopadlock.com ช่วยหา Mixed Content และคำสั่ง openssl s_client ใช้ตรวจ chain จากเครื่องโดยตรงโดยไม่ต้องพึ่งเว็บภายนอก

Wildcard Certificate ครอบคลุม root domain ด้วยไหม

ไม่ — ใบ Wildcard *.yourdomain.com ครอบคลุมเฉพาะ subdomain ระดับเดียว ไม่รวม yourdomain.com เปล่า ๆ ส่วนใหญ่ผู้ออกใบรับรองจะใส่ root เพิ่มให้ใน SAN อยู่แล้ว แต่ควรตรวจให้แน่ใจก่อนใช้งานจริง

ต้องการ SSL Certificate ที่เชื่อถือได้?

SSL จาก AsiaGB มาจาก CA ชั้นนำ RapidSSL GeoTrust DigiCert มี Warranty และ Support ตลอดอายุใช้งาน

ดู SSL Certificate