วิธีใส่ 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” ก็เป็นอันเสร็จพิธี!

การแก้ไข ปรับเปลี่ยนเว็บไซต์ให้รองรับ HTTPS by

30
Sep
12

เนื่องด้วย facebook บังคับให้ application ทุกตัวใช้งาน HTTPS ภายในวันที่ 1 ตุลาคมนี้ ทำให้ผมต้องนั่งปรับแก้ยกใหญ่ โดยสิ่งที่ต้องแก้มีดังนี้

ต้องแก้อะไรบ้าง?

1. ทำ self-signed certificate (ใช้งาน https ได้แต่ browser จะขึ้นเตือนว่าไม่ปลอดภัย และไม่สามารถใช้งานกับ facebook app ที่อยู่ใน canvas ได้) หรือไปขอ certificate จากผู้ให้บริการต่างๆเช่น Thawte, RapidSSL, Godaddy, Verisign ฯลฯ ซึ่งต้องเสียค่าจดทะเบียน ซึ่งจะแตกต่างกันไป

2. แก้ไข code ของเราในการ link ไปแต่ละหน้าจาก http:// ให้เป็น https:// ทั้งหมด เพื่อให้คนที่ใช้งานเว็บไซต์อยู่ไม่หลุดออกจากการเชื่อมต่อ https เพียงเพราะคลิก link เปลี่ยนหน้า

3. แก้ไข code ของเราที่ call ไปยัง external site ต่างๆ เช่น banner exchange ต่างๆ (ที่จริงพวก widget เช่น google+, facebook like หรือ google analytic ก็เข้าเคสนี้ แต่เนื่องจาก code ที่ให้มาจะ auto detect ให้เองว่าเป็น https หรือไม่อยู่แล้วจึงไม่ค่อยมีปัญหานัก ยกเว้นเรา call หาไฟล์ javascript ข้างนอกเองตรงๆ ก็ต้องแก้จาก http:// เป็น https:// ด้วยเช่นกัน)

ผู้ให้บริการ SSL แต่ละเจ้าต่างกันอย่างไร?

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