|
|
<!--
|
|
|
CO_OP_TRANSLATOR_METADATA:
|
|
|
{
|
|
|
"original_hash": "81c437c568eee1b0dda1f04e88150d37",
|
|
|
"translation_date": "2025-08-27T21:55:16+00:00",
|
|
|
"source_file": "2-farm/lessons/6-keep-your-plant-secure/README.md",
|
|
|
"language_code": "th"
|
|
|
}
|
|
|
-->
|
|
|
# รักษาความปลอดภัยให้กับอุปกรณ์ IoT ของคุณ
|
|
|
|
|
|

|
|
|
|
|
|
> สเก็ตโน้ตโดย [Nitya Narasimhan](https://github.com/nitya) คลิกที่ภาพเพื่อดูภาพขนาดใหญ่ขึ้น
|
|
|
|
|
|
## แบบทดสอบก่อนเรียน
|
|
|
|
|
|
[แบบทดสอบก่อนเรียน](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/19)
|
|
|
|
|
|
## บทนำ
|
|
|
|
|
|
ในบทเรียนที่ผ่านมา คุณได้สร้างอุปกรณ์ IoT สำหรับตรวจสอบดินและเชื่อมต่อกับคลาวด์แล้ว แต่จะเกิดอะไรขึ้นถ้าแฮกเกอร์ที่ทำงานให้กับเกษตรกรคู่แข่งสามารถควบคุมอุปกรณ์ IoT ของคุณได้? พวกเขาอาจส่งข้อมูลความชื้นในดินที่สูงเกินจริงเพื่อให้น้ำไม่ถูกจ่ายให้พืช หรือเปิดระบบรดน้ำให้ทำงานตลอดเวลา จนทำให้พืชของคุณตายจากการรดน้ำมากเกินไป และทำให้คุณเสียค่าใช้น้ำจำนวนมาก
|
|
|
|
|
|
ในบทเรียนนี้ คุณจะได้เรียนรู้เกี่ยวกับการรักษาความปลอดภัยของอุปกรณ์ IoT และเนื่องจากนี่เป็นบทเรียนสุดท้ายของโครงการนี้ คุณจะได้เรียนรู้วิธีการล้างทรัพยากรบนคลาวด์เพื่อลดค่าใช้จ่ายที่อาจเกิดขึ้น
|
|
|
|
|
|
ในบทเรียนนี้เราจะครอบคลุม:
|
|
|
|
|
|
* [ทำไมคุณถึงต้องรักษาความปลอดภัยให้อุปกรณ์ IoT?](../../../../../2-farm/lessons/6-keep-your-plant-secure)
|
|
|
* [การเข้ารหัส](../../../../../2-farm/lessons/6-keep-your-plant-secure)
|
|
|
* [การรักษาความปลอดภัยให้อุปกรณ์ IoT ของคุณ](../../../../../2-farm/lessons/6-keep-your-plant-secure)
|
|
|
* [การสร้างและใช้งานใบรับรอง X.509](../../../../../2-farm/lessons/6-keep-your-plant-secure)
|
|
|
|
|
|
> 🗑 นี่เป็นบทเรียนสุดท้ายในโครงการนี้ ดังนั้นหลังจากที่คุณทำบทเรียนและงานที่ได้รับมอบหมายเสร็จแล้ว อย่าลืมล้างบริการคลาวด์ของคุณ คุณจะต้องใช้บริการเหล่านี้เพื่อทำงานที่ได้รับมอบหมายให้เสร็จ ดังนั้นอย่าลืมทำงานให้เสร็จก่อน
|
|
|
>
|
|
|
> หากจำเป็น ให้ดูคำแนะนำใน [คู่มือการล้างโครงการของคุณ](../../../clean-up.md) เพื่อดูวิธีการทำ
|
|
|
|
|
|
## ทำไมคุณถึงต้องรักษาความปลอดภัยให้อุปกรณ์ IoT?
|
|
|
|
|
|
การรักษาความปลอดภัย IoT หมายถึงการทำให้อุปกรณ์ที่คาดหวังเท่านั้นที่สามารถเชื่อมต่อกับบริการ IoT บนคลาวด์ของคุณและส่งข้อมูลเทเลเมทรี และทำให้บริการคลาวด์ของคุณเท่านั้นที่สามารถส่งคำสั่งไปยังอุปกรณ์ของคุณได้ ข้อมูล IoT อาจเป็นข้อมูลส่วนตัว เช่น ข้อมูลทางการแพทย์หรือข้อมูลที่ละเอียดอ่อน ดังนั้นแอปพลิเคชันทั้งหมดของคุณจำเป็นต้องพิจารณาด้านความปลอดภัยเพื่อป้องกันไม่ให้ข้อมูลเหล่านี้รั่วไหล
|
|
|
|
|
|
หากแอปพลิเคชัน IoT ของคุณไม่ปลอดภัย อาจเกิดความเสี่ยงหลายประการ:
|
|
|
|
|
|
* อุปกรณ์ปลอมอาจส่งข้อมูลที่ไม่ถูกต้อง ทำให้แอปพลิเคชันของคุณตอบสนองผิดพลาด ตัวอย่างเช่น พวกเขาอาจส่งข้อมูลความชื้นในดินที่สูงตลอดเวลา ทำให้ระบบชลประทานของคุณไม่ทำงาน และพืชของคุณตายจากการขาดน้ำ
|
|
|
* ผู้ใช้ที่ไม่ได้รับอนุญาตอาจอ่านข้อมูลจากอุปกรณ์ IoT รวมถึงข้อมูลส่วนตัวหรือข้อมูลสำคัญทางธุรกิจ
|
|
|
* แฮกเกอร์อาจส่งคำสั่งเพื่อควบคุมอุปกรณ์ในลักษณะที่อาจทำให้อุปกรณ์หรือฮาร์ดแวร์ที่เชื่อมต่อเสียหาย
|
|
|
* โดยการเชื่อมต่อกับอุปกรณ์ IoT แฮกเกอร์อาจใช้สิ่งนี้เพื่อเข้าถึงเครือข่ายเพิ่มเติมและเข้าถึงระบบส่วนตัว
|
|
|
* ผู้ใช้ที่ประสงค์ร้ายอาจเข้าถึงข้อมูลส่วนตัวและใช้ข้อมูลนี้เพื่อแบล็กเมล์
|
|
|
|
|
|
นี่เป็นสถานการณ์ที่เกิดขึ้นจริง และเกิดขึ้นตลอดเวลา ตัวอย่างบางส่วนได้กล่าวถึงในบทเรียนก่อนหน้า แต่ยังมีตัวอย่างเพิ่มเติมดังนี้:
|
|
|
|
|
|
* ในปี 2018 แฮกเกอร์ใช้จุดเชื่อมต่อ WiFi ที่เปิดอยู่บนเทอร์โมสตัทของตู้ปลาที่เชื่อมต่ออินเทอร์เน็ตเพื่อเข้าถึงเครือข่ายของคาสิโนและขโมยข้อมูล [The Hacker News - Casino Gets Hacked Through Its Internet-Connected Fish Tank Thermometer](https://thehackernews.com/2018/04/iot-hacking-thermometer.html)
|
|
|
* ในปี 2016 Mirai Botnet ได้เปิดการโจมตีแบบปฏิเสธการให้บริการ (DDoS) ต่อ Dyn ผู้ให้บริการอินเทอร์เน็ต ทำให้ส่วนใหญ่ของอินเทอร์เน็ตล่ม Botnet นี้ใช้มัลแวร์เพื่อเชื่อมต่อกับอุปกรณ์ IoT เช่น DVR และกล้องที่ใช้ชื่อผู้ใช้และรหัสผ่านเริ่มต้น และจากนั้นเปิดการโจมตี [The Guardian - DDoS attack that disrupted internet was largest of its kind in history, experts say](https://www.theguardian.com/technology/2016/oct/26/ddos-attack-dyn-mirai-botnet)
|
|
|
* Spiral Toys มีฐานข้อมูลของผู้ใช้ของ CloudPets ที่เชื่อมต่อกับของเล่นที่เปิดเผยต่อสาธารณะบนอินเทอร์เน็ต [Troy Hunt - Data from connected CloudPets teddy bears leaked and ransomed, exposing kids' voice messages](https://www.troyhunt.com/data-from-connected-cloudpets-teddy-bears-leaked-and-ransomed-exposing-kids-voice-messages/).
|
|
|
* Strava ติดแท็กนักวิ่งที่คุณวิ่งผ่านและแสดงเส้นทางของพวกเขา ทำให้คนแปลกหน้าสามารถเห็นได้ว่าคุณอาศัยอยู่ที่ไหน [Kim Komndo - Fitness app could lead a stranger right to your home — change this setting](https://www.komando.com/security-privacy/strava-fitness-app-privacy/755349/).
|
|
|
|
|
|
✅ ทำการค้นคว้า: ค้นหาตัวอย่างเพิ่มเติมเกี่ยวกับการแฮก IoT และการละเมิดข้อมูล IoT โดยเฉพาะกับอุปกรณ์ส่วนตัว เช่น แปรงสีฟันหรือเครื่องชั่งน้ำหนักที่เชื่อมต่ออินเทอร์เน็ต คิดถึงผลกระทบที่การแฮกเหล่านี้อาจมีต่อเหยื่อหรือผู้ใช้
|
|
|
|
|
|
> 💁 ความปลอดภัยเป็นหัวข้อที่กว้างมาก และบทเรียนนี้จะครอบคลุมเพียงพื้นฐานบางส่วนเกี่ยวกับการเชื่อมต่ออุปกรณ์ของคุณกับคลาวด์ หัวข้ออื่นๆ ที่จะไม่ครอบคลุมรวมถึงการตรวจสอบการเปลี่ยนแปลงข้อมูลระหว่างการส่ง การแฮกอุปกรณ์โดยตรง หรือการเปลี่ยนแปลงการกำหนดค่าอุปกรณ์ การแฮก IoT เป็นภัยคุกคามที่สำคัญจนมีการพัฒนาเครื่องมืออย่าง [Azure Defender for IoT](https://azure.microsoft.com/services/azure-defender-for-iot/?WT.mc_id=academic-17441-jabenn) เครื่องมือเหล่านี้คล้ายกับโปรแกรมป้องกันไวรัสและเครื่องมือรักษาความปลอดภัยที่คุณอาจมีในคอมพิวเตอร์ของคุณ แต่ได้รับการออกแบบมาสำหรับอุปกรณ์ IoT ขนาดเล็กที่ใช้พลังงานต่ำ
|
|
|
|
|
|
## การเข้ารหัส
|
|
|
|
|
|
เมื่ออุปกรณ์เชื่อมต่อกับบริการ IoT จะใช้งาน ID เพื่อระบุตัวตนของตัวเอง ปัญหาคือ ID นี้สามารถถูกโคลนได้ - แฮกเกอร์สามารถตั้งค่าอุปกรณ์ที่เป็นอันตรายที่ใช้ ID เดียวกับอุปกรณ์จริงแต่ส่งข้อมูลปลอม
|
|
|
|
|
|

|
|
|
|
|
|
วิธีแก้ปัญหาคือการแปลงข้อมูลที่ส่งให้เป็นรูปแบบที่ถูกเข้ารหัส โดยใช้ค่าบางอย่างที่รู้เฉพาะอุปกรณ์และคลาวด์เท่านั้น กระบวนการนี้เรียกว่า *การเข้ารหัส* และค่าที่ใช้ในการเข้ารหัสข้อมูลเรียกว่า *คีย์การเข้ารหัส*
|
|
|
|
|
|

|
|
|
|
|
|
บริการคลาวด์สามารถแปลงข้อมูลกลับเป็นรูปแบบที่อ่านได้ โดยใช้กระบวนการที่เรียกว่า *การถอดรหัส* โดยใช้คีย์การเข้ารหัสเดียวกัน หรือ *คีย์การถอดรหัส* หากข้อความที่ถูกเข้ารหัสไม่สามารถถอดรหัสได้ด้วยคีย์ ข้อความนั้นจะถูกปฏิเสธ
|
|
|
|
|
|
เทคนิคสำหรับการเข้ารหัสและถอดรหัสนี้เรียกว่า *การเข้ารหัสลับ (Cryptography)*
|
|
|
|
|
|
### การเข้ารหัสในยุคแรก
|
|
|
|
|
|
การเข้ารหัสในยุคแรกๆ คือการเข้ารหัสแบบแทนที่ (Substitution Cipher) ซึ่งมีอายุย้อนไปถึง 3,500 ปี การเข้ารหัสแบบแทนที่เกี่ยวข้องกับการแทนที่ตัวอักษรหนึ่งด้วยตัวอักษรอื่น ตัวอย่างเช่น [Caesar cipher](https://wikipedia.org/wiki/Caesar_cipher) ใช้การเลื่อนตัวอักษรในอักษรภาษาอังกฤษตามจำนวนที่กำหนด โดยมีเพียงผู้ส่งข้อความและผู้รับข้อความที่ตั้งใจเท่านั้นที่รู้ว่าต้องเลื่อนตัวอักษรไปกี่ตัว
|
|
|
|
|
|
[รหัส Vigenère](https://wikipedia.org/wiki/Vigenère_cipher) พัฒนาต่อไปโดยใช้คำเพื่อเข้ารหัสข้อความ ทำให้แต่ละตัวอักษรในข้อความต้นฉบับถูกเลื่อนด้วยจำนวนที่แตกต่างกัน แทนที่จะเลื่อนด้วยจำนวนตัวอักษรเดียวกันเสมอ
|
|
|
|
|
|
การเข้ารหัสถูกใช้ในหลากหลายวัตถุประสงค์ เช่น การปกป้องสูตรเคลือบเครื่องปั้นดินเผาในเมโสโปเตเมียโบราณ การเขียนจดหมายรักลับในอินเดีย หรือการเก็บคาถาเวทมนตร์ของอียิปต์โบราณให้เป็นความลับ
|
|
|
|
|
|
### การเข้ารหัสในยุคปัจจุบัน
|
|
|
|
|
|
การเข้ารหัสในยุคปัจจุบันมีความซับซ้อนมากขึ้น ทำให้ยากต่อการถอดรหัสมากกว่าวิธีในยุคแรก การเข้ารหัสในยุคปัจจุบันใช้คณิตศาสตร์ที่ซับซ้อนเพื่อเข้ารหัสข้อมูล โดยมีจำนวนคีย์ที่เป็นไปได้มากเกินกว่าที่จะทำการโจมตีแบบเดาสุ่ม (Brute Force) ได้
|
|
|
|
|
|
การเข้ารหัสถูกใช้ในหลายวิธีสำหรับการสื่อสารที่ปลอดภัย หากคุณกำลังอ่านหน้านี้บน GitHub คุณอาจสังเกตเห็นว่า URL ของเว็บไซต์เริ่มต้นด้วย *HTTPS* ซึ่งหมายความว่าการสื่อสารระหว่างเบราว์เซอร์ของคุณและเซิร์ฟเวอร์ของ GitHub ถูกเข้ารหัส หากมีใครสามารถอ่านการรับส่งข้อมูลอินเทอร์เน็ตระหว่างเบราว์เซอร์ของคุณและ GitHub พวกเขาจะไม่สามารถอ่านข้อมูลได้เนื่องจากข้อมูลถูกเข้ารหัส คอมพิวเตอร์ของคุณอาจเข้ารหัสข้อมูลทั้งหมดบนฮาร์ดไดรฟ์ของคุณด้วย ดังนั้นหากมีใครขโมยคอมพิวเตอร์ของคุณ พวกเขาจะไม่สามารถอ่านข้อมูลใดๆ ได้หากไม่มีรหัสผ่านของคุณ
|
|
|
|
|
|
> 🎓 HTTPS ย่อมาจาก HyperText Transfer Protocol **Secure**
|
|
|
|
|
|
น่าเสียดายที่ไม่ใช่ทุกอย่างจะปลอดภัย บางอุปกรณ์ไม่มีความปลอดภัยเลย บางอุปกรณ์ถูกป้องกันด้วยคีย์ที่ง่ายต่อการถอดรหัส หรือบางครั้งอุปกรณ์ทั้งหมดในประเภทเดียวกันใช้คีย์เดียวกัน มีรายงานเกี่ยวกับอุปกรณ์ IoT ที่เป็นส่วนตัวมากที่มีรหัสผ่านเดียวกันสำหรับการเชื่อมต่อผ่าน WiFi หรือ Bluetooth หากคุณสามารถเชื่อมต่อกับอุปกรณ์ของคุณเอง คุณก็สามารถเชื่อมต่อกับอุปกรณ์ของคนอื่นได้ เมื่อเชื่อมต่อแล้ว คุณอาจเข้าถึงข้อมูลส่วนตัวที่สำคัญ หรือควบคุมอุปกรณ์ของพวกเขาได้
|
|
|
|
|
|
> 💁 แม้จะมีความซับซ้อนของการเข้ารหัสในยุคปัจจุบันและคำกล่าวที่ว่าการถอดรหัสอาจใช้เวลาหลายพันล้านปี แต่การเพิ่มขึ้นของคอมพิวเตอร์ควอนตัมได้ทำให้เกิดความเป็นไปได้ในการถอดรหัสทั้งหมดในเวลาอันสั้น!
|
|
|
|
|
|
### คีย์แบบสมมาตรและอสมมาตร
|
|
|
|
|
|
การเข้ารหัสมีสองประเภท - แบบสมมาตรและอสมมาตร
|
|
|
|
|
|
**การเข้ารหัสแบบสมมาตร** ใช้คีย์เดียวกันในการเข้ารหัสและถอดรหัสข้อมูล ทั้งผู้ส่งและผู้รับต้องรู้คีย์เดียวกัน นี่เป็นประเภทที่ปลอดภัยน้อยที่สุด เนื่องจากคีย์ต้องถูกแชร์ในบางวิธี สำหรับผู้ส่งที่จะส่งข้อความที่เข้ารหัสไปยังผู้รับ ผู้ส่งอาจต้องส่งคีย์ให้ผู้รับก่อน
|
|
|
|
|
|

|
|
|
|
|
|
หากคีย์ถูกขโมยระหว่างการส่ง หรือผู้ส่งหรือผู้รับถูกแฮกและคีย์ถูกค้นพบ การเข้ารหัสสามารถถูกถอดรหัสได้
|
|
|
|
|
|

|
|
|
|
|
|
**การเข้ารหัสแบบอสมมาตร** ใช้คีย์ 2 ชุด - คีย์สำหรับเข้ารหัสและคีย์สำหรับถอดรหัส ซึ่งเรียกว่าคู่คีย์สาธารณะ/ส่วนตัว คีย์สาธารณะใช้สำหรับเข้ารหัสข้อความ แต่ไม่สามารถใช้ถอดรหัสได้ คีย์ส่วนตัวใช้สำหรับถอดรหัสข้อความ แต่ไม่สามารถใช้เข้ารหัสได้
|
|
|
|
|
|

|
|
|
|
|
|
ผู้รับแชร์คีย์สาธารณะของพวกเขา และผู้ส่งใช้คีย์นี้เพื่อเข้ารหัสข้อความ เมื่อข้อความถูกส่ง ผู้รับจะถอดรหัสด้วยคีย์ส่วนตัวของพวกเขา การเข้ารหัสแบบอสมมาตรปลอดภัยมากกว่า เนื่องจากคีย์ส่วนตัวถูกเก็บเป็นความลับโดยผู้รับและไม่เคยถูกแชร์ คีย์สาธารณะสามารถถูกแชร์ให้ใครก็ได้ เนื่องจากสามารถใช้ได้เฉพาะการเข้ารหัสข้อความเท่านั้น
|
|
|
|
|
|
การเข้ารหัสแบบสมมาตรเร็วกว่าแบบอสมมาตร แต่แบบอสมมาตรปลอดภัยกว่า บางระบบจะใช้ทั้งสองแบบ - ใช้การเข้ารหัสแบบอสมมาตรเพื่อเข้ารหัสและแชร์คีย์แบบสมมาตร จากนั้นใช้คีย์แบบสมมาตรเพื่อเข้ารหัสข้อมูลทั้งหมด วิธีนี้ทำให้การแชร์คีย์แบบสมมาตรระหว่างผู้ส่งและผู้รับปลอดภัยมากขึ้น และเร็วขึ้นเมื่อเข้ารหัสและถอดรหัสข้อมูล
|
|
|
|
|
|
## การรักษาความปลอดภัยให้อุปกรณ์ IoT ของคุณ
|
|
|
|
|
|
อุปกรณ์ IoT สามารถรักษาความปลอดภัยได้โดยใช้การเข้ารหัสแบบสมมาตรหรืออสมมาตร การเข้ารหัสแบบสมมาตรง่ายกว่า แต่ปลอดภัยน้อยกว่า
|
|
|
|
|
|
### คีย์แบบสมมาตร
|
|
|
|
|
|
เมื่อคุณตั้งค่าอุปกรณ์ IoT ของคุณให้ทำงานร่วมกับ IoT Hub คุณได้ใช้สตริงการเชื่อมต่อ ตัวอย่างสตริงการเชื่อมต่อคือ:
|
|
|
|
|
|
```output
|
|
|
HostName=soil-moisture-sensor.azure-devices.net;DeviceId=soil-moisture-sensor;SharedAccessKey=Bhry+ind7kKEIDxubK61RiEHHRTrPl7HUow8cEm/mU0=
|
|
|
```
|
|
|
|
|
|
สตริงการเชื่อมต่อนี้ประกอบด้วยสามส่วนที่แยกด้วยเครื่องหมายเซมิโคลอน โดยแต่ละส่วนเป็นคีย์และค่า:
|
|
|
|
|
|
| คีย์ | ค่า | คำอธิบาย |
|
|
|
| --- | ----- | ----------- |
|
|
|
| HostName | `soil-moisture-sensor.azure-devices.net` | URL ของ IoT Hub |
|
|
|
| DeviceId | `soil-moisture-sensor` | ID ที่ไม่ซ้ำกันของอุปกรณ์ |
|
|
|
| SharedAccessKey | `Bhry+ind7kKEIDxubK61RiEHHRTrPl7HUow8cEm/mU0=` | คีย์แบบสมมาตรที่รู้โดยอุปกรณ์และ IoT Hub |
|
|
|
|
|
|
ส่วนสุดท้ายของสตริงการเชื่อมต่อ `SharedAccessKey` คือคีย์แบบสมมาตรที่รู้โดยทั้งอุปกรณ์และ IoT Hub คีย์นี้จะไม่ถูกส่งจากอุปกรณ์ไปยังคลาวด์ หรือจากคลาวด์ไปยังอุปกรณ์ แต่จะใช้เพื่อเข้ารหัสข้อมูลที่ถูกส่งหรือรับ
|
|
|
|
|
|
✅ ทำการทดลอง: คุณคิดว่าจะเกิดอะไรขึ้นหากคุณเปลี่ยนส่วน `SharedAccessKey` ของสตริงการเชื่อมต่อเมื่อเชื่อมต่ออุปกรณ์ IoT ของคุณ? ลองทำดู
|
|
|
|
|
|
เมื่ออุปกรณ์พยายามเชื่อมต่อครั้งแรก จะส่งโทเค็นลายเซ็นการเข้าถึงร่วม (SAS) ซึ่งประกอบด้วย URL ของ IoT Hub, เวลาหมดอายุของลายเซ็นการเข้าถึง (โดยปกติคือ
|
|
|
💁 เนื่องจากเวลาหมดอายุ อุปกรณ์ IoT ของคุณจำเป็นต้องทราบเวลาที่ถูกต้อง ซึ่งมักจะอ่านจากเซิร์ฟเวอร์ [NTP](https://wikipedia.org/wiki/Network_Time_Protocol) หากเวลาไม่ถูกต้อง การเชื่อมต่อจะล้มเหลว
|
|
|
หลังจากการเชื่อมต่อ ข้อมูลทั้งหมดที่ส่งไปยัง IoT Hub จากอุปกรณ์ หรือส่งจาก IoT Hub ไปยังอุปกรณ์ จะถูกเข้ารหัสด้วย shared access key
|
|
|
|
|
|
✅ คุณคิดว่าจะเกิดอะไรขึ้นถ้าอุปกรณ์หลายตัวใช้ connection string เดียวกัน?
|
|
|
|
|
|
> 💁 การเก็บ key นี้ไว้ในโค้ดเป็นแนวปฏิบัติที่ไม่ดีในด้านความปลอดภัย หากแฮกเกอร์ได้โค้ดของคุณ พวกเขาก็จะได้ key ของคุณไปด้วย นอกจากนี้ยังทำให้ยากขึ้นเมื่อปล่อยโค้ด เนื่องจากคุณจะต้องคอมไพล์ใหม่พร้อมกับ key ที่อัปเดตสำหรับทุกอุปกรณ์ วิธีที่ดีกว่าคือโหลด key นี้จาก hardware security module ซึ่งเป็นชิปบนอุปกรณ์ IoT ที่เก็บค่าที่เข้ารหัสไว้และสามารถอ่านได้โดยโค้ดของคุณ
|
|
|
>
|
|
|
> ในการเรียนรู้ IoT บางครั้งการใส่ key ลงในโค้ดจะง่ายกว่า เช่นที่คุณทำในบทเรียนก่อนหน้า แต่คุณต้องมั่นใจว่า key นี้จะไม่ถูกเช็คอินในระบบควบคุมโค้ดสาธารณะ
|
|
|
|
|
|
อุปกรณ์มี key 2 ตัว และ connection string ที่สอดคล้องกัน 2 ชุด สิ่งนี้ช่วยให้คุณสามารถหมุนเวียน key ได้ นั่นคือการสลับจาก key หนึ่งไปยังอีก key หนึ่งหาก key แรกถูกละเมิด และสร้าง key แรกใหม่
|
|
|
|
|
|
### ใบรับรอง X.509
|
|
|
|
|
|
เมื่อคุณใช้การเข้ารหัสแบบอสมมาตรด้วยคู่ public/private key คุณจำเป็นต้องให้ public key ของคุณแก่ใครก็ตามที่ต้องการส่งข้อมูลถึงคุณ ปัญหาคือ ผู้รับ key ของคุณจะมั่นใจได้อย่างไรว่าเป็น public key ของคุณจริง ๆ ไม่ใช่ของคนอื่นที่แอบอ้างเป็นคุณ? แทนที่จะให้ key คุณสามารถให้ public key ของคุณอยู่ในใบรับรองที่ได้รับการตรวจสอบโดยบุคคลที่สามที่เชื่อถือได้ ซึ่งเรียกว่าใบรับรอง X.509
|
|
|
|
|
|
ใบรับรอง X.509 เป็นเอกสารดิจิทัลที่มีส่วน public key ของคู่ public/private key โดยปกติจะออกโดยองค์กรที่เชื่อถือได้หลายแห่งที่เรียกว่า [Certification authorities](https://wikipedia.org/wiki/Certificate_authority) (CAs) และลงนามดิจิทัลโดย CA เพื่อระบุว่า key นั้นถูกต้องและมาจากคุณ คุณเชื่อถือใบรับรองและเชื่อว่า public key มาจากผู้ที่ใบรับรองระบุว่าเป็นเจ้าของ เพราะคุณเชื่อถือ CA เช่นเดียวกับที่คุณเชื่อถือหนังสือเดินทางหรือใบขับขี่เพราะคุณเชื่อถือประเทศที่ออกเอกสารนั้น ใบรับรองมีค่าใช้จ่าย ดังนั้นคุณสามารถ 'self-sign' ได้ นั่นคือสร้างใบรับรองด้วยตัวคุณเองและลงนามโดยคุณเองเพื่อการทดสอบ
|
|
|
|
|
|
> 💁 คุณไม่ควรใช้ใบรับรองที่ self-signed สำหรับการปล่อยผลิตภัณฑ์จริง
|
|
|
|
|
|
ใบรับรองเหล่านี้มีหลายฟิลด์ รวมถึงข้อมูลว่า public key มาจากใคร รายละเอียดของ CA ที่ออกใบรับรอง ระยะเวลาที่ใบรับรองมีผล และตัว public key เอง ก่อนใช้ใบรับรอง ควรตรวจสอบว่าใบรับรองนั้นได้รับการลงนามโดย CA ดั้งเดิม
|
|
|
|
|
|
✅ คุณสามารถอ่านรายการฟิลด์ทั้งหมดในใบรับรองได้ใน [Microsoft Understanding X.509 Public Key Certificates tutorial](https://docs.microsoft.com/azure/iot-hub/tutorial-x509-certificates?WT.mc_id=academic-17441-jabenn#certificate-fields)
|
|
|
|
|
|
เมื่อใช้ใบรับรอง X.509 ทั้งผู้ส่งและผู้รับจะมี public และ private key ของตัวเอง รวมถึงใบรับรอง X.509 ที่มี public key ทั้งคู่จะแลกเปลี่ยนใบรับรอง X.509 กัน โดยใช้ public key ของกันและกันเพื่อเข้ารหัสข้อมูลที่ส่ง และใช้ private key ของตัวเองเพื่อถอดรหัสข้อมูลที่ได้รับ
|
|
|
|
|
|

|
|
|
|
|
|
ข้อดีอย่างหนึ่งของการใช้ใบรับรอง X.509 คือสามารถแชร์ระหว่างอุปกรณ์ได้ คุณสามารถสร้างใบรับรองหนึ่งใบ อัปโหลดไปยัง IoT Hub และใช้สำหรับอุปกรณ์ทั้งหมดของคุณ อุปกรณ์แต่ละตัวเพียงแค่ต้องรู้ private key เพื่อถอดรหัสข้อความที่ได้รับจาก IoT Hub
|
|
|
|
|
|
ใบรับรองที่ใช้งานโดยอุปกรณ์ของคุณเพื่อเข้ารหัสข้อความที่ส่งไปยัง IoT Hub ถูกเผยแพร่โดย Microsoft เป็นใบรับรองเดียวกันที่บริการ Azure หลายแห่งใช้ และบางครั้งจะถูกรวมอยู่ใน SDKs
|
|
|
|
|
|
> 💁 จำไว้ว่า public key เป็นสิ่งที่เปิดเผยได้ - public key ของ Azure สามารถใช้เข้ารหัสข้อมูลที่ส่งไปยัง Azure เท่านั้น ไม่สามารถใช้ถอดรหัสได้ ดังนั้นจึงสามารถแชร์ได้ทุกที่ รวมถึงในโค้ดต้นฉบับ ตัวอย่างเช่น คุณสามารถดูได้ใน [Azure IoT C SDK source code](https://github.com/Azure/azure-iot-sdk-c/blob/master/certs/certs.c)
|
|
|
|
|
|
✅ มีคำศัพท์มากมายเกี่ยวกับใบรับรอง X.509 คุณสามารถอ่านคำจำกัดความของคำศัพท์บางคำที่คุณอาจพบได้ใน [The layman’s guide to X.509 certificate jargon](https://techcommunity.microsoft.com/t5/internet-of-things/the-layman-s-guide-to-x-509-certificate-jargon/ba-p/2203540?WT.mc_id=academic-17441-jabenn)
|
|
|
|
|
|
## สร้างและใช้ใบรับรอง X.509
|
|
|
|
|
|
ขั้นตอนในการสร้างใบรับรอง X.509 คือ:
|
|
|
|
|
|
1. สร้างคู่ public/private key หนึ่งในอัลกอริธึมที่ใช้กันอย่างแพร่หลายในการสร้างคู่ public/private key คือ [Rivest–Shamir–Adleman](https://wikipedia.org/wiki/RSA_(cryptosystem))(RSA)
|
|
|
|
|
|
1. ส่ง public key พร้อมข้อมูลที่เกี่ยวข้องเพื่อการลงนาม โดย CA หรือโดยการ self-sign
|
|
|
|
|
|
Azure CLI มีคำสั่งในการสร้าง device identity ใหม่ใน IoT Hub และสร้างคู่ public/private key พร้อมกับสร้างใบรับรองที่ self-signed โดยอัตโนมัติ
|
|
|
|
|
|
> 💁 หากคุณต้องการดูขั้นตอนโดยละเอียดแทนที่จะใช้ Azure CLI คุณสามารถค้นหาได้ใน [Using OpenSSL to create self-signed certificates tutorial in the Microsoft IoT Hub documentation](https://docs.microsoft.com/azure/iot-hub/tutorial-x509-self-sign?WT.mc_id=academic-17441-jabenn)
|
|
|
|
|
|
### งาน - สร้าง device identity โดยใช้ใบรับรอง X.509
|
|
|
|
|
|
1. รันคำสั่งต่อไปนี้เพื่อลงทะเบียน device identity ใหม่ พร้อมกับสร้าง key และใบรับรองโดยอัตโนมัติ:
|
|
|
|
|
|
```sh
|
|
|
az iot hub device-identity create --device-id soil-moisture-sensor-x509 \
|
|
|
--am x509_thumbprint \
|
|
|
--output-dir . \
|
|
|
--hub-name <hub_name>
|
|
|
```
|
|
|
|
|
|
แทนที่ `<hub_name>` ด้วยชื่อที่คุณใช้สำหรับ IoT Hub
|
|
|
|
|
|
คำสั่งนี้จะสร้างอุปกรณ์ที่มี ID เป็น `soil-moisture-sensor-x509` เพื่อแยกความแตกต่างจาก device identity ที่คุณสร้างในบทเรียนก่อนหน้า คำสั่งนี้ยังจะสร้างไฟล์ 2 ไฟล์ในไดเรกทอรีปัจจุบัน:
|
|
|
|
|
|
* `soil-moisture-sensor-x509-key.pem` - ไฟล์นี้มี private key สำหรับอุปกรณ์
|
|
|
* `soil-moisture-sensor-x509-cert.pem` - ไฟล์นี้เป็นไฟล์ใบรับรอง X.509 สำหรับอุปกรณ์
|
|
|
|
|
|
เก็บไฟล์เหล่านี้ให้ปลอดภัย! ไฟล์ private key ไม่ควรถูกเช็คอินในระบบควบคุมโค้ดสาธารณะ
|
|
|
|
|
|
### งาน - ใช้ใบรับรอง X.509 ในโค้ดอุปกรณ์ของคุณ
|
|
|
|
|
|
ทำตามคู่มือที่เกี่ยวข้องเพื่อเชื่อมต่ออุปกรณ์ IoT ของคุณกับคลาวด์โดยใช้ใบรับรอง X.509:
|
|
|
|
|
|
* [Arduino - Wio Terminal](wio-terminal-x509.md)
|
|
|
* [Single-board computer - Raspberry Pi/Virtual IoT device](single-board-computer-x509.md)
|
|
|
|
|
|
---
|
|
|
|
|
|
## 🚀 ความท้าทาย
|
|
|
|
|
|
มีหลายวิธีในการสร้าง จัดการ และลบบริการ Azure เช่น Resource Groups และ IoT Hubs วิธีหนึ่งคือ [Azure Portal](https://portal.azure.com?WT.mc_id=academic-17441-jabenn) - อินเทอร์เฟซบนเว็บที่ให้ GUI สำหรับจัดการบริการ Azure ของคุณ
|
|
|
|
|
|
ไปที่ [portal.azure.com](https://portal.azure.com?WT.mc_id=academic-17441-jabenn) และสำรวจพอร์ทัล ดูว่าคุณสามารถสร้าง IoT Hub โดยใช้พอร์ทัลได้หรือไม่ จากนั้นลบมัน
|
|
|
|
|
|
**คำแนะนำ** - เมื่อสร้างบริการผ่านพอร์ทัล คุณไม่จำเป็นต้องสร้าง Resource Group ล่วงหน้า สามารถสร้างได้เมื่อคุณกำลังสร้างบริการ อย่าลืมลบมันเมื่อคุณทำเสร็จแล้ว!
|
|
|
|
|
|
คุณสามารถค้นหาเอกสาร คู่มือ และคำแนะนำมากมายเกี่ยวกับ Azure Portal ได้ใน [Azure portal documentation](https://docs.microsoft.com/azure/azure-portal/?WT.mc_id=academic-17441-jabenn)
|
|
|
|
|
|
## แบบทดสอบหลังการบรรยาย
|
|
|
|
|
|
[Post-lecture quiz](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/20)
|
|
|
|
|
|
## ทบทวนและศึกษาด้วยตนเอง
|
|
|
|
|
|
* อ่านประวัติศาสตร์ของการเข้ารหัสใน [History of cryptography page on Wikipedia](https://wikipedia.org/wiki/History_of_cryptography)
|
|
|
* อ่านเกี่ยวกับใบรับรอง X.509 ใน [X.509 page on Wikipedia](https://wikipedia.org/wiki/X.509)
|
|
|
|
|
|
## งานที่ได้รับมอบหมาย
|
|
|
|
|
|
[สร้างอุปกรณ์ IoT ใหม่](assignment.md)
|
|
|
|
|
|
---
|
|
|
|
|
|
**ข้อจำกัดความรับผิดชอบ**:
|
|
|
เอกสารนี้ได้รับการแปลโดยใช้บริการแปลภาษา AI [Co-op Translator](https://github.com/Azure/co-op-translator) แม้ว่าเราจะพยายามให้การแปลมีความถูกต้องมากที่สุด แต่โปรดทราบว่าการแปลโดยอัตโนมัติอาจมีข้อผิดพลาดหรือความไม่ถูกต้อง เอกสารต้นฉบับในภาษาดั้งเดิมควรถือเป็นแหล่งข้อมูลที่เชื่อถือได้ สำหรับข้อมูลที่สำคัญ ขอแนะนำให้ใช้บริการแปลภาษามืออาชีพ เราไม่รับผิดชอบต่อความเข้าใจผิดหรือการตีความผิดที่เกิดจากการใช้การแปลนี้ |