NETPIE SECURE CONNECTION
ในกรณีที่ต้องการให้อุปกรณ์สื่อสารกันอย่างปลอดภัยไม่ให้ใครดักฟังข้อความที่แลกเปลี่ยนกันได้ และไม่ให้ใครมาเปลี่ยนข้อความกลางทาง เราจำเป็นต้องเข้ารหัสให้ช่องทางสื่อสาร โพรโทคอลที่นิยมใช้ในการรักษาความปลอดภัยให้ช่องทางสื่อสารได้แก่ TLS (Transport Layer Security) และ SSL (Secure Socket Layer) ซึ่งมักจะเรียกรวมๆ กันว่า SSL/TLS แอปพลิเคชั่นที่นิยมใช้บน SSL/TLS ได้แก่เว็บ อีเมลโปรแกรมสนทนา ฯลฯ ที่ต้องการความปลอดภัยในการส่งข้อมูล ตัวอย่างเช่น โพรโทคอล HTTPS หรือHTTP Secure จะเป็นการส่งข้อมูลเว็บที่เข้ารหัสบน SSL หรือ TLS
การส่งข้อมูลบน SSL/TLS มีข้อดี 3 ด้านคือ
1.Privacy ข้อมูลที่รับส่งจะถูกเข้ารหัส ทำให้มีความเป็นส่วนตัวและปลอดภัยจากการดักฟังโดยบุคคลที่สาม
2.Authentication คู่สนทนาทั้งสองฝั่งจะได้รับการยืนยันตัวตนโดยการใช้ Public/Private Key ที่ออกให้โดย Certificate Authority ที่ได้รับการยอมรับ ทำให้มั่นใจได้ว่าคู่สนทนาเป็นคนหรืออุปกรณ์ที่ต้องการสื่อสารด้วยจริงๆ ไม่ใช่ตัวปลอมที่มาสวมสิทธิ์
3.Reliability ข้อมูลที่รับส่งไม่สามารถถูกเปลี่ยนแปลงกลางทาง เพราะมีกลไกการตรวจสอบความถูกต้องของข้อมูลโดยใช้ Message Authentication Code
TLS vs SSL
บ่อยครั้งที่เกิดความสับสนระหว่างTLSกับSSLทั้งสองโพรโทคอลทำหน้าที่เหมือนกันคือสร้างช่องทางการสื่อสารที่ปลอดภัยด้วยการเข้ารหัสข้อมูล ยืนยันความถูกต้องของข้อมูล และยืนยันตัวตนของคู่สนทนา โพรโทคอล SSL กำเนิดมาก่อน TLS และได้รับความนิยมสูงโดยเฉพาะกับการใช้งานเว็บ (HTTPover SSL) แต่ในปีค.ศ.2014มีการพบช่องโหว่ที่ร้ายแรงที่เรียกว่า POODLE Attack บน SSL เวอร์ชั่น 3.0 ตั้งแต่นั้นมา SSL จึงกลายเป็นโพรโทคอลที่ไม่ปลอดภัยและไม่ควรใช้
โพรโทคอล TLS ถูกออกแบบมาทีหลังและออกแบบให้รองรับกลไกสมัยใหม่ที่เกี่ยวกับการสร้าง Key การแลกเปลี่ยน Key การเข้ารหัส จึงทำให้ TLS มีความปลอดภัยมากกว่า SSL
การใช้ TLS กับ NETPIE
NETPIE เลือกใช้โพรโทคอล TLS เวอร์ชั่น 1.2 ในการสร้างความปลอดภัยให้กับการสื่อสารระหว่าง Microgear กับ NETPIE
NETPIE Microgear ที่รองรับการสื่อสารบน TLS ได้แก่ Node.js, HTML5, ESP8266
NETPIE Microgear ที่รองรับการสื่อสารบน TLS ได้แก่ Node.js, HTML5, ESP8266 |
---|
TCP พอร์ตที่ใช้สื่อสาร
HTML5 Microgear | ESP8266 และ Node.js Microgear |
---|---|
TLS: 8081 and 8084 (default) | Non-TLS: 8080 and 1883 (default) |
Non-TLS: 8080 and 8083 | TLS: 8081 and 8883 |
ฟังก์ชั่นเพื่อเรียกใช้ TLS
บน Node.js และ ESP8266 Microgear จะมีฟังก์ชั่น useTLS(tlsmode) เพื่อระบุว่าจะเลือกใช้หรือไม่ใช้การเข้ารหัสแบบ TLS ส่วน argumenttlsmode เป็น Boolean ถ้าตั้งค่า TRUE แปลว่าใช้ TLS ถ้าตั้งค่า FALSE แปลว่าไม่ใช้ TLS หากไม่ได้เรียกใช้ฟังก์ชั่นนี้ ค่า default ของMicrogear จะไม่ใช้ TLS
บน HTML5 Microgear ก็มีฟังก์ชั่น useTLS(tlsmode) เช่นกัน แต่ค่าdefaultคือใช้ TLS ดังนั้นการสื่อสารกับ HTML5 จะเป็นการสื่อสารแบบปลอดภัยเสมอ นอกจากนักพัฒนาจะปิดการใช้ TLS ด้วยคำสั่ง useTLS(false)
วิธีสร้าง Secure Connection บน ESP8266Microgear แตกต่างจากการสร้าง Connection ปกติสองจุด
1.ประกาศตัวแปร Client เป็นชนิด WiFiClientSecure แทน WiFiClient
WiFiClientSecure client;
MicroGear microgear(client);
2.ภายในฟังก์ชั่น setup() เรียกใช้ useTLS(true) ก่อนการเรียกฟังก์ชั่น init(KEY, SECRET, ALIAS)
microgear.useTLS(true);
microgear.init(KEY,SECRET,ALIAS);
microgear.connect(APPID);
วิธีสร้าง Secure Connection บน Node.jsMicrogear แตกต่างจากการสร้าง Connection ปกติจุดเดียว คือต้องเรียกใช้ useTLS(true) ก่อนการเรียกฟังก์ชั่น connect(APPID)
microgear.useTLS(true);
microgear.connect(APPID);
สำหรับการใช้ TLS บน ESP8266 จะใช้ได้กับ ESP8266 SDK 2.1.0 แต่มีปัญหากับ SDK 2.2.0 และกลับมาใช้ได้กับ SDK 2.3.0-rc1 |
---|