บทความนี้จะแสดงวิธีการสร้าง self-signed certificate เอาไว้ใช้เอง อย่างง่ายๆ และทำให้เบราว์เซอร์รวมถึงอุปกรณ์มือถืออย่างเช่น Android เชื่อถือได้อีกด้วย.
โดยปกติ certificate จะมีกระบวนการต่างๆกว่าจะนำเข้าสู่ระบบหรือเว็บเบราว์เซอร์และได้รับความเชื่อถือ (trust) อย่างเช่น SSL ของ Let's encrypt ซึ่งถ้าหากเราสร้างขึ้นมาเอง จะไม่สามารถผ่านกระบวนการเหล่านั้นได้. แต่กระนั้นการจะใช้ SSL ที่มีในท้องตลาดไม่ว่าจะฟรีหรือเสียเงิน บางกรณีเราไม่สามารถจะสร้างอย่างถูกต้องได้เพราะติดขัดในขั้นตอนต่างๆ เช่น Let's encrypt ต้องการจะเข้าถึง HTTP port 80 ได้ เพื่อออกใบ cert แต่เครื่องคอมพิวเตอร์ที่เราใช้ ไม่มี public IP หรือมีแต่ไม่สามารถเลือก port ได้ เป็นต้น. กรณีอย่างนี้ก็จะต้องหาทางออกโดยใช้ self-signed certificate.
ใช้ OpenSSL
ดาวน์โหลดและติดตั้ง OpenSSL ได้จาก https://www.openssl.org/source/ หรือสำหรับบน Windows เลือกดาวน์โหลดได้ที่ https://wiki.openssl.org/index.php/Binaries. หากคุณใช้เว็บเซิร์ฟเวอร์ Apache บน Windows มันจะมาด้วยกันกับไฟล์ httpd.exe.
เพิ่ม path ไปยัง openssl.exe ไว้ใน Windows environment.
เมื่อติดตั้ง OpenSSL เสร็จแล้ว ให้เพิ่ม path ไปยัง openssl.exe ไว้ใน Windows environment PATH
เพื่อจะเรียกคำสั่ง openssl
ได้โดยง่าย.
- กดเมนู Start
- พิมพ์ systempropertiesadvanced.exe
- คลิก Environment Variables
- ที่กรอบ System Variables ดับเบิลคลิกที่ PATH
- เพิ่ม path ไปยัง openssl.exe
- กด OK ทั้งหมด
สร้าง Root cert.
ขั้นตอนนี้ ผู้อ่านอาจจะสร้างไฟล์ต่างๆไว้ในโฟลเดอร์ของ Apache/conf ก็ได้ เพื่อความสะดวกในการกำหนด config ไปด้วย. ให้เข้าไปที่โฟลเดอร์ดังกล่าวแล้วพิมพ์คำสั่งต่อไปนี้.
openssl req -x509 -sha256 -days 3650 -nodes -newkey rsa:2048 -subj="/CN=localhost.localhost/C=TH/L=Bangkok" -keyout rootCA.key -out rootCA.crt
จากคำสั่งดังกล่าว โปรแกรมจะสร้างไฟล์ rootCA.key และ rootCA.crt มาให้ 2 ไฟล์ ซึ่งทั้ง 2 ไฟล์นี้จะมีประโยชน์อย่างมากเมื่อนำเข้าไปในเว็บเบราเซอร์ให้เชื่อถือ.
สร้าง Certificate
ขั้นตอนนี้จะอยู่ในโฟลเดอร์เดียวกันกับขั้นตอนสร้าง Root certificate. ให้สร้างไฟล์ config ชื่อ server.cnf แล้วระบุข้อมูลต่อไปนี้ โดยแก้ไขส่วนต่างๆให้ตรงตามความจริงของผู้อ่านเอง.
[req]
default_bits = 2048
prompt = no
default_md = sha256
x509_extensions = v3_req # The extensions to add to the self signed cert
distinguished_name = dn
[dn]
countryName = TH
stateOrProvinceName = Bangkok
localityName = City
emailAddress = webmaster@localhost.localhost
commonName = localhost.localhost
[v3_req]
subjectAltName = @alt_names
[alt_names]
DNS.1 = localhost
DNS.2 = localhost.localhost
DNS.3 = mydomain.local
ผู้อ่านอาจเปลี่ยนแปลง, ลบ, หรือเพิ่มเติมโดเมนต่างๆที่อยู่ภายใน alt_names
ได้ให้สอดคล้องตามที่ต้องการ. จากนั้นใช้คำสั่งต่อไปนี้.
openssl req -x509 -nodes -newkey rsa:2048 -CA rootCA.crt -CAkey rootCA.key -keyout server.key -days 3650 -out server.crt -config server.cnf
จากคำสั่งด้านบน โปรแกรมจะสร้างไฟล์ server.key, server.crt ทั้งหมดจำนวน 2 ไฟล์.
นำไปใช้กับ Apache
สำหรับขั้นตอนเพิ่ม SSL certificate เพื่อนำไปใช้กับเว็บเซิร์ฟเวอร์อย่างเช่น Apache นั้น สามารถอ่านต่อได้ที่ เปิดใช้งาน SSL บน Apache.
ทำให้เบราว์เซอร์และ Android เชื่อถือ
ขั้นตอนต่อไปนี้เป็นการทำให้เว็บเบราว์เซอร์ อาทิเช่น Firefox, Google Chrome และระบบปฏิบัติการอื่น เช่น Android เชื่อถือ self-signed certificate ดังกล่าว.
Google Chrome
ขั้นตอนต่อไปนี้สำหรับ desktop เท่านั้น
- เปิดเมนู Settings > Privacy and security > Security > Manage device certificates
- คลิกที่แท็บ Trusted Root Certification Authorities
- คลิก Import...
- กด Next แล้ว Browse... เลือกไฟล์ rootCA.crt ที่ได้สร้างไว้
- กด Next แล้วเลือก Place all certificates in the following store แล้วเลือก Trusted Root ตามแท็บที่ได้เลือกไว้ จากนั้นกด Next จนสิ้นสุดขั้นตอน
- คลิกที่ชื่อ certificate ที่ได้ import ไว้แล้ว จากนั้นคลิก Advanced
- ติ๊กเลือกทุกอย่างแล้วกด OK และ Close
- Restart Google Chrome
Firefox
ขั้นตอนต่อไปนี้สำหรับ desktop เท่านั้น
- เปิดเมนู Settings > Privacy & Security
- คลิกที่ปุ่ม View Certificates
- คลิกที่แท็บ Autorities
- คลิก Import...
- เลือกไฟล์ rootCA.crt ที่ได้สร้างไว้
- คลิกที่ชื่อ certificate ที่ได้ import ไว้แล้ว จากนั้นคลิก Edit Trust
- ติ๊กเลือกทุกอย่างแล้วกด OK
- Restart Firefox
Android
- ให้ทำการคัดลอกไฟล์ rootCA.crt และ rootCA.key ที่ได้สร้างไว้แล้ว ไปบนอุปกรณ์ Android ด้วยวิธีใดวิธีหนึ่ง
- เปิดแอป Settings > Security > Advanced > Encryption & credentials
- แตะที่ Install a certificate > CA certificate
- แตะที่ Install anyway
- เลือกไฟล์ที่นำเข้ามาในขั้นตอนที่ 1 แล้ว