วิธีจัดการการเชื่อมต่อ http ที่เข้ารหัสและไม่เข้ารหัสผ่านพอร์ตเดียว


10

โปรดดูแผนภาพต่อไปนี้

ข้อความแสดงแทน

งานนี้ควรทำยังไง?

  • เมื่อรีโมตร้องขอ http: // myhost.com:8080/* คำขอควรถูกส่งต่อไปยังเซิร์ฟเวอร์ http ที่รับฟังพอร์ต 8008 ของอินเตอร์เฟสลูปแบ็ค นี่คือส่วนที่ง่าย

  • เมื่อผู้ใช้ระยะไกลร้องขอ http: // myhost.com:8080/specialurl ...

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

    • หลังจากสร้างเซสชันที่เข้ารหัสด้วยเบราว์เซอร์ระยะไกลแล้วควรส่งต่อการร้องขอไปยังโปรแกรม C ที่ฟังพอร์ต 8000 ของอินเตอร์เฟสลูปแบ็ค

คำถามของฉันคือ :

  1. คุณเคยปรับใช้โซลูชันเช่นนี้ในสภาพแวดล้อมการผลิตหรือไม่? ถ้าคุณมี...
  2. ผลิตภัณฑ์ใดที่คุณใช้เพื่อทำหน้าที่เป็นเกตเวย์แอปพลิเคชัน
  3. คุณสามารถให้ตัวอย่างการกำหนดค่าได้หรือไม่

ข้อ จำกัด อย่างหนัก :

  • ฉันไม่สามารถควบคุมไฟร์วอลล์ได้และพอร์ตเดียวที่ฉันสามารถรับทราฟฟิกภายนอกเข้าสู่เซิร์ฟเวอร์ภายในได้คือ 8080 หมายเลขพอร์ตไม่เกี่ยวข้องสิ่งนี้คือมีพอร์ตเดียวที่เปิดในระดับไฟร์วอลล์ที่ส่งต่อขาเข้า การรับส่งข้อมูลไปยังเซิร์ฟเวอร์ภายใน
  • เซิร์ฟเวอร์ภายในต้องใช้งาน Linux (ขณะนี้กำลังเรียกใช้ Debian Lenny)
  • ผู้ใช้ระยะไกลไม่ต้องการอะไรมากไปกว่าเว็บเบราว์เซอร์ปัจจุบันและการเชื่อมต่ออินเทอร์เน็ตเพื่อเข้าถึงเซิร์ฟเวอร์นี้ ซึ่งหมายความว่าการส่งต่อพอร์ตย้อนกลับผ่าน SSH ไม่ใช่ตัวเลือกที่นี่
  • ฉันต้องการผลิตภัณฑ์ที่ได้รับการทดสอบในการผลิตและสามารถนำไปใช้ได้อย่างง่ายดาย ฉันไม่ต้องการพัฒนาแอปพลิเคชันเกตเวย์ของฉันเอง (ถ้าเป็นเช่นนั้นฉันเดาว่าฉันจะถามคำถามนี้ที่ Stack Overflow แทนที่จะถามที่ Server Fault)

ข้อ จำกัด ที่อ่อนนุ่ม :

  • ฉันต้องการหลีกเลี่ยงการวาง Apache เป็นเกตเวย์แอปพลิเคชัน (แม้ว่าฉันยินดีที่จะทำเช่นนั้นหากเป็นตัวเลือกที่เป็นไปได้เท่านั้น)
  • ถ้าเป็นไปได้แอพพลิเคชันเกตเวย์ควรเป็นผลิตภัณฑ์ซอฟต์แวร์โอเพ่นซอร์สที่สมบูรณ์

ผลิตภัณฑ์ที่ทดลองจนถึงแอปพลิเคชันเกตเวย์ (ไม่สำเร็จ)

  • Nginx
  • lighttpd
  • ปอนด์

