WebSocket ด้วย SSL


117

เป็นไปได้ไหมที่จะมี WebSockets พร้อม HTTPS

เมื่อเปลี่ยนเป็น HTTPS WebSocket ของฉันจะส่งคืนข้อผิดพลาดด้านความปลอดภัยและทำงานได้อย่างสมบูรณ์กับ HTTP ปกติ

ด้านล่างนี้เป็นตัวอย่างข้อมูล

socket = new WebSocket("ws://my_www:1235"); 

แย่จังฉันรู้ว่าเซิร์ฟเวอร์ซ็อกเก็ต AIR ที่ฉันใช้ไม่ปลอดภัยฉันต้องเขียนใหม่เพื่อใช้ flash.net SecureSocket ...
Eric

คำตอบ:


172

การเชื่อมต่อ WebSocket เริ่มต้นชีวิตด้วยการจับมือ HTTP หรือ HTTPS เมื่อเข้าถึงเพจผ่าน HTTP คุณสามารถใช้ WS หรือ WSS (WebSocket secure: WS over TLS) อย่างไรก็ตามเมื่อเพจของคุณโหลดผ่าน HTTPS คุณสามารถใช้ได้เฉพาะ WSS เท่านั้น - เบราว์เซอร์ไม่อนุญาตให้ "ดาวน์เกรด" ความปลอดภัย


นั่นคือสิ่งที่ฉันมี แต่ฉันตระหนักว่าเซิร์ฟเวอร์ซ็อกเก็ต AIR ที่ฉันใช้ไม่ปลอดภัยฉันต้องเขียนใหม่เพื่อใช้ flash.net SecureSocket ...
Eric

Flash ก็มีปัญหาร้ายแรงเช่นกัน ... คุณกำลังสร้างเซิร์ฟเวอร์ WebSocket (ถ้าเป็นเช่นนั้นทำไม) หรือคุณกำลังสร้างแอป
Peter Moskovits

1
ฉันมีเซิร์ฟเวอร์ซ็อกเก็ต AIR ที่ใช้งานอยู่ใช่
Eric

ดังนั้นจะเลือก WSS ได้อย่างไรหากเพจไม่ได้โหลดด้วย HTTP?
anatoly techtonik

30

คุณไม่สามารถใช้ WebSockets ผ่าน HTTPS แต่คุณสามารถใช้ WebSockets ผ่าน TLS ได้ (HTTPS คือ HTTP ผ่าน TLS) เพียงใช้ "wss: //" ใน URI

ฉันเชื่อว่า Firefox เวอร์ชันล่าสุดจะไม่อนุญาตให้คุณใช้ WebSockets ที่ไม่ใช่ TLS จากหน้า HTTPS แต่การย้อนกลับไม่น่าจะเป็นปัญหา


แล้วทางออกคืออะไร? ฉันมีเซิร์ฟเวอร์ WS ที่ทำงานผ่าน http ตอนนี้ฉันซื้อ SSL และเบราว์เซอร์ไม่อนุญาตให้ฉันเชื่อมต่อกับ WS อีกต่อไป ฉันเปลี่ยน WS เป็น WSS: // และตอนนี้มันไม่ได้เชื่อมต่อกับ WebSocket
muaaz

@muaaz เซิร์ฟเวอร์ WebSocket ของคุณควรทำงานในโหมด WSS และควรโหลดด้วยใบรับรอง / คีย์ SSL เดียวกันกับเว็บเซิร์ฟเวอร์ของคุณที่ให้บริการหน้าเว็บต้นทางของคุณซึ่งพยายามเชื่อมต่อกับเซิร์ฟเวอร์ websocket
kanaka

4
ขอบคุณ. BTW ฉันได้เพียงแค่แก้ไขได้โดย Proxying (ใช้ Apache) การร้องขอจากไปwss:// ws://ดังนั้นฉันจึงใช้wss://ws.domain.comและ apache ใช้พร็อกซีกับมันและขอเปลี่ยนเส้นทางที่เซิร์ฟเวอร์ WS กำลังทำงานอยู่ เช่น: ws://10.12.23.45:5641/server.php. และฉันรู้ว่ามันเป็นวิธีแก้ปัญหาที่แย่มาก - แม้ว่ามันจะได้ผลสำหรับฉัน ขอขอบคุณสำหรับความช่วยเหลือหากคุณแนะนำฉันเกี่ยวกับการกำหนดค่า apache เช่นจะใส่ที่ไหน.certเป็นต้นขอบคุณ!
muaaz

@muaaz ขอโทษฉันไม่ทราบการกำหนดค่า apache นอกเหนือจาก googling ด้วยตัวเอง
kanaka

21

ข้อแม้เพิ่มเติม 1 ข้อ (นอกเหนือจากคำตอบโดย kanaka / peter): หากคุณใช้ WSS และเบราว์เซอร์ไม่ยอมรับใบรับรองเซิร์ฟเวอร์คุณอาจไม่ได้รับกล่องโต้ตอบการแสดงผลของเบราว์เซอร์ใด ๆ (เช่นเดียวกับที่เกิดขึ้นกับหน้าเว็บ) เนื่องจาก WebSockets ถือว่าเป็นสิ่งที่เรียกว่า "แหล่งข้อมูลย่อย" และการยอมรับใบรับรอง / ข้อยกเว้นด้านความปลอดภัย / กล่องโต้ตอบใด ๆ ที่ไม่แสดงผลสำหรับแหล่งข้อมูลย่อย


แม้ว่าจะเป็นใบรับรองเดียวกับใบรับรองที่ใช้สำหรับ HTTPS?
vekah

1
"กล่องโต้ตอบที่แสดงผลของเบราว์เซอร์" หมายความว่าอย่างไร ชอบalert()?
Ivan Perevezentsev

2
กล่องโต้ตอบที่เกิดขึ้นเองภายในเบราว์เซอร์ (ไม่ใช่เพจ) เช่น "ใบรับรองนี้ไม่ถูกต้องคุณต้องการดำเนินการต่อหรือไม่"
oberstet

มีวิธีเอาชนะสิ่งนี้ไหม หากฉันใช้ใบรับรองที่ลงนามด้วยตนเองฉันจะยังใช้ websocket ได้หรือไม่
OhadR
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.