วิธีใส่ SSL Certification (HTTPS) ใน Socket.io (Node.js) by

31
Aug
0

จากการเปิดเกมป๊อกเด้งมาหลายอาทิตย์พบปัญหาคือการติดตั้ง SSL สำหรับ NodeJS นั้นไม่ค่อยจะเหมือนกับภาษาชาวบ้านอื่นๆ ซักเท่าไหร่ครับ ไฟล์ config สำหรับรัน NodeJS นั้นจะไม่ได้เป็นลักษณะเหมือนอย่าง php.ini ซึ่งเป็นไฟล์แยกต่างหากโดยเฉพาะ แต่ NodeJS จะใช้การ config ผ่าน syntax javascript ทั้งหมดครับ (เรียก function เพื่อ setting ค่าต่างๆ ครับ) โดยผมทำเกมบน Facebook จึงต้องติดตั้ง SSL เพื่อให้ใช้งาน HTTPS ได้ ซึ่งองค์ประกอบสำหรับการติดตั้ง SSL 1 domain จะได้แก่

  1. private key file
  2. certificate file ที่ได้จากการซื้อ SSL กับเว็บไซต์ที่รับจดทะเบียน
  3. intermediate file ตามแต่เจ้าของ SSL ที่เราเลือกใช้

แต่ตัวไฟล์ Intermediate ของ SSL นี่สิเจ้าปัญหา เพราะมักเป็น Chain ที่ต่อเนื่องไปยัง Root CA (มี CA หลายชั้นในการตรวจสอบใบอนุญาต SSL ของเรา) ตัวอย่างไฟล์ Intermediate ที่ผมใช้คือ PositiveSSL มีดังนี้ (จริงๆ จะยาวกว่านี้มากนะครับ นี่เป็นเพียงแค่ตัวอย่างลักษณะหน้าตาเฉยๆ )

-----BEGIN CERTIFICATE-----
MIIFKTCCBBGgAwIBAgIRANJ0OUh7t/Gr2RV5gntPmEIwDQYJKoZIhvcNAQEFBQAw
cTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G
A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ29tb2RvIENBIExpbWl0ZWQxFzAVBgNV
...
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIFAzCCA+ugAwIBAgIQTM1KmltFEyGMz5AviytRcTANBgkqhkiG9w0BAQUFADCB
lzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug
Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho
...
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIEhjCCA26gAwIBAgIQUkIGSk83/kNpSHqWZ/9dJzANBgkqhkiG9w0BAQUFADBv
MQswCQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFk
ZFRydXN0IEV4dGVybmFsIFRUUCBOZXR3b3JrMSIwIAYDVQQDExlBZGRUcnVzdCBF
...
-----END CERTIFICATE-----

จากที่ยกมาจะเห็นได้ว่ามี —–BEGIN CERTIFICATE—– และ —–END CERTIFICATE—– ทั้งหมด 3 ชุด นั่นคือมีโซ่ทั้งหมด 3 บล็อค (ของคุณอาจมีมากหรือน้อยกว่านี้ตามแต่เจ้า CA ที่คุณจดทะเบียนใช้งาน) ทีนี้สำหรับ Node.js เราต้องแยกไฟล์ intermediate ออกเป็น 3 ไฟล์ (ตามจำนวนบล็อคที่พบ) ไฟล์ละบล็อค แล้วใส่ลงไปใน code ดังนี้ (ใน code ทั้งสามไฟล์จะชื่อ intermediate.pem, intermediate2.pem, intermediate3.pem)


var privateKey = fs.readFileSync('/home/pokdeng/op2-ssl/private.key').toString();
var certificate = fs.readFileSync('/home/pokdeng/op2-ssl/cert.pem').toString();
var ca = fs.readFileSync('/home/pokdeng/op2-ssl/intermediate.pem').toString();
var ca2 = fs.readFileSync('/home/pokdeng/op2-ssl/intermediate2.pem').toString();
var ca3 = fs.readFileSync('/home/pokdeng/op2-ssl/intermediate3.pem').toString();
var ios = require('socket.io').listen(443, {key:privateKey, cert:certificate, ca:[ca,ca2,ca3]});

ใน code ตัวอย่างจะเป็น Socket.IO นะครับ หากเป็นการสร้าง server แบบอื่น (หรือใช้ Framework ใดๆ) parameter ก็จะแตกต่างกันไป แต่ส่วนที่เหมือนกันคือก้อน {key:privateKey, cert:certificate, ca:[ca,ca2,ca3]} ครับ เมื่อใส่แล้วก็ต้องทดสอบว่าเรา setup ได้ถูกต้องหรือยังด้วยการไปที่ http://www.digicert.com/help/ แล้วกรอก URL ที่เรียก Node.js ของเราลงไป (ของผมคือ http://op2.levelup.in.th/socket.io/socket.io.js) หาก setup ได้ถูกต้อง จะปรากฎโซ่คล้องกันต่อเนื่องกันไปพร้อม icon ติ๊กถูก แสดงข้อความว่า “SSL Certificate is correctly installed” ก็เป็นอันเสร็จพิธี!

Enjoy this article?

Consider subscribing to our RSS feed!

ไม่มีความเห็น

ยังไม่มีความเห็น

ใส่ความเห็น

RSS feed for comments on this post

 เราชนะรอบ 4 | ยืมเงิน 3000 ด่วน | แอพกู้เงิน | แอพเงินด่วน | สินเชื่อออนไลน์อนุมัติทันที | Site Map | กู้เงินก้อน | กระเป๋าตัง | thisshop และ ยืมเงินฉุกเฉิน 5000 ด่วน