2011-01-14 119 views
6

我想在仅需要部分站点(特定URL)的客户端证书的HTTPS站点上的Jetty中运行Servlet。例如:Jetty需要通过URL的SSL客户端证书

https://example.com/someservlet/public - 无客户端证书所需 https://example.com/someservlet/protected - 客户端证书所需

在Apache中我可以通过指定SSLVerifyClient require一个<Directory><Location>这迫使Apache来重新协商SSL连接内完成这一任务的请求之后。

我不想在其他任何地方运行Jetty,只是单独运行。这可能吗? Servlet可以直接导致这种情况吗?可以通过配置完成吗?

回答

3

据我所知,您只能在每个端口的基础上指定SSL选项。

即使您尝试实现的配置有问题,因为它需要一年前因安全漏洞而更改的SSLRenegotiation。因此,执行SSLRenogitiation的新方法仅由较新的客户端支持,并且有时即使支持它也不会因为错误而起作用。

我对轻松解决方法的建议:将Jetty配置为侦听两个SSL端口: 例如,在没有HTTPS客户端验证的443上和需要使用HTTPS客户端验证的8443上。然后让受保护的servlet仅在8443上可用。这不是一个很好的解决方案,但是100%可靠,适用于Jetty和所有客户端。

+1

在我的环境中,所有客户端和服务器都必须更新(在发生问题时,这是一个有趣的几周)。此外,使用非标准端口将不允许通过各种防火墙。 – user63599 2011-01-15 00:59:08