我已经成功地在客户端应用程序和Tomcat实例之间成功设置了相互SSL。但是,我现在正在寻找一种仅公开通过相互SSL在Tomcat中部署的服务子集的方法。尽管看起来可以使用APR配置(通过将“ SSLVerifyClient”属性的值定义为“可选”),但我似乎找不到找到在Tomcat中使用SSL的JSSE实现方法的方法。感谢有关如何完成此操作的任何输入。
(请注意,SSLVerifyClient="optional"使用APR等效于clientAuth="want"使用JSSE连接器。尽管是可选的,但它是在连接时协商的,一旦服务器知道路径,就不会重新协商。)
SSLVerifyClient="optional"
clientAuth="want"
如果您只想对某些Web应用程序(或路径)使用客户端证书身份验证,则需要为连接器配置一个信任库,但是请离开clientAuth="false"。
clientAuth="false"
然后,在中WEB-INF/web.xml,您需要配置CLIENT-CERT身份验证。必要时,这将使用重新协商来请求客户端证书。配置如下所示:
WEB-INF/web.xml
CLIENT-CERT
<web-app> <display-name>My Webapp</display-name> <security-constraint> <web-resource-collection> <web-resource-name>App</web-resource-name> <url-pattern>/</url-pattern> </web-resource-collection> <auth-constraint> <role-name>cert</role-name> </auth-constraint> <user-data-constraint> <transport-guarantee>CONFIDENTIAL</transport-guarantee> </user-data-constraint> </security-constraint> <login-config> <auth-method>CLIENT-CERT</auth-method> </login-config> <security-role> <role-name>cert</role-name> </security-role> </web-app>
(在配置Tomcat用户时,还需要将用户的使用者DN映射到适当的角色。)