การพัฒนา HTTPS ในเครื่องด้วย SSL Certificate แบบ Self-Signed
การจำลองการเชื่อมต่อ HTTPS แบบ production ในระหว่างการพัฒนาและทดสอบเว็บไซต์บนเครื่องเป็นสิ่งสำคัญ แม้ว่า SSL certificate แบบ self-signed จะไม่ได้รับการรับรองจากหน่วยงาน CA สาธารณะ แต่ก็เป็นทางเลือกที่สะดวกสำหรับการเปิดใช้ HTTPS ในสภาพแวดล้อมการพัฒนาเอกชน บทความนี้จะสอนวิธีการใช้ OpenSSL ที่มาพร้อมกับ ServBay เพื่อสร้างใบรับรอง SSL แบบ self-signed ที่ปลอดภัยด้วยอัลกอริทึม Elliptic Curve Cryptography (ECC) และตั้งค่าใบรับรองนี้ใน ServBay สำหรับเว็บไซต์บนเครื่องของคุณ ตัวอย่างโดเมนที่ใช้คือ servbay.demo
การตั้งค่า HTTPS ในเครื่องจะช่วยให้คุณทดสอบการทำงานของเว็บภายใต้การเชื่อมต่อที่ปลอดภัย เช่น การจัดการ warning เรื่อง mixed content, cookie flag ด้านความปลอดภัย ฯลฯ
ภาพรวม
ใบรับรอง self-signed คือ SSL certificate ที่คุณสร้างขึ้นและเซ็นด้วยตัวเอง ไม่ใช่จาก CA บุคคลที่สามที่ได้รับความเชื่อถือ เหมาะกับกรณีที่ไม่ต้องการความเชื่อถือสาธารณะ เช่น
- สภาพแวดล้อมการพัฒนาในเครื่อง
- เซิร์ฟเวอร์ทดสอบภายใน
- แอปภายในที่ไม่เกี่ยวกับข้อมูลละเอียดอ่อน
ServBay ได้รวมเครื่องมือ OpenSSL ไว้เพื่อความสะดวกในการสร้างไฟล์ใบรับรองผ่าน terminal
ข้อกำหนดเบื้องต้น
- ติดตั้งและเปิดใช้งาน ServBay แล้ว
- มีความรู้พื้นฐานเกี่ยวกับคำสั่งบน command line
ขั้นตอนที่ 1: สร้าง SSL Certificate แบบ ECC Self-Signed
เราขอแนะนำให้ใช้ใบรับรองแบบ ECC เนื่องจากให้ความปลอดภัยที่เทียบเท่าใบรับรอง RSA แบบเดิมแต่มีขนาดคีย์ที่เล็กกว่า, เซ็นและตรวจสอบได้เร็วกว่า, และใช้ทรัพยากรน้อย
ขั้นตอนการสร้าง SSL certificate แบบ self-signed ด้วย ECC มีดังนี้
สร้าง ECC Private Key
เปิดโปรแกรม terminal ของคุณ แล้วรันคำสั่งนี้เพื่อสร้าง private key ของ ECC ด้วย curve
prime256v1
ไฟล์ชื่อservbay.demo.key
shopenssl ecparam -genkey -name prime256v1 -out servbay.demo.key
1openssl
: เรียกใช้เครื่องมือ OpenSSLecparam
: จัดการ parameter ของ ECC-genkey
: สร้าง key ขึ้นมา-name prime256v1
: ใช้ curve ชื่อ prime256v1 (NIST P-256) ซึ่งเป็นที่นิยมและปลอดภัย-out servbay.demo.key
: กำหนดชื่อไฟล์ key ที่จะสร้าง
สร้าง Certificate Signing Request (CSR)
ใช้ private key จากขั้นตอนที่แล้ว (
servbay.demo.key
) เพื่อสร้างไฟล์ CSR (servbay.demo.csr
) ซึ่งจะบรรจุข้อมูลที่ต้องการระบุในใบรับรอง (เช่น ชื่อโดเมน ชื่อองค์กร) แล้วลงนามด้วย private keyshopenssl req -new -key servbay.demo.key -out servbay.demo.csr
1หลังจากรันคำสั่ง จะมี prompt ให้กรอกข้อมูลสำหรับ CSR ข้อมูลที่สำคัญที่สุดคือฟิลด์
Common Name (e.g. server FQDN or YOUR name)
ตรงนี้ต้องใส่ชื่อโดเมนที่คุณใช้ในเครื่อง เช่นservbay.demo
ฟิลด์อื่นๆ กรอกตามตัวอย่างหรือข้อมูลจริงของคุณตัวอย่างการกรอกข้อมูล:
Country Name (2 letter code) [AU]:CN # รหัสประเทศ เช่น CN (จีน) State or Province Name (full name) [Some-State]:Hong Kong # รัฐ/จังหวัด Locality Name (eg, city) []:Kowloon # เมือง Organization Name (eg, company) [Internet Widgits Pty Ltd]:ServBay # ชื่อองค์กร Organizational Unit Name (eg, section) []:Development # ฝ่าย/แผนก Common Name (e.g. server FQDN or YOUR name) []:servbay.demo # **สำคัญ: ใส่โดเมนที่ใช้บนเครื่อง** Email Address []:[email protected] # อีเมลติดต่อ Please enter the following 'extra' attributes to be sent on in your certificate request A challenge password []: # ข้ามได้ ปล่อยว่าง An optional company name []: # ข้ามได้ ปล่อยว่าง
1
2
3
4
5
6
7
8
9
10
11สร้างใบรับรอง Self-signed
ใช้ CSR (
servbay.demo.csr
) และ private key (servbay.demo.key
) ที่สร้างไว้เพื่อออก SSL certificate แบบ self-signed ชื่อไฟล์servbay.demo.crt
โดยกำหนดอายุใบรับรอง 365 วันshopenssl x509 -req -days 365 -in servbay.demo.csr -signkey servbay.demo.key -out servbay.demo.crt
1openssl x509
: คำสั่งสำหรับจัดการใบรับรองแบบ X.509-req
: ระบุว่า input เป็น CSR-days 365
: กำหนดอายุใบรับรอง 365 วัน-in servbay.demo.csr
: ระบุ input เป็นไฟล์ CSR-signkey servbay.demo.key
: ใช้ private key นี้เซ็นใบรับรอง (กรณี self-signed ใช้ key เดียวกับที่สร้าง CSR)-out servbay.demo.crt
: ชื่อไฟล์ใบรับรองที่สร้าง
เมื่อเสร็จสิ้นจะได้ไฟล์ 3 ไฟล์ในไดเรกทอรีปัจจุบัน:
servbay.demo.key
(private key),servbay.demo.csr
(CSR), และservbay.demo.crt
(ใบรับรอง self-signed)
(ภาพตัวอย่าง: การรันคำสั่ง OpenSSL บน terminal เพื่อสร้างไฟล์ใบรับรอง)
ขั้นตอนที่ 2: ตั้งค่า SSL Certificate แบบ Self-Signed ใน ServBay
หลังจากสร้างไฟล์ใบรับรองเสร็จแล้ว ให้นำไปวางในโฟลเดอร์ที่ ServBay สามารถเข้าถึงได้ และระบุไฟล์เหล่านี้ในตั้งค่าเว็บไซต์ของ ServBay โดยแนะนำให้จัดเก็บใบรับรองไว้ใน /Applications/ServBay/ssl
และสร้างโฟลเดอร์ย่อยแยกตามโดเมนเพื่อให้ง่ายต่อการจัดการ
ย้ายไฟล์ใบรับรองไปยังโฟลเดอร์เป้าหมาย
ทำตามโครงสร้างที่แนะนำ ย้ายไฟล์ที่สร้างเมื่อครู่ไปไว้ที่
/Applications/ServBay/ssl/private/tls-certs/servbay.demo/
หากโฟลเดอร์servbay.demo
ยังไม่มี ให้สร้างขึ้นมาก่อนsh# หากโฟลเดอร์ยังไม่มี ให้สร้างก่อน mkdir -p /Applications/ServBay/ssl/private/tls-certs/servbay.demo/ # ย้ายไฟล์ที่ต้องใช้ mv servbay.demo.key /Applications/ServBay/ssl/private/tls-certs/servbay.demo/ mv servbay.demo.crt /Applications/ServBay/ssl/private/tls-certs/servbay.demo/ # ไฟล์ CSR ไม่จำเป็นต้องใช้ต่อ แต่ย้ายไปสำรองได้ mv servbay.demo.csr /Applications/ServBay/ssl/private/tls-certs/servbay.demo/
1
2
3
4
5
6
7
8/Applications/ServBay/ssl/
: โฟลเดอร์หลักเก็บไฟล์ SSL ของ ServBayprivate/tls-certs/
: โครงสร้างย่อยสำหรับใบรับรองส่วนตัวservbay.demo/
: สร้างโฟลเดอร์นี้แยกตามโดเมน เพื่อให้ง่ายต่อการดูแลหลายเว็บ
เปิดหน้าบริหารจัดการของ ServBay
เปิดแอปพลิเคชัน ServBay แล้วเข้าไปที่หน้าบริหารจัดการ
เพิ่มหรือแก้ไขการตั้งค่าเว็บไซต์
ไปที่แท็บ Websites หากยังไม่มีเว็บไซต์ของ
servbay.demo
ให้คลิก Add Website หากมีอยู่แล้ว ให้เลือกและแก้ไขคอนฟิกตั้งค่า SSL/HTTPS
มองหาส่วนที่เกี่ยวกับ SSL/HTTPS หรือหมวดการตั้งค่าคล้าย ๆ กันในรายละเอียดเว็บ
เลือกแหล่งที่มาของใบรับรองเป็น Custom
ในตัวเลือกการออกใบรับรอง SSL ให้เลือก Custom (กำหนดเอง)
ระบุ path ไฟล์ใบรับรอง
ในช่องที่ปรากฎ ให้ระบุ path ไฟล์ดังต่อไปนี้
- Certificate Key File (private key): ระบุ
/Applications/ServBay/ssl/private/tls-certs/servbay.demo/servbay.demo.key
- Certificate File (ใบรับรอง): ระบุ
/Applications/ServBay/ssl/private/tls-certs/servbay.demo/servbay.demo.crt
- Certificate Key File (private key): ระบุ
กำหนดโดเมน
ในคอนฟิกเว็บไซต์ ฟิลด์ Domain ต้องเป็น
servbay.demo
บันทึกและนำการตั้งค่าไปใช้
กดบันทึกและยืนยันการนำการเปลี่ยนแปลงไปใช้ ServBay อาจแจ้งเตือนให้รีสตาร์ท Web Server ที่เกี่ยวข้อง (เช่น Caddy หรือ Nginx) ให้กดตกลง
(ภาพตัวอย่าง: การกำหนด path ของ SSL certificate แบบ custom ในหน้าผู้ดูแล ServBay)
ตรวจสอบการตั้งค่า HTTPS
เมื่อคอนฟิกใน ServBay สำเร็จ ทดลองเปิด https://servbay.demo/
ผ่านเบราว์เซอร์เพื่อเช็คว่าใช้งานได้ถูกต้อง
เนื่องจากคุณใช้ใบรับรองที่เซ็นเองและไม่ได้รับการเชื่อถือจาก CA สาธารณะ, เบราว์เซอร์จะแจ้งเตือนเรื่องความปลอดภัยว่าใบรับรองนี้ไม่เป็นที่เชื่อถือหรืออาจเสี่ยงต่อความเป็นส่วนตัว ซึ่งเป็นปกติ
(ภาพตัวอย่าง: รายงานเตือนความปลอดภัยของเบราว์เซอร์เมื่อเข้าเว็บด้วย self-signed certificate)
คุณสามารถกด “ขั้นสูง” หรือ "continue anyway" เพื่อข้ามแจ้งเตือนและเข้าชมเว็บไซต์ หรือจะเลือกเพิ่มใบรับรอง self-signed นี้เข้าไปใน trust store ของระบบปฏิบัติการเพื่อแก้ไขเตือนถาวรได้
(ภาพตัวอย่าง: ดูข้อมูลใบรับรองในเบราว์เซอร์)
ถ้าดูรายละเอียดใบรับรองในเบราว์เซอร์ จะพบว่าเป็นใบรับรองที่เซ็ตไว้สำหรับ servbay.demo
จริง
ข้อควรระวัง
- ความปลอดภัยของ Private Key: ไฟล์คีย์ส่วนตัว (
.key
) มีความสำคัญและควรเก็บรักษาไว้ให้ปลอดภัย ให้สิทธิ์การเข้าถึงแค่ผู้ใช้ ServBay เท่านั้น - เส้นทางไฟล์: ตรวจสอบให้แน่ใจว่า path ไฟล์ที่ระบุในคอนฟิก ServBay ถูกต้อง
- โดเมนต้องตรงกัน: CN (Common Name) ที่ใช้สร้างใบรับรองต้องตรงกับ domain ที่ตั้งค่าไว้ใน ServBay มิฉะนั้นเบราว์เซอร์จะฟ้องโดเมนไม่ตรงกัน
- อายุใบรับรอง: อายุใบรับรองอยู่ที่ค่าที่ตั้งไว้ขณะสร้าง (
-days
) เมื่อหมดอายุ ให้สร้างใหม่และคอนฟิกใหม่
ทางเลือกและหัวข้อที่เกี่ยวข้อง
แม้ self-signed certificate จะเหมาะกับการทดสอบ HTTPS พื้นฐานในเครื่อง แต่ถ้าต้องการประสบการณ์ที่ใกล้เคียงกับ CA สาธารณะมากกว่า สามารถพิจารณาตัวเลือกอื่น ๆ ที่ ServBay มีให้:
- ServBay User CA: ServBay มีเครื่องมือสำหรับสร้าง CA ระดับผู้ใช้ สามารถเพิ่ม CA นี้ไปที่ trust store ของระบบ แล้วออกใบรับรองสำหรับเว็บไซต์ในเครื่องซึ่งจะได้รับความเชื่อถือจากระบบและเบราว์เซอร์ ทดสอบ OAuth callback, Webhook, หรือฟีเจอร์อื่นที่ต้องการใบรับรองที่เชื่อถือได้สะดวกมากขึ้น
- ServBay Public CA: ServBay มีฟีเจอร์ Public CA ที่ออกใบรับรองให้ domain ภายในเครื่องโดยอัตโนมัติและตั้งค่าความเชื่อถือให้ระบบโดยอัตโนมัติ
ตัวเลือกเหล่านี้จะสะดวกกว่า self-signed certificate โดยเฉพาะเมื่อดูแลเว็บไซต์ในเครื่องหลาย ๆ เว็บ ดูรายละเอียดเพิ่มเติมได้ที่เอกสารของ ServBay
คำถามที่พบบ่อย (FAQ)
- Q: ทำไมสร้างใบรับรองเสร็จแล้ว แต่เบราว์เซอร์ยังแจ้งว่าไม่ปลอดภัย?
- A: เพราะ self-signed certificate ไม่ได้รับความเชื่อถือจาก CA สาธารณะ เบราว์เซอร์จึงแสดง Warning หากต้องการปิด Warning นี้ต้องเพิ่มใบรับรอง หรือ CA ที่ออกใบรับรอง ไปยัง trust store ของระบบปฏิบัติการ
- Q: ใช้ใบรับรอง RSA ได้หรือไม่?
- A: ได้ OpenSSL รองรับการสร้าง RSA certificate ใช้คำสั่ง
openssl genrsa -out servbay.demo.key 2048
แล้วดำเนินการ CSR และสร้างใบรับรองต่อ เราแนะนำ ECC เพื่อประสิทธิภาพที่สูงกว่า
- A: ได้ OpenSSL รองรับการสร้าง RSA certificate ใช้คำสั่ง
- Q: วิธีเพิ่ม self-signed certificate เข้า trust store ของ macOS ทำอย่างไร?
- A: เปิดแอป “Keychain Access” เลือก keychain เป็น “System” หรือ “Login” แล้วลากไฟล์
.crt
เข้าไป ดับเบิ้ลคลิกใบรับรองที่นำเข้า เลือก “Trust” ตรง “Secure Sockets Layer (SSL)” ให้เลือกเป็น “Always Trust” ปิดหน้าต่างและกรอกรหัสผ่านหากมี จากนั้นรีสตาร์ทเบราว์เซอร์
- A: เปิดแอป “Keychain Access” เลือก keychain เป็น “System” หรือ “Login” แล้วลากไฟล์
สรุป
บทความนี้ช่วยให้คุณเข้าใจวิธีใช้ OpenSSL ที่มาพร้อม ServBay เพื่อสร้าง SSL certificate แบบ self-signed ด้วย ECC และนำไปใช้กับเว็บไซต์ในเครื่อง แม้ self-signed certificate จะใช้เพื่อทดสอบหรือพัฒนาเว็บในเครื่องเท่านั้น แต่ถือเป็นก้าวแรกสำคัญในการเรียนรู้ HTTPS และตั้งค่าการเชื่อมต่ออย่างปลอดภัย หากต้องการประสบการณ์ที่เชื่อถือและสะดวกกว่านี้ ศึกษาเพิ่มเติมเกี่ยวกับ ServBay User CA และ Public CA จะช่วยจัดการใบรับรองท้องถิ่นได้ง่ายขึ้น หวังว่าขั้นตอนในบทความนี้จะเป็นประโยชน์ต่อการพัฒนาเว็บในเครื่องของคุณ