RFC ที่เกี่ยวข้อง

  • RFC2817 (... อธิบายวิธีใช้กลไกการอัพเกรดใน HTTP / 1.1 เพื่อเริ่มต้น Transport Layer Security (TLS) ผ่านการเชื่อมต่อ TCP ที่มีอยู่ซึ่งจะช่วยให้การรับส่งข้อมูล HTTP ที่ไม่ปลอดภัยและมีความปลอดภัยในการแบ่งปันพอร์ตที่รู้จักกันดี ...
  • RFC2818 (... อธิบายถึงวิธีการใช้ TLS เพื่อรักษาความปลอดภัยการเชื่อมต่อ HTTP ผ่านอินเทอร์เน็ตแนวปฏิบัติในปัจจุบันคือการเลเยอร์ HTTP ผ่าน SSL (รุ่นก่อนถึง TLS) โดยแยกการรับส่งข้อมูลที่ปลอดภัยจากการรับส่งข้อมูลที่ไม่ปลอดภัยโดยการใช้พอร์ตเซิร์ฟเวอร์อื่น ... )

"เมื่อผู้ใช้รีโมตร้องขอ http: // myhost.com:8080/specialurl ... โปรแกรมที่ทำหน้าที่เป็นเกตเวย์ระดับแอปพลิเคชันควรจะสามารถอัพเกรดการเชื่อมต่อไปยังเซสชันที่เข้ารหัส (โดยไม่เปลี่ยนพอร์ต)" ... เป็นอย่างไร ที่เป็นไปได้ในฝั่งไคลเอ็นต์ เบราว์เซอร์ไคลเอนต์จะสนับสนุนการใช้ SSL ผ่าน URL ที่ไม่มี https หรือไม่
อดัมยี่ห้อ

สวัสดีอดัมและขอบคุณสำหรับการแสดงความคิดเห็นของคุณ หลังจากขอmyhost.com:8080/specialurlเบราว์เซอร์ที่ควรจะเปลี่ยนเส้นทางไปยังmyhost.com:8080/specialurl ฉันไม่แน่ใจเกี่ยวกับเบราว์เซอร์อื่น ๆ แต่ Opera และ Firefox เวอร์ชันล่าสุดดูเหมือนจะสนับสนุนสิ่งนี้โดยไม่มีปัญหา
alemartini

คำตอบ:


1

หนึ่งพอร์ตที่จะควบคุมมันทั้งหมดแสดงว่ามีบางคนนำมาใช้อย่างน้อยในโลกของจาวา

คุณเคยปรับใช้โซลูชันดังกล่าวในสภาพแวดล้อมการผลิตหรือไม่?

ฉันไม่ได้ - และฉันจะไม่แนะนำให้ทำ ในฐานะที่ปรึกษาฉันพยายามกระตุ้นให้ลูกค้าใช้เทคโนโลยีที่เป็นมาตรฐานและพิสูจน์แล้ว ดูเหมือนว่าไม่มีระบบใดที่จะติดตั้ง RFC เหล่านั้นอย่างถูกต้องยกเว้นกรณีขอบ - และนั่นจะไม่ใช่สิ่งที่ฉันอยากจะแนะนำหรือสนับสนุน


สวัสดีสแตนและขอขอบคุณสำหรับข้อเสนอแนะ ฉันไม่รู้จัก Grizzly และโชคไม่ดีที่ฉันไม่คุ้นเคยกับ Java คุณเคยปรับใช้โซลูชันดังกล่าวในสภาพแวดล้อมการผลิตหรือไม่? มันจะดีถ้าคุณสามารถแบ่งปันตัวอย่างที่แสดงวิธีการทำ ขอบคุณอีกครั้งอเล็กซ์
alemartini

ตกลงขอบคุณที่แก้ไขคำตอบของคุณและเพิ่มข้อมูลเพิ่มเติม อย่างที่คุณเห็นตอนนี้ฉันได้ จำกัด คำถามของฉันโดยระบุให้ชัดเจนยิ่งขึ้นว่าฉันกำลังมองหาผลิตภัณฑ์สำหรับผู้ใหญ่ เรามาดูกันว่ามีใครตอบคำถามที่ดีกับคนนี้ ยากที่จะเชื่อว่า Apache เป็นแอปพลิเคชั่นเดียวและตัวเดียวในโลก Linux ที่รองรับ RFC2817 แต่ถ้าเป็นเช่นนั้นหรือถ้าไม่มีใครมีประสบการณ์ในโลกแห่งความเป็นจริงในการปรับใช้ผลิตภัณฑ์นี้กับผลิตภัณฑ์อื่นฉันคิดว่าฉันจะไม่มีทางเลือกนอกจากจะพยายามแก้ปัญหานี้ด้วย Apache
alemartini

0

Apache จะไม่ช่วยคุณที่นี่ สามารถฟังได้เฉพาะการเชื่อมต่อ HTTP หรือ HTTPS (ไม่ใช่ทั้งคู่) ในพอร์ตที่กำหนด

เท่าที่ฉันรู้ไม่มี "ผลิตภัณฑ์สำหรับผู้ใหญ่" ซึ่งใช้ฟังก์ชั่นนี้ ให้ผู้ดูแลระบบเครือข่ายของคุณเจาะช่องโหว่อื่นในไฟร์วอลล์หรือตั้งค่าอุโมงค์ VPN หรือ SSH ไปยังจุดปลายทางภายนอกที่คุณสามารถตั้งค่าพอร์ตการฟังได้หลายพอร์ต

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