# รักษาความปลอดภัยให้กับอุปกรณ์ IoT ของคุณ ![ภาพสเก็ตโน้ตภาพรวมของบทเรียนนี้](../../../../../translated_images/lesson-10.829c86b80b9403bb770929ee553a1d293afe50dc23121aaf9be144673ae012cc.th.jpg) > สเก็ตโน้ตโดย [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 เดียวกับอุปกรณ์จริงแต่ส่งข้อมูลปลอม ![ทั้งอุปกรณ์จริงและอุปกรณ์ที่ถูกแฮกสามารถใช้ ID เดียวกันเพื่อส่งข้อมูลเทเลเมทรี](../../../../../translated_images/iot-device-and-hacked-device-connecting.e0671675df74d6d99eb1dedb5a670e606f698efa6202b1ad4c8ae548db299cc6.th.png) วิธีแก้ปัญหาคือการแปลงข้อมูลที่ส่งให้เป็นรูปแบบที่ถูกเข้ารหัส โดยใช้ค่าบางอย่างที่รู้เฉพาะอุปกรณ์และคลาวด์เท่านั้น กระบวนการนี้เรียกว่า *การเข้ารหัส* และค่าที่ใช้ในการเข้ารหัสข้อมูลเรียกว่า *คีย์การเข้ารหัส* ![หากใช้การเข้ารหัส ข้อความที่ถูกเข้ารหัสเท่านั้นที่จะได้รับการยอมรับ ข้อความอื่นๆ จะถูกปฏิเสธ](../../../../../translated_images/iot-device-and-hacked-device-connecting-encryption.5941aff601fc978f979e46f2849b573564eeb4a4dc5b52f669f62745397492fb.th.png) บริการคลาวด์สามารถแปลงข้อมูลกลับเป็นรูปแบบที่อ่านได้ โดยใช้กระบวนการที่เรียกว่า *การถอดรหัส* โดยใช้คีย์การเข้ารหัสเดียวกัน หรือ *คีย์การถอดรหัส* หากข้อความที่ถูกเข้ารหัสไม่สามารถถอดรหัสได้ด้วยคีย์ ข้อความนั้นจะถูกปฏิเสธ เทคนิคสำหรับการเข้ารหัสและถอดรหัสนี้เรียกว่า *การเข้ารหัสลับ (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 หากคุณสามารถเชื่อมต่อกับอุปกรณ์ของคุณเอง คุณก็สามารถเชื่อมต่อกับอุปกรณ์ของคนอื่นได้ เมื่อเชื่อมต่อแล้ว คุณอาจเข้าถึงข้อมูลส่วนตัวที่สำคัญ หรือควบคุมอุปกรณ์ของพวกเขาได้ > 💁 แม้จะมีความซับซ้อนของการเข้ารหัสในยุคปัจจุบันและคำกล่าวที่ว่าการถอดรหัสอาจใช้เวลาหลายพันล้านปี แต่การเพิ่มขึ้นของคอมพิวเตอร์ควอนตัมได้ทำให้เกิดความเป็นไปได้ในการถอดรหัสทั้งหมดในเวลาอันสั้น! ### คีย์แบบสมมาตรและอสมมาตร การเข้ารหัสมีสองประเภท - แบบสมมาตรและอสมมาตร **การเข้ารหัสแบบสมมาตร** ใช้คีย์เดียวกันในการเข้ารหัสและถอดรหัสข้อมูล ทั้งผู้ส่งและผู้รับต้องรู้คีย์เดียวกัน นี่เป็นประเภทที่ปลอดภัยน้อยที่สุด เนื่องจากคีย์ต้องถูกแชร์ในบางวิธี สำหรับผู้ส่งที่จะส่งข้อความที่เข้ารหัสไปยังผู้รับ ผู้ส่งอาจต้องส่งคีย์ให้ผู้รับก่อน ![การเข้ารหัสแบบสมมาตรใช้คีย์เดียวกันในการเข้ารหัสและถอดรหัสข้อความ](../../../../../translated_images/send-message-symmetric-key.a2e8ad0d495896ffcdf15d25bb4491c695a5cb851457b359fb0f0c89d67707c9.th.png) หากคีย์ถูกขโมยระหว่างการส่ง หรือผู้ส่งหรือผู้รับถูกแฮกและคีย์ถูกค้นพบ การเข้ารหัสสามารถถูกถอดรหัสได้ ![การเข้ารหัสแบบสมมาตรปลอดภัยเฉพาะเมื่อแฮกเกอร์ไม่ได้รับคีย์ - หากได้รับ พวกเขาสามารถดักจับและถอดรหัสข้อความได้](../../../../../translated_images/send-message-symmetric-key-hacker.e7cb53db1707adfb1486a8144060cb76435fe8dbdede8cecc09e7d15b2d9a251.th.png) **การเข้ารหัสแบบอสมมาตร** ใช้คีย์ 2 ชุด - คีย์สำหรับเข้ารหัสและคีย์สำหรับถอดรหัส ซึ่งเรียกว่าคู่คีย์สาธารณะ/ส่วนตัว คีย์สาธารณะใช้สำหรับเข้ารหัสข้อความ แต่ไม่สามารถใช้ถอดรหัสได้ คีย์ส่วนตัวใช้สำหรับถอดรหัสข้อความ แต่ไม่สามารถใช้เข้ารหัสได้ ![การเข้ารหัสแบบอสมมาตรใช้คีย์ที่แตกต่างกันในการเข้ารหัสและถอดรหัส คีย์สำหรับเข้ารหัสจะถูกส่งให้ผู้ส่งข้อความเพื่อเข้ารหัสข้อความก่อนส่งไปยังผู้รับที่เป็นเจ้าของคีย์](../../../../../translated_images/send-message-asymmetric.7abe327c62615b8c19805252af5d4b6c5e7aaeb8fbc455efeff866fe2d300b62.th.png) ผู้รับแชร์คีย์สาธารณะของพวกเขา และผู้ส่งใช้คีย์นี้เพื่อเข้ารหัสข้อความ เมื่อข้อความถูกส่ง ผู้รับจะถอดรหัสด้วยคีย์ส่วนตัวของพวกเขา การเข้ารหัสแบบอสมมาตรปลอดภัยมากกว่า เนื่องจากคีย์ส่วนตัวถูกเก็บเป็นความลับโดยผู้รับและไม่เคยถูกแชร์ คีย์สาธารณะสามารถถูกแชร์ให้ใครก็ได้ เนื่องจากสามารถใช้ได้เฉพาะการเข้ารหัสข้อความเท่านั้น การเข้ารหัสแบบสมมาตรเร็วกว่าแบบอสมมาตร แต่แบบอสมมาตรปลอดภัยกว่า บางระบบจะใช้ทั้งสองแบบ - ใช้การเข้ารหัสแบบอสมมาตรเพื่อเข้ารหัสและแชร์คีย์แบบสมมาตร จากนั้นใช้คีย์แบบสมมาตรเพื่อเข้ารหัสข้อมูลทั้งหมด วิธีนี้ทำให้การแชร์คีย์แบบสมมาตรระหว่างผู้ส่งและผู้รับปลอดภัยมากขึ้น และเร็วขึ้นเมื่อเข้ารหัสและถอดรหัสข้อมูล ## การรักษาความปลอดภัยให้อุปกรณ์ 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 ของตัวเองเพื่อถอดรหัสข้อมูลที่ได้รับ ![แทนที่จะแชร์ public key คุณสามารถแชร์ใบรับรองได้ ผู้ใช้ใบรับรองสามารถตรวจสอบว่าใบรับรองมาจากคุณโดยตรวจสอบกับ certificate authority ที่ลงนามใบรับรองนั้น](../../../../../translated_images/send-message-certificate.9cc576ac1e46b76eb58ebc8eedaa522566fa0700076da46f5180aad78c2435db.th.png) ข้อดีอย่างหนึ่งของการใช้ใบรับรอง 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 ``` แทนที่ `` ด้วยชื่อที่คุณใช้สำหรับ 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) แม้ว่าเราจะพยายามให้การแปลมีความถูกต้องมากที่สุด แต่โปรดทราบว่าการแปลโดยอัตโนมัติอาจมีข้อผิดพลาดหรือความไม่ถูกต้อง เอกสารต้นฉบับในภาษาดั้งเดิมควรถือเป็นแหล่งข้อมูลที่เชื่อถือได้ สำหรับข้อมูลที่สำคัญ ขอแนะนำให้ใช้บริการแปลภาษามืออาชีพ เราไม่รับผิดชอบต่อความเข้าใจผิดหรือการตีความผิดที่เกิดจากการใช้การแปลนี้