โดยส่วนใหญ่แล้ว http://localhost จะทำงานเหมือน HTTPS เพื่อวัตถุประสงค์ในการพัฒนา อย่างไรก็ตาม มีกรณีพิเศษบางกรณี เช่น ชื่อโฮสต์ที่กำหนดเองหรือการใช้คุกกี้ที่ปลอดภัยในเบราว์เซอร์ต่างๆ ซึ่งคุณต้องตั้งค่าเว็บไซต์เพื่อการพัฒนาซอฟต์แวร์อย่างชัดเจนให้ทำงานเหมือน HTTPS เพื่อแสดงวิธีการทำงานของเว็บไซต์ในเวอร์ชันที่ใช้งานจริงได้อย่างถูกต้อง (หากเว็บไซต์เวอร์ชันที่ใช้งานจริงไม่ได้ใช้ HTTPS ให้เปลี่ยนไปใช้ HTTPS เป็นอันดับแรก)
หน้านี้จะอธิบายวิธีเรียกใช้เว็บไซต์ในเครื่องด้วย HTTPS
ดูวิธีการโดยย่อได้ที่ข้อมูลอ้างอิงฉบับย่อของ mkcert**
เรียกใช้เว็บไซต์ในเครื่องด้วย HTTPS โดยใช้ mkcert (แนะนำ)
หากต้องการใช้ HTTPS กับเว็บไซต์การพัฒนาในเครื่องและเข้าถึง https://localhost หรือ https://mysite.example (ชื่อโฮสต์ที่กำหนดเอง) คุณต้องมีใบรับรอง TLS ที่ลงนามโดยนิติบุคคลที่อุปกรณ์และเบราว์เซอร์ของคุณเชื่อถือ ซึ่งเรียกว่าผู้ออกใบรับรอง (CA) ที่เชื่อถือได้
เบราว์เซอร์จะตรวจสอบว่าใบรับรองของเซิร์ฟเวอร์การพัฒนาได้รับการรับรองโดย CA ที่เชื่อถือได้หรือไม่ก่อนที่จะสร้างการเชื่อมต่อ HTTPS
เราขอแนะนำให้ใช้ mkcert ซึ่งเป็น CA ข้ามแพลตฟอร์มเพื่อสร้างและลงนามใบรับรอง ดูตัวเลือกอื่นๆ ที่เป็นประโยชน์ได้ที่เรียกใช้เว็บไซต์ในเครื่องด้วย HTTPS: ตัวเลือกอื่นๆ
ระบบปฏิบัติการหลายระบบมีไลบรารีสำหรับสร้างใบรับรอง เช่น openssl อย่างไรก็ตาม วิธีการเหล่านี้มีความซับซ้อนและเชื่อถือได้น้อยกว่า mkcert และไม่จำเป็นต้องเป็นแบบข้ามแพลตฟอร์ม ซึ่งทำให้ทีมนักพัฒนาซอฟต์แวร์ขนาดใหญ่เข้าถึงได้น้อยลง
ตั้งค่า
ติดตั้ง mkcert (ครั้งเดียวเท่านั้น)
ทำตามวิธีการติดตั้ง mkcert ในระบบปฏิบัติการของคุณ ตัวอย่างเช่น ใน macOS ให้ทำดังนี้
brew install mkcert brew install nss # if you use Firefoxเพิ่ม mkcert ไปยัง CA ระดับรูทในเครื่อง
เรียกใช้คำสั่งต่อไปนี้ในเทอร์มินัล
mkcert -installซึ่งจะสร้างผู้ออกใบรับรอง (CA) ในเครื่อง CA ในเครื่องที่สร้างโดย mkcert จะเชื่อถือได้ในเครื่องบนอุปกรณ์ของคุณเท่านั้น
สร้างใบรับรองสำหรับเว็บไซต์ของคุณที่ลงนามโดย mkcert
ในเทอร์มินัล ให้ไปที่ไดเรกทอรีรากของเว็บไซต์หรือไดเรกทอรีที่คุณต้องการเก็บใบรับรองไว้
จากนั้นเรียกใช้คำสั่งต่อไปนี้
mkcert localhostหากคุณใช้ชื่อโฮสต์ที่กำหนดเอง เช่น
mysite.exampleให้เรียกใช้คำสั่งต่อไปนี้mkcert mysite.exampleคำสั่งนี้จะทำ 2 อย่างต่อไปนี้
- สร้างใบรับรองสำหรับชื่อโฮสต์ที่คุณระบุ
- อนุญาตให้ mkcert ลงนามในใบรับรอง
ตอนนี้ใบรับรองของคุณพร้อมแล้วและได้รับการรับรองโดยผู้ออกใบรับรองที่เบราว์เซอร์ของคุณเชื่อถือในเครื่อง
กำหนดค่าเซิร์ฟเวอร์ให้ใช้ HTTPS กับใบรับรอง TLS ที่คุณเพิ่งสร้างขึ้น
รายละเอียดของวิธีดำเนินการจะขึ้นอยู่กับเซิร์ฟเวอร์ของคุณ ตัวอย่างเช่น
👩🏻💻 ด้วยโหนด
server.js(แทนที่{PATH/TO/CERTIFICATE...}และ{PORT}):const https = require('https'); const fs = require('fs'); const options = { key: fs.readFileSync('{PATH/TO/CERTIFICATE-KEY-FILENAME}.pem'), cert: fs.readFileSync('{PATH/TO/CERTIFICATE-FILENAME}.pem'), }; https .createServer(options, function (req, res) { // server code }) .listen({PORT});👩🏻💻 ด้วย http-server:
เริ่มเซิร์ฟเวอร์ดังนี้ (แทนที่
{PATH/TO/CERTIFICATE...})http-server -S -C {PATH/TO/CERTIFICATE-FILENAME}.pem -K {PATH/TO/CERTIFICATE-KEY-FILENAME}.pem-Sจะเรียกใช้เซิร์ฟเวอร์ด้วย HTTPS ส่วน-Cจะตั้งค่าใบรับรอง และ-Kจะตั้งค่าคีย์👩🏻💻 ด้วยเซิร์ฟเวอร์การพัฒนา React
แก้ไข
package.jsonดังนี้ และแทนที่{PATH/TO/CERTIFICATE...}"scripts": { "start": "HTTPS=true SSL_CRT_FILE={PATH/TO/CERTIFICATE-FILENAME}.pem SSL_KEY_FILE={PATH/TO/CERTIFICATE-KEY-FILENAME}.pem react-scripts start"ตัวอย่างเช่น หากคุณสร้างใบรับรองสำหรับ
localhostในไดเรกทอรีรากของเว็บไซต์ ให้ทำดังนี้|-- my-react-app |-- package.json |-- localhost.pem |-- localhost-key.pem |--...จากนั้นสคริปต์
startควรมีลักษณะดังนี้"scripts": { "start": "HTTPS=true SSL_CRT_FILE=localhost.pem SSL_KEY_FILE=localhost-key.pem react-scripts start"👩🏻💻 ตัวอย่างอื่นๆ
เปิด
https://localhostหรือhttps://mysite.exampleในเบราว์เซอร์เพื่อตรวจสอบอีกครั้งว่าคุณกำลังเรียกใช้เว็บไซต์ในเครื่องด้วย HTTPS คุณจะไม่เห็นคำเตือนใดๆ จากเบราว์เซอร์ เนื่องจากเบราว์เซอร์เชื่อถือ mkcert ในฐานะผู้ออกใบรับรองในเครื่อง
ข้อมูลอ้างอิงโดยย่อเกี่ยวกับ mkcert
วิธีเรียกใช้เว็บไซต์การพัฒนาในเครื่องด้วย HTTPS
-
ตั้งค่า mkcert
หากยังไม่ได้ติดตั้ง mkcert ให้ติดตั้ง เช่น ใน macOS ให้ทำดังนี้
brew install mkcert
ดูวิธีการสำหรับ Windows และ Linux ได้ที่ติดตั้ง mkcert
จากนั้นสร้างผู้ออกใบรับรองในเครื่องโดยทำดังนี้
mkcert -install -
สร้างใบรับรองที่เชื่อถือได้
mkcert {YOUR HOSTNAME e.g. localhost or mysite.example}
ซึ่งจะสร้างใบรับรองที่ถูกต้องซึ่ง mkcert จะลงนามโดยอัตโนมัติ
-
กำหนดค่าเซิร์ฟเวอร์การพัฒนาให้ใช้ HTTPS และใบรับรองที่คุณสร้างในขั้นตอนที่ 2
ตอนนี้คุณเข้าถึง https://{YOUR HOSTNAME} ในเบราว์เซอร์ได้แล้วโดยไม่มีคำเตือน
</div>
เรียกใช้เว็บไซต์ในเครื่องด้วย HTTPS: ตัวเลือกอื่นๆ
วิธีอื่นๆ ในการตั้งค่าใบรับรองมีดังนี้ โดยทั่วไปแล้ว วิธีเหล่านี้จะซับซ้อนหรือมีความเสี่ยงมากกว่าการใช้ mkcert
ใบรับรองแบบ Self-signed
นอกจากนี้ คุณยังเลือกที่จะไม่ใช้ผู้ออกใบรับรองในเครื่อง เช่น mkcert และลงนามในใบรับรองด้วยตนเองแทนได้ อย่างไรก็ตาม วิธีการนี้มีข้อเสียบางประการดังนี้
- เบราว์เซอร์ไม่เชื่อถือคุณในฐานะผู้ออกใบรับรอง ดังนั้นเบราว์เซอร์จะแสดงคำเตือนที่คุณต้องข้ามด้วยตนเอง ใน Chrome คุณสามารถใช้แฟล็ก
#allow-insecure-localhostเพื่อข้ามคำเตือนนี้โดยอัตโนมัติในlocalhost - ซึ่งไม่ปลอดภัยหากคุณทำงานในเครือข่ายที่ไม่ปลอดภัย
- ซึ่งไม่จำเป็นต้องง่ายหรือเร็วกว่าการใช้ CA ในเครื่องอย่าง mkcert
- ใบรับรองแบบ Self-signed จะไม่ทำงานในลักษณะเดียวกับใบรับรองที่เชื่อถือได้
- หากไม่ได้ใช้เทคนิคนี้ในบริบทของเบราว์เซอร์ คุณต้องปิดใช้การยืนยันใบรับรองสำหรับเซิร์ฟเวอร์ การลืมเปิดใช้ฟีเจอร์นี้อีกครั้งในเวอร์ชันที่ใช้งานจริงจะทำให้เกิดปัญหาด้านความปลอดภัย
หากคุณไม่ได้ระบุใบรับรอง ตัวเลือก HTTPS ของเซิร์ฟเวอร์การพัฒนาของ React และ Vue จะสร้างใบรับรองที่รับรองด้วยตนเองโดยอัตโนมัติ วิธีนี้ทำได้รวดเร็ว แต่ก็มาพร้อมกับคำเตือนของเบราว์เซอร์และข้อเสียอื่นๆ ของใบรับรองแบบ Self-signed โชคดีที่คุณสามารถใช้ตัวเลือก HTTPS ในตัวของเฟรมเวิร์กฟรอนท์เอนด์และระบุใบรับรองที่เชื่อถือได้ในเครื่องซึ่งสร้างขึ้นโดยใช้ mkcert หรือที่คล้ายกัน ดูข้อมูลเพิ่มเติมได้ที่ตัวอย่าง mkcert with React
หากคุณเปิดเว็บไซต์ที่ทำงานในเครื่องในเบราว์เซอร์โดยใช้ HTTPS เบราว์เซอร์จะตรวจสอบใบรับรองของเซิร์ฟเวอร์การพัฒนาในเครื่อง เมื่อเห็นว่าคุณได้ลงนามในใบรับรองด้วยตนเอง ระบบจะตรวจสอบว่าคุณได้ลงทะเบียนเป็นผู้ออกใบรับรองที่เชื่อถือได้หรือไม่ เนื่องจากคุณไม่ได้ใช้ใบรับรองดังกล่าว เบราว์เซอร์จึงไม่เชื่อถือใบรับรองและแสดงคำเตือนที่แจ้งว่าการเชื่อมต่อของคุณไม่ปลอดภัย ระบบจะยังคงสร้างการเชื่อมต่อ HTTPS หากคุณดำเนินการต่อ แต่คุณต้องยอมรับความเสี่ยงเอง
ใบรับรองที่ลงนามโดยผู้ออกใบรับรองทั่วไป
หรือจะใช้ใบรับรองที่ลงนามโดย CA อย่างเป็นทางการก็ได้ ซึ่งมาพร้อมกับข้อมูลแทรกต่อไปนี้
- คุณจะต้องตั้งค่ามากกว่าเมื่อใช้เทคนิค CA ในเครื่อง เช่น mkcert
- คุณต้องใช้ชื่อโดเมนที่ถูกต้องซึ่งคุณควบคุมอยู่ ซึ่งหมายความว่าคุณไม่สามารถใช้ CA อย่างเป็นทางการสำหรับสิ่งต่อไปนี้
localhostและชื่อโดเมนที่สงวนไว้อื่นๆ เช่นexampleหรือtest- ชื่อโดเมนที่คุณไม่ได้ควบคุม
- โดเมนระดับบนสุดไม่ถูกต้อง ดูข้อมูลเพิ่มเติมได้ที่รายการโดเมนระดับบนสุดที่ถูกต้อง
พร็อกซีแบบย้อนกลับ
อีกตัวเลือกหนึ่งในการเข้าถึงเว็บไซต์ที่ทำงานในเครื่องด้วย HTTPS คือการใช้พร็อกซีแบบย้อนกลับ เช่น ngrok ซึ่งมีความเสี่ยงดังต่อไปนี้
- ทุกคนที่คุณแชร์ URL พร็อกซีแบบย้อนกลับด้วยจะเข้าถึงเว็บไซต์การพัฒนาในเครื่องของคุณได้ ซึ่งจะเป็นประโยชน์สำหรับการสาธิตโปรเจ็กต์ให้ลูกค้าดู แต่อาจทำให้บุคคลที่ไม่ได้รับอนุญาตแชร์ข้อมูลที่ละเอียดอ่อนได้ด้วย
- บริการพร็อกซีแบบย้อนกลับบางรายการจะเรียกเก็บค่าบริการสำหรับการใช้งาน ดังนั้นราคาอาจเป็นปัจจัยหนึ่งในการเลือกบริการของคุณ
- มาตรการรักษาความปลอดภัยใหม่ในเบราว์เซอร์อาจส่งผลต่อวิธีการทำงานของเครื่องมือเหล่านี้
แจ้งว่าไม่เหมาะสม (ไม่แนะนำ)
หากคุณใช้ชื่อโฮสต์ที่กำหนดเอง เช่น mysite.example ใน Chrome คุณสามารถใช้แฟล็กเพื่อบังคับให้เบราว์เซอร์พิจารณาว่า mysite.example ปลอดภัย หลีกเลี่ยงการดำเนินการนี้เนื่องจากสาเหตุต่อไปนี้
- คุณต้องแน่ใจ 100% ว่า
mysite.exampleจะเปลี่ยนเส้นทางไปยังที่อยู่ภายในเครื่องเสมอ มิฉะนั้น คุณอาจเสี่ยงต่อการรั่วไหลของข้อมูลเข้าสู่ระบบเวอร์ชันที่ใช้งานจริง - แฟล็กนี้ใช้ได้เฉพาะใน Chrome คุณจึงแก้ไขข้อบกพร่องข้ามเบราว์เซอร์ไม่ได้
ขอขอบคุณผู้ตรวจสอบและผู้มีส่วนร่วมทุกคนสำหรับการมีส่วนร่วมและความคิดเห็น โดยเฉพาะ Ryan Sleevi, Filippo Valsorda, Milica Mihajlija และ Rowan Merewood 🙌