2011-01-14 38 views
6

Tôi muốn chạy một servlet trong Jetty trên một trang web HTTPS yêu cầu chứng chỉ ứng dụng cho một phần của trang web (các URL cụ thể). Ví dụ:Cầu tàu yêu cầu chứng chỉ ứng dụng khách SSL theo URL

https://example.com/someservlet/public - không cert khách hàng cần https://example.com/someservlet/protected - khách hàng cert cần

Trong Apache tôi có thể thực hiện điều này bằng cách xác định SSLVerifyClient require bên trong một <Directory> hoặc <Location> mà lực lượng Apache để đàm phán lại các kết nối SSL sau khi yêu cầu được thực hiện .

Tôi không muốn chạy Jetty được nhúng trong bất kỳ thứ gì khác, chỉ độc lập. Điều này có thể không? Servlet có thể gây ra điều này trực tiếp bằng cách nào đó không? Nó có thể được thực hiện thông qua cấu hình?

Trả lời

3

Theo như tôi biết, bạn chỉ có thể chỉ định tùy chọn SSL trên cơ sở mỗi cổng.

Thậm chí nếu bạn có thể cấu hình bạn đang cố gắng đạt được là có vấn đề, vì nó cần SSLRenegotiation đã được thay đổi khoảng một năm trước vì một lỗ hổng bảo mật. Phương pháp mới để thực hiện SSLRenogitiation do đó chỉ được hỗ trợ bởi các máy khách mới hơn và đôi khi ngay cả khi nó được hỗ trợ thì nó không hoạt động do lỗi.

Đề xuất của tôi cho giải pháp dễ dàng: Định cấu hình Jetty để nghe trên hai cổng SSL: Ví dụ: 443 không có xác thực ứng dụng khách HTTPS và trên 8443 với yêu cầu xác thực ứng dụng khách HTTPS. Sau đó, làm cho servlet được bảo vệ của bạn chỉ có sẵn trên 8443. Đây không phải là một giải pháp tốt đẹp nhưng mạnh mẽ 100%, làm việc với Jetty và với tất cả các máy khách.

+1

Trong môi trường của tôi, tất cả khách hàng và máy chủ phải được cập nhật (đó là một vài tuần vui vẻ trong khi các vấn đề nổi loạn đang diễn ra). Ngoài ra, việc sử dụng các cổng không chuẩn sẽ không được cho phép thông qua các tường lửa khác nhau. – user63599

+0

một vài tháng sau đó, có ai biết về một giải pháp có thể hoạt động với một cổng không? –

Các vấn đề liên quan