Naruebet เผยแพร่เมื่อ 27-9-2022 18:57:02

วิธีสร้าง SSL ไว้ใช้กับ localhost พร้อมทำสีเขียว

บทความนี้จะแนะนำวิธีการเปลี่ยนการเข้าใช้งาน 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


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 ที่เราสร้างขึ้นมาแล้วเปิดมาเซิฟเวอร์เราเครื่องนั้นก็จะไม่ขึ้นเขียวอยู่ดี

เพจ: [1]
เวอร์ชันเต็ม: วิธีสร้าง SSL ไว้ใช้กับ localhost พร้อมทำสีเขียว