การติดตั้ง Certificate ลง UniFi Controller

Pao Payungsak Klinchampa
Next-Hop Co., Ltd.
Published in
3 min readJan 15, 2020
Ref: https://www.reddit.com/r/Ubiquiti/comments/8qlv9f/new_unifi_controller_design/

โดยส่วนใหญ่ พวกอุปกรณ์ Network ทั้งหลายที่มีหน้าเว็บเป็น HTTPS มักจะมาพร้อมกับ Self Signed Cert ซึ่งเป็น Cert ที่สร้างเอง เซ็นเอง ถามว่ามันปลอดภัยมั๊ย ?? อันนี้ก็เเล้วเเต่ว่า Product ตัวนั้นๆ จะใช้ Cert ตัวเดียวทั้ง Lot รึเปล่า ซึ่งถ้าเป็นเเบบนั้นมันก็เป็นช่องโหว่อย่างนึงนะ แต่ถามว่ามันเข้ารหัสอะไรได้มั๊ย คำตอบคือมันก็เข้าได้นั่นเเหละ เพียงเเค่การที่ออก Cert เอง เซ็นเอง มันไม่ถูกต้อง จึงดูไม่น่าเชื่อถือ เวลาเราเปิด Web Brower จึงเเจ้งเตือน ฟ้องหน้าเเดงๆขึ้นมาว่า Invalid Cert นั่นเอง

Ref : https://support.google.com/chrome/forum/AAAAP1KN0B07s6tnMabDo4/?hl=en&gpf=%23!topic%2Fchrome%2F7s6tnMabDo4

ตัวอย่างหน้าจอ Invalid Cert ก็ตามภาพด้านบนครับ ทุกๆคนคงเคยเห็นกัน และถ้า Domain Name นั้นๆเปิดใช้ HSTS ในระดับ Wildcard จะไม่สามารถเข้าหน้าเว็บได้เลย

ซึ่งสำหรับ UniFi Controller โดยตัว Software เอง ไม่ได้ออกเเบบมาให้เราติดตั้ง Cert กันได้ง่ายๆนะครับ ต้องออกเเรงกันนิดหน่อย แต่เชื่อว่าไม่ยากเกินความสามารถแน่ๆครับ

หลายๆบริษัทที่ขาย UniFi อาจมีการติดตั้ง UniFi Controller ลง Server ซักเครื่อง ไม่ว่าจะใช้ Cloud ของที่ไหนก็เเล้วเเต่ อาจทำเป็นเเบบ Centralized ก็คือ UniFi Controller ตัวเดียว ใช้ได้หลาย Site เป็นศูนย์กลางอะไรแบบนี้ และบางครั้งลูกค้าอาจต้องการเข้าไป Monitor ซึ่ง Engineer ที่ดูเเล UniFi Controller ต้องสร้าง User ให้ลูกค้า ซึ่งการที่ลูกค้าเห็นหน้าจอ Invalid Cert อาจดูเป็นเรื่องที่รู้สึกไม่ค่อยดีซักเท่าไร(เเม้เราอาจอธิบายลูกค้าได้ว่ามัน OK ก็เถอะ ) ดังนั้น เรามาจัดการให้ไม่มีหน้าจอ Invalid Cert กัน

มาดูสิ่งที่เราต้องเตรียมกันก่อน

  1. Domain Name เพราะเราไม่สามารถออก Cert ที่เเสดงความเป็นเจ้าของ IP กันได้ง่ายๆแบบ 1.1.1.1 ของ Cloudflare ผมเองก็ยังไม่รู้เหมือนกันว่าถ้าอยากได้ Cert เเบบนั้นต้องติดต่อใคร แต่คาดว่าราคาคงเเรงน่าดู เลยใช้ Domain Name จะดีกว่า
  2. Certificate ที่ขอมาอย่างถูกต้อง จะเป็น Cert Free จาก Let Encrypt , OV , EV , Wildcard อะไรก็เเล้วเเต่ ใช้ได้หมด ขอให้ Common Name หรือ Alternative Name ตรงกับ Domain Name ที่ชี้ไปหา UniFi Controller ก็พอ
  3. UniFi Controller ติดตั้งพร้อมใช้งาน

สำหรับบทความนี้ UniFi Controller ติดตั้งอยู่บน VM ที่ลง Ubuntu Server นะครับ

มาเริ่มกันเลยครับ อันดับเเรก เราต้องเตรียม Certtificate กันก่อน โดยมี 3 file คือ

  1. cert.pem > อันนี้เป็น Cert ที่เราไปซื้อมาหรืออาจขอฟรี โดยจะมี Common Name เป็น Domain Name ของเรา
  2. privkey.pem > อันนี้ก็คือ Private Key ที่ใช้คู่กับ Cert ด้านบนของเรานั่นเอง
  3. ca.pem > อันนี้เรียกว่า Intermediate CA Cert ซึ่งเป็น Cert ของ CA ที่ใช้ในการออก Cert ให้เราครับ

