การเชื่อมต่อซ็อกเก็ตจากส่วนขยายของ Chrome ถูกบล็อกโดยพร็อกซี/ไฟร์วอลล์

ฉันมีเว็บแอปในจาวาสคริปต์ที่เชื่อมต่อกับซ็อกเก็ตโดยใช้ socket.io และส่วนขยายของ Chrome ซึ่งเชื่อมต่อในลักษณะเดียวกันและกับเซิร์ฟเวอร์เดียวกัน ทุกอย่างทำงานได้ดีในคอมพิวเตอร์ส่วนใหญ่และการเชื่อมต่ออินเทอร์เน็ต แต่คอมพิวเตอร์ของลูกค้าเครื่องหนึ่งไม่สามารถเชื่อมต่อส่วนขยาย Chrome ได้ (แอปพลิเคชันเว็บเชื่อมต่อได้สำเร็จ)

โดยการตรวจสอบคอนโซลของส่วนขยายสำหรับ background.js (สคริปต์ภายในส่วนขยายที่สร้างการเชื่อมต่อซ็อกเก็ต) ฉันเห็นว่าไม่ได้พยายามเชื่อมต่อกับ URL ที่ถูกต้อง (เซิร์ฟเวอร์ซ็อกเก็ตของฉัน) แต่ไปยัง URL ที่ไม่รู้จักซึ่งดูเหมือนว่าจะเป็นพร็อกซี: https://gateway.zscloud.net/auT?origurl=http%3A%2F%2Fmy_socket_server_domain...

เนื่องจากสิ่งนี้เกิดขึ้นเฉพาะในคอมพิวเตอร์เครื่องนั้น (จาก 10 เครื่องหรือเท่าที่ฉันได้ลองใช้มาจนถึงตอนนี้) โดยใช้การเชื่อมต่ออินเทอร์เน็ตที่แตกต่างกัน (เครือข่ายองค์กร เครือข่ายแขก ฮอตสปอตมือถือ) และเนื่องจากคอมพิวเตอร์เครื่องอื่นในเครือข่ายเดียวกันเหล่านั้น DID ประสบความสำเร็จในการเชื่อมต่อ ฉันถือว่ามีบางอย่างที่ติดตั้งหรือกำหนดค่าในคอมพิวเตอร์ที่มีปัญหากำลังรับคำขอเชื่อมต่อก่อนที่จะเกิดขึ้นและพยายามเปลี่ยนเส้นทางผ่านพรอกซี

ขอย้ำอีกครั้ง สิ่งนี้จะเกิดขึ้นเฉพาะในบริบทของส่วนขยายของ Chrome เท่านั้น คอมพิวเตอร์เครื่องเดียวกันที่ใช้การเชื่อมต่ออินเทอร์เน็ตเดียวกันจะประสบความสำเร็จในการเชื่อมต่อจากหน้าเว็บในเบราว์เซอร์เดียวกัน (Google Chrome)

ไม่มีใครรู้ว่าปัญหาอาจเกิดขึ้นได้อย่างไร? ลูกค้าไม่ทราบว่ามีซอฟต์แวร์รักษาความปลอดภัย (ไฟร์วอลล์ โปรแกรมป้องกันไวรัส ฯลฯ...) ที่อาจก่อให้เกิดปัญหานี้ แต่เป็นคอมพิวเตอร์ที่บริษัทของเขาจัดการ ดังนั้นผู้ดูแลระบบจึงสามารถดำเนินการดังกล่าวให้เขาได้ หากเป็นเช่นนั้น การเชื่อมต่อจากหน้าเว็บก็ไม่ควรถูกบันทึกด้วยใช่หรือไม่ มีอะไรเฉพาะสำหรับการเชื่อมต่อซ็อกเก็ตในส่วนขยายของ Chrome ที่แตกต่างจากเว็บแอปทั่วไปหรือไม่

ขอบคุณ!


person protozoo    schedule 17.08.2017    source แหล่งที่มา


คำตอบ (1)


การเชื่อมต่อ WebSocket แตกต่างจากคำขอ HTTP ปกติ พวกเขาต้องการการอัพเกรดโปรโตคอลหลังจากสร้างพรอกซี (บางตัว!) อาจไม่สามารถรองรับได้

ฉันอยู่หลังพร็อกซี (โปร่งใส) ตัวหนึ่งในที่ทำงาน อย่างไรก็ตาม มันไม่ได้พยายามสกัดกั้น HTTPS ซึ่งหมายความว่าฉันสามารถใช้ wss: WebSockets ได้ แต่ไม่ใช่ ws: WebSockets

..ซึ่งคุณก็ควรใช้อยู่ดี! ด้วย Let's Encrypt ในตลาด อุปสรรคในการเข้าสู่ HTTPS นั้นต่ำมาก หากข้อมูลที่ละเอียดอ่อนใดๆ ถูกส่งผ่านการเชื่อมต่อนั้น ก็จะเป็นประโยชน์สูงสุดแก่คุณ

โปรดทราบว่าพร็อกซีนั้นเป็นส่วนหนึ่งของ ZScaler ซึ่งเป็นโซลูชันด้านความปลอดภัย น่าเศร้าที่มี HTTPS MITM อยู่ด้วย ดังนั้นสิ่งที่กล่าวมาข้างต้นจึงไม่น่าจะแก้ปัญหาได้ (แต่ก็ควรนำไปใช้ต่อไป!) มันถูกตั้งค่าเป็นพร็อกซีระดับระบบปฏิบัติการ - หากการตั้งค่านั้นสามารถเปลี่ยนแปลงหรือแทนที่ด้วยการตั้งค่าพร็อกซีของ Chrome นั่นก็จะแก้ไขได้ อย่างไรก็ตาม นั่นจะทำให้ความปลอดภัยของเครือข่ายแย่ลง!

หากคุณไม่สามารถทำเช่นนั้นได้ แสดงว่าลูกค้าของคุณคือ SOL และควรร้องเรียนเกี่ยวกับโซลูชันด้านความปลอดภัยที่ทำลายแอปพลิเคชันที่ถูกกฎหมาย

แก้ไข: ฉันมองไปรอบๆ และพบสิ่งนี้ ซึ่งดูเหมือนว่าจะอ้างว่าการใช้ SSL (นั่นคือ wss:) ก็เพียงพอแล้ว แต่นั่นเป็นตั้งแต่ปี 2012 - บางทีก่อนที่ ZScaler จะสามารถ MITM การรับส่งข้อมูล HTTPS ทั้งหมด

ควรทดสอบได้ว่าสวิตช์ wss: จะทำงานโดยใช้ https://www.websocket.org/echo.html - หากสามารถ เชื่อมต่อ ได้ ทุกอย่างก็จะทำงานเกิน wss:

person Xan    schedule 17.08.2017
comment
ขออภัย ลืมตอบคำตอบของคุณ มันช่วยได้มาก ขอบคุณ! - person protozoo; 14.09.2017