9

我的应用程序需要对特定 URL 进行客户端身份验证,在客户端身份验证成功后,应用程序本身也会对客户端证书主题进行一些验证(使用 spring security x509 过滤器)。我想配置 tomcat 以强制客户端身份验证 (clientAuth=true) 用于特定 URL,但根据这篇文章,我似乎不能仅使用 tomcat 执行此操作 -仅为特定 URL 模式配置 tomcat 进行客户端身份验证

我的问题是,如果我使用 clientAuth=want,当服务器请求证书时,会如下所示:

  1. 如果设备有身份证书但不被tomcat truststoreFile中配置的CA信任,则不会通过证书,并且在spring安全过滤器中请求将失败(证书将为空)
  2. 如果设备具有在 tomcat truststoreFile 中配置的 CA 信任的身份证书,但该身份证书无效(不确定进行了哪些验证)或已过期,则身份验证将在 tomcat 中失败(在安全过滤器之前)或如选项 1 一样,没有证书将被通过并且请求将在spring安全过滤器中失败(证书将为空)

使用这种想要 + 安全过滤器的配置是否存在我可能会丢失的安全漏洞?我想问题是 - 如果证书最终从设备传递到服务器,服务器将始终验证它(未过期,受信任等),即使使用 clientAuth=want 并且如果证书是不允许客户端继续无效的?未通过证书的情况由将检查证书不为空的安全过滤器覆盖。

谢谢!

4

1 回答 1

6

您在 1. 和 2. 中的假设都是正确的。Tomcat 将不允许不受信任或无效的证书通过您的应用程序。如果您获得一个空证书,您可以假设没有通过任何证书,或者通过了不受信任/无效的证书。

在我正在处理的项目中,我们有与您相同的要求:仅限某些 URL 的客户端证书。我们通过实验发现了“clientAuth=want”的工作原理。

于 2013-12-02T18:59:56.697 回答