我的应用程序需要对特定 URL 进行客户端身份验证,在客户端身份验证成功后,应用程序本身也会对客户端证书主题进行一些验证(使用 spring security x509 过滤器)。我想配置 tomcat 以强制客户端身份验证 (clientAuth=true) 用于特定 URL,但根据这篇文章,我似乎不能仅使用 tomcat 执行此操作 -仅为特定 URL 模式配置 tomcat 进行客户端身份验证。
我的问题是,如果我使用 clientAuth=want,当服务器请求证书时,会如下所示:
- 如果设备有身份证书但不被tomcat truststoreFile中配置的CA信任,则不会通过证书,并且在spring安全过滤器中请求将失败(证书将为空)
- 如果设备具有在 tomcat truststoreFile 中配置的 CA 信任的身份证书,但该身份证书无效(不确定进行了哪些验证)或已过期,则身份验证将在 tomcat 中失败(在安全过滤器之前)或如选项 1 一样,没有证书将被通过并且请求将在spring安全过滤器中失败(证书将为空)
使用这种想要 + 安全过滤器的配置是否存在我可能会丢失的安全漏洞?我想问题是 - 如果证书最终从设备传递到服务器,服务器将始终验证它(未过期,受信任等),即使使用 clientAuth=want 并且如果证书是不允许客户端继续无效的?未通过证书的情况由将检查证书不为空的安全过滤器覆盖。
谢谢!