การแก้ไขปัญหา SSL Certificate และ ServBay CA
เอกสารนี้นำเสนอปัญหาที่พบบ่อยและแนวทางการแก้ไขเกี่ยวกับใบรับรอง SSL และ ServBay CA ในสภาพแวดล้อมการพัฒนาเว็บด้วย ServBay บนเครื่องของคุณ
ทำไมเมื่อเปิดเว็บไซต์ถึงแจ้งใบรับรอง SSL ไม่ได้รับความไว้วางใจ?
หากคุณพยายามเข้าถึงเว็บไซต์ท้องถิ่นที่โฮสต์ผ่าน ServBay ในเบราว์เซอร์ แล้วเจอข้อความเตือนลักษณะนี้ แสดงว่าการตั้งค่าใบรับรอง SSL มีปัญหา
- Chrome / Edge:
Your connection is not private
(การเชื่อมต่อของคุณไม่เป็นส่วนตัว)- รหัสข้อผิดพลาด
NET::ERR_CERT_AUTHORITY_INVALID
- รหัสข้อผิดพลาด
NET::ERR_CERT_COMMON_NAME_INVALID
(แม้ไม่บ่อยนัก แต่จะเกิดหากชื่อโดเมนกับใบรับรองไม่ตรงกัน)
- Firefox:
Warning: Potential Security Risk Ahead
(คำเตือน: มีความเสี่ยงด้านความปลอดภัยข้างหน้า)- เมื่อคลิก “ขั้นสูง” อาจเห็นรหัส
SEC_ERROR_UNKNOWN_ISSUER
- รหัส
SSL_ERROR_BAD_CERT_DOMAIN
(กรณีใบรับรองกับชื่อโดเมนไม่ตรงกัน)
- Safari:
This Connection Is Not Private
(การเชื่อมต่อนี้ไม่เป็นส่วนตัว)Safari can't verify the identity of the website "your-domain.test"
(Safari ไม่สามารถยืนยันตัวตนเว็บไซต์ “your-domain.test” ได้)
สาเหตุหลักของปัญหานี้ มักเกิดจาก ServBay User CA
และ ServBay Public CA
ยังไม่ได้ติดตั้งและตั้งค่าให้ “เชื่อถือ” ถูกต้องในระบบ ซึ่งอาจมาจากเหตุผลเหล่านี้:
- ใบรับรอง Root ของ ServBay ยังไม่ได้เพิ่มลงในรายการที่เชื่อถือของระบบ
- เคยใช้ชื่อโดเมนเดียวกัน (เช่น
myapp.test
) กับเครื่องมืออื่น เช่น MAMP / Laravel Herd ที่สร้างใบรับรองเองมาก่อน ส่งผลให้ระบบหรือเบราว์เซอร์ จดจำข้อมูลใบรับรองที่ผิดแปลกหรือขัดแย้ง
แนวทางแก้ไข
ทำตามขั้นตอนดังต่อไปนี้:
- เปิดแอป ServBay
- ไปที่ ตั้งค่า (Settings) แล้วหาเมนู ServBay Root CA
- คลิก ติดตั้งใหม่ ServBay Root CA (Reinstall ServBay Root CA) เพื่อให้ ServBay พยายามแก้ปัญหาการติดตั้งและไว้วางใจ Root CA ให้ถูกต้องโดยอัตโนมัติ
- ปิดเบราว์เซอร์ทั้งหมดและเปิดใหม่ (ทุกหน้าต่างและทุกโปรเซส) เพื่อเคลียร์ข้อผิดพลาด SSL ที่อาจค้างอยู่
- เข้าเว็บไซต์ของคุณใหม่อีกครั้ง ตรงนี้ใบรับรอง SSL ควรจะใช้งานได้ปกติ
หากปัญหายังคงอยู่:
โดยมากเหตุเกิดจากภายในเครื่องมีใบรับรองเก่าหรือขัดแย้งอยู่ โดยเฉพาะหากเคยใช้เครื่องมืออื่น (เช่น MAMP หรือ Herd) สร้างใบรับรองกับโดเมนเดียวกันนี้มาแล้ว
- เปิดแอป Keychain Access (สามารถหาได้ที่ “แอปพลิเคชัน” > “ยูทิลิตี้” ใน macOS)
- มุมบนขวา ค้นหาชื่อโดเมนที่มีปัญหา (เช่น
myapp.test
หรือหากไม่มั่นใจ ให้ลองค้นหาคำว่าmamp
หรือherd
เพื่อเจอ CA ที่เกี่ยวข้อง) - ที่ dropdown “Kind” มาร์คเป็น Certificates
- ดูผลลัพธ์แล้วตรวจเช็ค ทุกใบรับรอง ที่เกี่ยวข้องกับโดเมนนั้น โดยดูที่ผู้ให้ใบรับรอง (Issuer) ว่าเป็น
ServBay User CA
,MAMP Development CA
,Laravel Herd CA
หรือคล้ายกันหรือไม่ - เลือก ใบรับรองที่ต้องสงสัย (โดยเฉพาะที่ผู้ให้ใบรับรองไม่ใช่
ServBay User CA
หรือดูผิดปกติ) จากนั้นกดDelete
ลบทิ้ง – คุณอาจต้องใส่รหัสผ่าน Mac ในการยืนยัน โปรดลบเฉพาะที่เกี่ยวข้องกับโดเมนพัฒนาเว็บในเครื่องเท่านั้น - แนะนำเพิ่มเติม ค้นหา
ServBay User CA
และServBay Public CA
อีกครั้ง เพื่อให้แน่ใจว่ายังอยู่ และไอคอนไม่มีเครื่องหมายกากบาทสีแดง (ซึ่งหมายถึงไม่ได้รับการไว้วางใจ) ถ้ามี ให้ดับเบิลคลิกใบรับรองนั้น แล้วเปิดหัวข้อ “Trust” แล้วตั้งค่า “When using this certificate” เป็น “Always Trust” - กลับไปที่แอป ServBay
- ไปที่ ตั้งค่า (Settings) -> ServBay Root CA
- คลิก สร้างใหม่ใบรับรองผู้ใช้ ServBay ทั้งหมด (Recreate All ServBay User Certificates) กรณีนี้ ServBay จะออกใบรับรอง SSL ให้เว็บทั้งหมดใหม่อีกครั้ง
- รีสตาร์ท (Restart) เครื่อง Mac ของคุณ เพื่อให้ค่าความเชื่อถือและใบรับรองใหม่ถูกโหลดครบถ้วน
- เปิดเบราว์เซอร์แล้วเข้าเว็บไซต์อีกครั้ง
การเพิ่มตัวอย่างข้อความผิดพลาดแบบนี้ จะช่วยให้ผู้ใช้ตรวจสอบและแก้ปัญหาเกี่ยวกับความไว้วางใจของใบรับรอง SSL ได้รวดเร็วยิ่งขึ้น
กรณีใบรับรอง SSL สูญหายต้องทำอย่างไร?
บางครั้งในการพัฒนาเว็บผ่าน ServBay คุณอาจเจอเหตุการณ์ที่ไฟล์ใบรับรอง SSL ของเว็บไซต์สูญหาย กรณีนี้จะทำให้ Web Server (Nginx, Caddy, หรือ Apache) ไม่สามารถเปิดใช้งานหรือโหลดเว็บไซต์ได้ และ log จะแจ้งข้อผิดพลาดเกี่ยวกับไฟล์ใบรับรอง
อาการของปัญหา
เมื่อไฟล์ใบรับรอง SSL (.crt
และ .key
) ที่ ServBay ออกให้อัตโนมัติสำหรับเว็บบนเครื่องของคุณสูญหาย คุณจะพบข้อความผิดพลาดลักษณะนี้ใน log ของ Web Server ซึ่งหมายถึง Server ไม่พบไฟล์ใบรับรองตามที่กำหนดไว้ใน config
ตัวอย่างข้อความผิดปกติที่พบบ่อย:
Nginx:
log
nginx: [emerg] cannot load certificate "/Applications/ServBay/ssl/private/tls-certs/servb3ay.host/servbay.host.crt": BIO_new_file() failed (SSL: error:80000002:system library::No such file or directory:calling fopen(/Applications/ServBay/ssl/private/tls-certs/servb3ay.host/servbay.host.crt, r) error:10000080:BIO routines::no such file)
nginx: configuration file /Applications/ServBay/package/etc/nginx/nginx.conf test failed
1
2
2
Caddy:
log
Error: loading http app module: provision http: getting tls app: loading tls app module: provision tls: loading certificates: open /Applications/ServBay/ssl/private/tls-certs/servbay.host/ser3vbay.host.crt: no such file or directory
1
Apache:
log
AH00526: Syntax error on line 15 of /Applications/ServBay/package/etc/apache/vhosts/servbay.host.conf:
SSLCertificateFile: file '/Applications/ServBay/ssl/pri3vate/tls-certs/servbay.host/servbay.host.crt' does not exist or is empty
1
2
2
ใจความหลักของข้อความเหล่านี้ก็คือ: เส้นทางตำแหน่งไฟล์ใบรับรอง SSL ใน config ของ Web Server ไม่ถูกต้องเพราะหาไฟล์ไม่เจอหรือเข้าไม่ถึง
วิธีแก้ไข
สำหรับใบรับรอง SSL ที่ออกให้อัตโนมัติสำหรับเว็บบนเครื่องผ่าน ServBay สามารถใช้ฟีเจอร์ตรวจจับและเซ็นออกใหม่อัตโนมัติแบบง่ายๆ ตามขั้นตอนนี้
- เปิดแอป ServBay: ให้แน่ใจว่าแอปทำงานอยู่
- ไปยังรายการเว็บไซต์: ในแถบนำทางซ้าย คลิก เว็บไซต์
- เลือกเว็บไซต์ที่มีปัญหา: หาโดเมนหรือชื่อเว็บไซต์ที่มีปัญหาใบรับรอง SSL แล้วคลิกเพื่อเข้าไปจัดการ
- ตรวจจับและออกใบรับรองใหม่อัตโนมัติ: เมื่อเข้าเว็บไซต์นี้ ServBay จะเช็คหาใบรับรอง SSL ที่ต้องใช้ หากพบว่าไฟล์นี้ (เช่น
.crt
หรือ.key
) หาย ก็จะพยายามออกใบรับรองใหม่และคัดลอกไฟล์เหล่านั้นไปยังตำแหน่งที่ถูกต้อง (/Applications/ServBay/ssl/private/tls-certs/ชื่อโดเมนของคุณ/
) - รีสตาร์ท Web Server: หลังจากใบรับรองชุดใหม่สร้างและ deploy เรียบร้อยแล้ว ให้คุณรีสตาร์ท Software Package ของ Web Server (Nginx, Caddy, หรือ Apache) โดยไปที่หน้า ซอฟต์แวร์แพ็คเกจ ในแถบซ้าย แล้วคลิกปุ่มสัญลักษณ์ “รีสตาร์ท” ข้างแพ็คเกจที่ใช้
- ตรวจสอบปัญหาหายไปหรือไม่: หลัง Web Server รีสตาร์ท ลองเข้าเว็บไซต์ผ่าน HTTPS (เช่น
https://ชื่อโดเมนของคุณ
) ปัญหาควรหาย เว็บไซต์ใช้งานได้ปกติบน HTTPS
หมายเหตุ
- วิธีแก้นี้เหมาะสำหรับกรณีใช้ใบรับรอง SSL ที่ ServBay ออกให้โดยอัตโนมัติเท่านั้น หากคุณใช้ใบรับรองที่นำเข้าหรือสร้างขึ้นเอง ServBay จะไม่ออกใบรับรองให้ใหม่โดยอัตโนมัติ คุณต้องนำเข้าไฟล์ใบรับรองเอง
- ServBay ใช้เซิร์ฟเวอร์ CA ภายใน (ServBay User CA) ออกใบรับรอง SSL เพื่อเว็บไซต์ท้องถิ่น หากเจอปัญหาความไว้วางใจใบรับรองในเบราว์เซอร์ อาจเกิดจากระบบหรือเบราว์เซอร์ยังไม่ตั้งค่าให้เชื่อถือ CA ของ ServBay กรุณาอ่านเอกสารที่เกี่ยวกับ การไว้วางใจ ServBay CA
- ServBay มีระบบ backup ข้อมูลทั้ง config และ SSL certificate ควรสำรองข้อมูลเป็นระยะเพื่อความปลอดภัย
คำถามที่พบบ่อย (FAQ)
Q: ทำไม ServBay ถึงออกใบรับรอง SSL อัตโนมัติให้เว็บไซต์ท้องถิ่น?
A: เป้าหมายของ ServBay คือสร้างสภาพแวดล้อมพัฒนาเว็บที่สมบูรณ์แบบในเครื่อง เพื่อเลียนแบบสภาพงานจริงและให้ dev debug ตาม HTTPS ได้ง่าย ServBay จึงใช้ CA ภายในออกใบรับรองให้เว็บท้องถิ่นโดยอัตโนมัติ
Q: นำเข้าใบรับรอง SSL ที่ขอเองได้ไหม?
A: ทำได้ ServBay รองรับการนำเข้าใบรับรอง SSL ที่คุณมีเอง (เช่นที่ขอผ่าน ACME/Let's Encrypt) คำแนะนำในเอกสารนี้หมายถึงเฉพาะใบรับรองที่สร้างอัตโนมัติเท่านั้น
Q: การออกใบรับรอง SSL ใหม่อัตโนมัติใน ServBay ปลอดภัยหรือไม่?
A: ปลอดภัย เนื่องจากใช้เฉพาะในการพัฒนาในเครื่อง ใบรับรองจะถูกเซ็นด้วย ServBay User CA แล้วใช้กับ localhost/development เท่านั้น ไม่มีผลต่อความปลอดภัยของเว็บไซต์บนอินเทอร์เน็ตสาธารณะ
สรุป
ServBay มีเครื่องมืออัตโนมัติสำหรับจัดการใบรับรอง SSL ของเว็บไซต์พัฒนาในเครื่อง หากใบรับรองเหล่านั้นสูญหาย ServBay สามารถตรวจจับ ออกใบรับรองใหม่และ deploy ให้คุณได้ทันที ไม่กี่คลิกทุกอย่างจะกลับมาทำงานบน HTTPS ได้สมบูรณ์อีกครั้ง