|
บทความนี้จะแนะนำวิธีการเปลี่ยนการเข้าใช้งาน localhost จากเดิมที่เมื่อเข้าผ่าน https แล้วจะขึ้นว่า "Not Secure" ให้สามารถใช้งานได้ปกติ
ของต้องเตรียม
- สำหรับ Windows จะใช้เป็น Cygwin ส่วน UNIX นั้นส่วนใหญ่จะมีคำสั่ง openssl อยู่แล้ว
- Webbrowser รุ่นปี 2020 ขึ้นไป (รุ่นเก่าๆ จะต้องไปทำใน MMC)
- ตัวแก้ไขข้อความ เช่น VS Code
- เซิฟเวอร์อะไรก็ได้ที่เปิดใช้ SSL ได้ (ในที่นี้ใช้ httpd)
สารบัญ
- สร้าง Root CA สำหรับใช้เป็นผู้ให้บริการ
- สร้างใบรับรอง SSL ของ localhost แล้วเซ็นใบรับรองเข้ากับตัว Root CA
- ใส่ใบรับรอง localhost ในเซิฟเวอร์
- ลองเข้าเว็บ localhost เพื่อเช็คว่าเข้า https ได้
- ใช้เว็บเบราวเซอร์เพิ่ม Root CA ลงไปในผู้ให้บริการที่ได้รับอนุญาต อาจจะต้อง Restart ก่อนถึงจะพบว่าใบรับรองสีเขียวแล้ว
ขั้นตอนที่ 1
สร้าง CA certificate หรือใบรับรองฝั่งผู้ให้บริการ โดยปกติแล้วหากเราจะทำแบบออนไลน์ทั่วโลกเราจะต้องไปสมัคร SSL กับผู้ให้บริการใบรับรองต่างๆ แต่ในที่นี้เราใช้กับเครื่องของเราเองไม่จำเป็นต้องลงทะเบียนกับใครเราก็สามารถตั้งตัวเองเป็นผู้ให้บริการได้เลย
เริ่มจากสร้าง คีย์ ของเราขึ้นมาก่อนด้วยคำสั่ง
- $ openssl genrsa -out CA.key -des3 2048
คัดลอกโค๊ด ในการสร้างคีย์นั้นเราจะต้องกำหนด passphrase เองแล้วก็จดไว้ด้วยเพราะต้องนำไปใช้ต่อในการสร้าง root CA
คำสั่งในการสร้างตัว root CA โดยจะเป็นการดึงเอา CA.key มาสร้างเป็นใบรับรองสิทธิ์ของฝั่งผู้ให้บริการ
- $ openssl req -x509 -sha256 -new -nodes -days 3650 -key CA.key -out CA.pem
คัดลอกโค๊ด
ขั้นตอนที่ 2
สร้างใบรับรองให้กับ localhost จะเป็นเสมือนใบรับรองในเครื่องเราก่อนว่าสามารถใช้งาน SSL ได้
ก่อนอื่นต้องเตรียมข้อมูลสำหรับการสร้างใบรับรองก่อนโดยเราจะสร้างไฟล์ขึ้นมาชื่อ localhost.ext แล้วกดหนดเนื้อหาดังต่อไปนี้
- authorityKeyIdentifier = keyid,issuer
- basicConstraints = CA:FALSE
- keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
- subjectAltName = @alt_names
- [alt_names]
- DNS.1 = localhost
- IP.1 = 127.0.0.1
คัดลอกโค๊ด เป็นการบอกรายละเอียดว่าใบรับรองนี้เป็นของไอพีไหนโดเมนอะไร
ตรงนี้สามารถนำไปประยุคใช้กับการกำหนด hosts ได้ด้วย สำหรับวินโดวส์กดหนดได้ที่ /etc/hosts
สร้างคีย์ให้กับ localhost ด้วยคำสั่งต่อไปนี้
- $ openssl genrsa -out localhost.key -des3 2048
คัดลอกโค๊ด กำหนด passphrase ให้กับคีย์แล้วก็จดไว้ด้วยเพราะเดี่ยวต้องใช้ตอนสร้างใบรับรองของ localhost
ต่อไปก็มาสร้างตัว request ในการขอทำสัญญาร่วมกับใบรับรองของเซิฟเวอร์พูดง่ายๆ คือมันคือใบคำร้องที่จะส่งจากเซิฟเวอร์ไปยังผู้ให้บริการหรือ CSR นั่นเอง
- $ openssl req -new -key localhost.key -out localhost.csr
คัดลอกโค๊ด หลังจากกรอกรหัส passphrase เสร็จทีนี้เราก็จะมีทั้งคีย์ทั้งใบคำร้องแล้วต่อไปก็จะเป็นการนำเอาทั่วคู่ไปทำสัญญาร่วมกันกับผู้ให้บริการ ซึ่งปกติถ้าเราเป็นคนตั้งเซิฟเวอร์เราจะต้องส่งคีย์กับคำร้องของเครื่องเราไปให้ผู้จำหน่าย SSL แต่ในที่นี้มันคือเราเองก็ใช้คำสั่งต่อไปนี้ในการทำขั้นตอนนี้เลย
- $ openssl x509 -req -in localhost.csr -CA CA.pem -CAkey CA.key -CAcreateserial -days 3650 -sha256 -extfile localhost.ext -out localhost.crt
คัดลอกโค๊ด เสร็จแล้วเราก็จะได้ใบรับรองหรือ CRT มาซึ่งจะยังไม่สามารถเอาไปใช้ได้เพราะเนื้อหาข้างในมันมาแบบเข้ารหัสแล้วเราก็ต้องนำมันมาถอดความก่อนโดยก็จะต้องใช้คีย์ localhost ของเรานั่นแหละในการถอดความ
- $ openssl rsa -in localhost.key -out localhost.decrypted.key
คัดลอกโค๊ด
ขั้นตอนที่ 3
ใสใบรับรองลงไปในเซิฟเวอร์ที่เราต้องการในที่นี้คือ Apache2 ก็จะต้องเอาไปกำหนดค่าใส่ไว้ในไฟล์ httpd.conf หรือ httpd_ssl.conf โดยเปลี่ยนการตั้งค่าหรือกรอกประมาณนี้
- <VirtualHost _default_:443>
- SSLEngine on
- SSLCertificateFile "${SRVROOT}/conf/localhost.crt"
- SSLCertificateKeyFile "${SRVROOT}/conf/localhost.decrypted.key"
- </VirtualHost>
คัดลอกโค๊ด ตรงนี้คือแล้วแต่เลยว่าใครใช้กับเซิฟเวอร์ไหนต้องตั้งยังไงหลักๆ ก็คือการเอา CRT กับ KEY ไปใส่นั่นเองหลังจากกำหนดเสร็จแล้วก็รีสาร์ทเซิฟเวอร์นิดหนึ่งดูว่ากำหนดค่าถูกหรือเปล่าติดขัดตรงไหน
ขั้นตอนที่ 4
เปิดเว็บเบราวเซอร์ขึ้นมาแล้วลองเข้าไปที่ https://localhost ดูว่าสามารถเปิดเว็บได้ไหมมาถึงตรงนี้มันจะยังแค่เปิดได้เป็น SSL แล้ว แต่มันยังแดงๆ อยู่ใช่ไหมละ
ขั้นตอนที่ 5
นำเข้าตัว Root CA ของเราไปไว้ในหมวดผู้ให้บริการที่น่าเชื่อถือ ตรงนี้ถ้าเป็นเว็บเบราว์เซอร์รุ่นใหม่ ๆ จะสามารถทำได้ใน Settings ของโปรแกรมเลยโดยเข้าไปที่ Options ไปที่ส่วนตั้งค่าความปลอดภัย Privacy and Security แล้วในนั้นจะมีหมวด Certificate อยู่กดเข้าไปจะโชว์ประมาณนี้
เราก็เพิ่มตัว CA.pem ของเราลงไปในแทบ Trusted Autherities
เสร็จแล้วบางคนจะเห็นว่าลองเข้า localhost แล้วมันเป็นสีเขียวเลย แต่ถ้าบางคนยังไม่เห็นให้ลองรีสตาร์ทเครื่องดูก่อนเพราะอาจจะติดแคช เท่านี้ก็ได้ https://localhost เขียวๆ ไว้ใช้แล้วครับ
ข้อสังเกต
หลักการนี้คือหลักการเดียวกันกับการขอใบรับรองจริงๆ นั่นแหละ เพียงแต่ว่าอันนี้เราใช้ในเครื่องเราเองก็เลยไม่จำเป็นต้องไปพึงพา CA ของบริษัทผู้ให้บริการ เพราะถ้าเครื่องไหนไม่มี CA ที่เราสร้างขึ้นมาแล้วเปิดมาเซิฟเวอร์เราเครื่องนั้นก็จะไม่ขึ้นเขียวอยู่ดี
|
|