สำหรับ Cert ที่เราซื้อมา โดยส่วนมากเเล้ว เราจะต้อง Gennerate CSR ขึ้นมา เราก็จะได้ Private Key ด้วย อันนี้อย่าทำหายนะครับ ส่วน Cert เเละ Intermediate CA Cert เมื่อทางผู้ให้บริการออก Cert ออกให้เราเสร็จ เค้าก็จะส่งมาให้เราครับ อาจมีให้โหลดทางหน้าเว็บ หรือส่ง email มาก็เเล้วเเต่เลย

จากนั้น ให้ทำการ Upload 3 file นี้ลงไปใน UniFi Controller ของเรากันเลย โดย Upload ไปไว้ที่ /var/lib/unifi/

ถ้าใช้ macOS / Linux ก็ใช้ scp ได้ เเบบนี้

$ scp <file-name> <username>@<unifi-con-domain>:/some/path/

หรือถ้าใช้ Windows ก็ไปโหลด FileZillar มา เเล้วเชื่อมต่อโดยเลือกเป็น SCP หรือ SFTP ก็ใช้ได้ครับ ลากวางได้เลย

ส่วนถ้าติดปัญหาเรื่อง Permission Denide ให้ Upload file ไปยัง Home Directory ของเราก่อน เเล้วค่อยใช้ sudo mv fullchain.pem /var/lib/unifi/ เพื่อย้าย file ไปอยู่ใน /var/lib/unifi/ ให้ได้

จากนั้น เราต้อง Convert Cert ให้อยู่ในรูปแบบ pkcs12 ซึ่ง Cert แแบบนี้ จะมี Password Protect ไว้ ถ้าเราลองใช้คำสั่ง cat .ในการอ่าน file มันจะอ่านไม่ออก เป็นอะไรก็ไม่รู้ขึ้นหน้าจอเต็มไปหมด ราวกับภาษาต่างดาว เเต่ถ้าเป็น .pem เราจะอ่านออก (เอาจริงไม่ออกหรอกเพราะโดน Encode ด้วย BASE64 ไว้ 555) ถ้าสนใจเรื่องพวกนี้ก็ไปตามอ่านกันเองนะครับ ผมโม้ไว้เเค่นี้ก็พอ

โดยใช้คำสั่งแบบนี้

$ cd /var/lib/unifi/$ openssl pkcs12 -export -in cert.pem -inkey privkey.pem -out unifi.p12 -name unifi -CAfile ca.pem -caname root

จากนั้น มันจะถามหารหัส ให้เราตั้งรหัสไป อะไรก็ได้ ตามชอบเลยครับ

ถ้าไม่มีอะไรผิดพลาด เราจะได้ file ชื่อ unifi.p12 เเล้ว

ขั้นตอนต่อไปก็เตรียมตัวลุ้นได้เลยว่าจะทำให้ระบบมันพังมั๊ย (ฮา) แต่ก่อนจะถึงขั้นนี้ ให้ Back Up Certificate ที่มันมีอยู่เเล้วก่อน (Cert Original จาก Unifi Controller) โดยใช้คำสั่งนี้ ตรง 12012012–1800 คือวันที่เเละเวลาในขณะนั้นนะครับ จะตั้งเป็นชื่ออื่นก็เเล้วเเต่ ได้หมดครับ

$ mv /var/lib/unifi/keystore /var/lib/unifi/keystore.backup-12012020–1800

เราก็จะได้ file ขื่อ keystore.backup-12012020–1800 ที่เรา Back Up ไว้ หากเกิดผิดพลาดจะได้ Restore กลับได้ 555

หลังจากนั้นก็มา Import unifi.p12 ลงไปใน UniFi Controller กัน ด้วยคำสั่ง

$ keytool -importkeystore -deststorepass aircontrolenterprise -destkeypass aircontrolenterprise -destkeystore /var/lib/unifi/keystore -srckeystore unifi.p12 -srcstoretype PKCS12 -alias unifi

มันก็จะถามหารหัสที่ใช้ในการ Decrypt Cert ให้เราป้อนรหัสที่ตั้งเอาไว้ในขั้นตอนก่อนหน้านี้เลย

จากนั้นก็ Restart Service ด้วยคำสั่ง

$ service unifi restart

ต่อไปก็ทดลองเข้า Web Unifi Controller กันเลยครับ โดยใช้ Domain Name นะ ซึ่งถ้าไม่มีปัญหาอะไร เราก็จะเปิดหน้าเว็บได้

และถ้าลองตรวจสอบ Cert ดู ก็จะพบว่าเป็น Cert ที่เรา Import ลงไปนั่นเอง

เพียงแค่นี้ก็ไม่มีหน้า Invalid Cert มากวนใจเเล้วครับ เเละเมื่อ Cert หมดอายุ ก็ใช้วิธีเดียวกันในการติดตั้ง Cert ใบใหม่

Ref:

--

--