在Tomcat中为每个服务启用相互SSL

时间:2012-11-06 08:15:12

标签: tomcat ssl tomcat7

我已经设法在客户端应用程序和Tomcat实例之间成功建立了相互SSL。但是,我现在正在寻找一种方法,只通过相互SSL公开Tomcat中部署的服务子集。虽然看起来可以使用APR配置(通过将“SSLVerifyClient”属性的值定义为“可选”),但我似乎无法找到在Tomcat中对SSL的JSSE实现执行相同操作的方法。感谢有关如何做到这一点的任何意见。

干杯, Prabath

1 个答案:

答案 0 :(得分:3)

(注意带有APR的SSLVerifyClient="optional"等同于带有JSSE连接器的clientAuth="want"。尽管是可选的,但这是在连接时协商的,而不是在服务器知道路径后重新协商。)

如果要仅对某些Web应用程序(或路径)使用客户端证书身份验证,则需要使用信任库配置连接器,但请保留clientAuth="false"

然后,在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映射到适当的角色。)