Cách xử lý các kết nối http được mã hóa và không được mã hóa thông qua một cổng duy nhất


10

Xin vui lòng, hãy xem sơ đồ sau đây.

văn bản thay thế

Làm thế nào điều này nên làm việc?

  • Khi một yêu cầu từ xa http: // myhost.com:8080/*, yêu cầu sẽ được chuyển tiếp đến máy chủ http lắng nghe trên cổng 8008 của giao diện loopback. Đây là phần dễ dàng.

  • Khi người dùng từ xa yêu cầu http: // myhost.com:8080/specialurl ...

    • Chương trình hoạt động như một cổng cấp ứng dụng sẽ có thể nâng cấp kết nối lên phiên được mã hóa ( không thay đổi cổng )

    • Sau khi thiết lập phiên được mã hóa với trình duyệt từ xa, nó sẽ chuyển tiếp yêu cầu đến chương trình C nghe trên cổng 8000 của giao diện loopback

Câu hỏi của tôi là :

  1. Bạn đã bao giờ triển khai một giải pháp như thế này trên môi trường sản xuất chưa? Nếu bạn có...
  2. Sản phẩm nào bạn đã sử dụng để hoạt động như một cổng ứng dụng?
  3. Bạn có thể cung cấp một ví dụ cấu hình?

Hạn chế cứng :

  • Tôi không có quyền kiểm soát tường lửa và cổng duy nhất mà tôi có thể nhận lưu lượng truy cập bên ngoài vào máy chủ nội bộ là 8080. Số cổng không liên quan, điều duy nhất là chỉ có một cổng mở ở cấp tường lửa chuyển tiếp đến lưu lượng đến máy chủ nội bộ.
  • Máy chủ nội bộ phải chạy Linux (hiện tại nó đang chạy Debian Lenny)
  • Người dùng từ xa không cần gì nhiều hơn một trình duyệt web hiện tại và kết nối Internet để truy cập máy chủ này. Điều này có nghĩa là chuyển tiếp cổng ngược thông qua SSH không phải là một tùy chọn ở đây.
  • Tôi cần một sản phẩm đã được thử nghiệm trong sản xuất và có thể dễ dàng triển khai. Tôi không tìm cách phát triển cổng ứng dụng của riêng mình (nếu đó là trường hợp, tôi đoán tôi sẽ hỏi câu hỏi này tại Stack Overflow thay vì hỏi nó tại Server Fault).

Hạn chế mềm :

  • Tôi muốn tránh đặt Apache làm cổng ứng dụng (mặc dù tôi sẵn sàng làm điều đó nếu đó là lựa chọn khả thi duy nhất)
  • Nếu có thể, cổng ứng dụng phải là một sản phẩm phần mềm nguồn mở hoàn thiện.

Sản phẩm đã thử cho đến khi cổng ứng dụng (không thành công)

  • nginx
  • lighttpd
  • pao

RFC có liên quan

  • RFC2817 (... giải thích cách sử dụng cơ chế Nâng cấp trong HTTP / 1.1 để khởi tạo Bảo mật lớp vận chuyển (TLS) qua kết nối TCP hiện có. Điều này cho phép lưu lượng HTTP không bảo mật và được bảo mật để chia sẻ cùng một cổng được biết đến ...)
  • RFC2818 (... mô tả cách sử dụng TLS để bảo mật các kết nối HTTP qua Internet. Thực tế hiện tại là lớp HTTP qua SSL (tiền thân của TLS), phân biệt lưu lượng được bảo mật với lưu lượng không an toàn bằng cách sử dụng cổng máy chủ khác ... )

"Khi người dùng từ xa yêu cầu http: // myhost.com:8080/specialurl ... Chương trình hoạt động như một cổng cấp ứng dụng sẽ có thể nâng cấp kết nối lên phiên được mã hóa (không thay đổi cổng)" ... thế nào là Điều đó có thể về phía khách hàng? Trình duyệt máy khách có hỗ trợ chạy SSL thông qua một url không chứa https không?
Adam Brand

Xin chào Adam, và cảm ơn vì đã để lại bình luận của bạn. Sau khi yêu cầu myhost.com:8080/specialurl , trình duyệt sẽ được chuyển hướng đến myhost.com:8080/specialurl . Tôi không chắc chắn về các trình duyệt khác, nhưng các phiên bản gần đây của Opera và Firefox dường như hỗ trợ điều này mà không gặp vấn đề gì.
alemartini

Câu trả lời:


1

Một cổng để cai trị tất cả, cho thấy ai đó đã thực hiện nó trong thế giới java.

Bạn đã bao giờ triển khai một giải pháp như vậy trong một môi trường sản xuất?

Tôi đã không - tôi cũng không bao giờ khuyên bạn nên làm điều đó. Là một nhà tư vấn, tôi cố gắng khuyến khích khách hàng của mình sử dụng các công nghệ được tiêu chuẩn hóa và đã được chứng minh. Không có hệ thống nào thực hiện đúng các RFC đó ngoại trừ các trường hợp cạnh - và đó sẽ không phải là điều tôi muốn đề xuất hoặc hỗ trợ.


Xin chào Stan, và bạn cho phản hồi. Tôi không biết về Grizzly và thật không may, tôi không quen với Java. Bạn đã bao giờ triển khai một giải pháp như vậy trong một môi trường sản xuất? Sẽ thật tuyệt nếu bạn có thể chia sẻ một ví dụ cho thấy cách thực hiện. Cảm ơn một lần nữa, Alex.
alemartini

Ok, cảm ơn vì đã chỉnh sửa câu trả lời của bạn và thêm thông tin. Như bạn có thể thấy, giờ đây tôi đã thu hẹp câu hỏi của mình, nói rõ hơn rằng tôi đang tìm kiếm một sản phẩm trưởng thành. Chúng ta hãy xem nếu ai đó đưa ra một câu trả lời tốt cho câu hỏi này. Thật khó tin rằng Apache là ứng dụng duy nhất và duy nhất trên thế giới Linux hỗ trợ RFC2817. Nhưng nếu đó là trường hợp, hoặc nếu không có ai có kinh nghiệm trong thế giới thực khi triển khai một thứ như thế này với một sản phẩm khác, tôi nghĩ tôi sẽ không có lựa chọn nào khác ngoài việc cố gắng giải quyết vấn đề này với Apache.
alemartini

0

Apache sẽ không giúp bạn ở đây. Nó chỉ có thể lắng nghe các kết nối HTTP hoặc HTTPS (không phải cả hai) trên bất kỳ cổng nào.

Theo tôi biết, không có "sản phẩm trưởng thành" nào thực hiện chức năng này. Yêu cầu quản trị viên mạng của bạn đục lỗ cho bạn trong tường lửa hoặc thiết lập đường hầm VPN hoặc SSH đến điểm cuối bên ngoài nơi bạn có thể thiết lập nhiều cổng nghe.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.