为特定的URL模式配置tomcat以进行客户端身份验证

时间:2013-02-18 13:46:45

标签: authentication tomcat ssl client

我有一个应用程序,其中一些war文件都部署在同一个tomcat服务器上。我需要强制仅针对一个war上下文进行客户端身份验证,并且仅针对特定URL。

我在网上已经阅读了很多相关的问题,但我得出的结论并不符合我需要的解决方案:

  1. 定义2个具有不同端口的连接器(一个启用了clientAuth,另一个没有启用)并使用相关端口访问特定URL ==>这个解决方案并不好,因为如果黑客试图使用其他端口访问此URL,他就可以成功
  2. 在web.xml中定义transport-guarantee(例如Enabling mutual SSL per service in Tomcat)==>这也不好,因为我不想在某个领域定义用户,我只是希望服务器要求客户端证书并验证它是否可信且有效。
  3. 有没有办法在不定义用户的情况下使用选项2?或者可能是第三种选择?

    提前致谢!

2 个答案:

答案 0 :(得分:1)

您无法在纯Tomcat中执行此操作。最好的解决方案是在其前面放置一个Apache HTTP,它终止SSL连接,并且您可以在其中将SSL配置为您的内容,直到单个目录的级别。

答案 1 :(得分:1)

如果您想接受来自受信任CA的任何证书,只需将clientAuth="want"添加到Connector并编写过滤器以检查是否已发送证书。将该过滤器分配给所需的Web应用程序。在过滤器中,使用以下命令获取证书:

request.getAttribute("javax.servlet.request.X509Certificate");

并检查它是否为CA。

但请记住,来自该CA的任何证书都允许访问。如果这是一个公共CA,任何人都可以购买一个并访问您的应用程序。您应该始终检查DN,在Tomcat中通过定义用户或在过滤器中手动执行此操作。