3

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

我在网上阅读了很多类似的问题,但我得出的结论与我需要的解决方案不符:

  1. 定义 2 个具有不同端口的连接器(一个启用了 clientAuth,一个不启用)并使用相关端口访问特定 URL ==> 此解决方案不好,因为如果黑客尝试使用另一个端口访问此 URL,他可以成功
  2. 在 web.xml 中定义传输保证(例如在 Tomcat 中为每个服务启用双向 SSL)==> 这也不好,因为我不想在某些领域定义用户,我只想让服务器请求客户端证书并验证它是可信且有效的。

有没有办法在不定义用户的情况下使用选项 2?或者也许是第三种选择?

提前致谢!

4

2 回答 2

1

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

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

并检查它的 CA。

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

于 2013-04-19T10:45:26.747 回答
1

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

于 2013-02-18T17:20:51.677 回答