2011-01-14 14 views
6

Me gustaría ejecutar un servlet en Jetty en un sitio HTTPS que requiere un certificado de cliente para solo una parte del sitio (URL específicas). Por ejemplo:Jetty requiere certificado de cliente SSL por URL

https://example.com/someservlet/public - ningún certificado de cliente requiere https://example.com/someservlet/protected - certificado de cliente requiere

En Apache puedo lograr esto mediante la especificación de SSLVerifyClient require dentro de un <Directory> o <Location> que obliga a Apache para renegociar la conexión SSL después de que la solicitud se hace .

No quiero ejecutar Jetty incrustado en nada más, solo de forma independiente. es posible? ¿Puede un servlet causar esto directamente de alguna manera? ¿Se puede hacer a través de la configuración?

Respuesta

3

Por lo que sé, solo puede especificar las opciones SSL por puerto.

Incluso si pudiera, la configuración que está tratando de lograr es problemática, ya que necesita la Renegociación de SSL, que ha sido modificada hace un año debido a una vulnerabilidad de seguridad. El nuevo método para realizar una SSLRenogitiation solo es compatible con clientes nuevos y, a veces, incluso si es compatible, no funciona debido a errores.

Mi recomendación para una solución fácil: configure Jetty para escuchar en dos puertos SSL: Por ejemplo en 443 sin autenticación de cliente HTTPS y en 8443 con autenticación de cliente HTTPS requerida. Luego, haga que su servlet protegido solo esté disponible en 8443. Esta no es una solución agradable, pero es 100% robusta, funciona con Jetty y con todos los clientes.

+1

En mi entorno, todos los clientes y servidores deben actualizarse (fueron algunas semanas divertidas mientras se producían los problemas de renegociación). Además, no se permitirá el uso de puertos no estándar a través de varios firewalls. – user63599

+0

unos meses más tarde, ¿alguien sabe de una solución que funcione con un solo puerto? –

Cuestiones relacionadas