使用CLIENT-CERT保护tomcat 8.5中的webresource

使用CLIENT-CERT保护tomcat 8.5中的webresource,tomcat,spring-security,tomcat8,Tomcat,Spring Security,Tomcat8,我是tomcat新手,我使用Spring框架和Tomcat8.5编写了一些Web服务。我想用auth-type CLIENT-CERT保护特定的Web资源。我已将server.xml配置为 <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true" maxThreads="150" scheme="https" secure="true" clientAuth="false" ss

我是tomcat新手,我使用Spring框架和Tomcat8.5编写了一些Web服务。我想用auth-type CLIENT-CERT保护特定的Web资源。我已将server.xml配置为

        <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
        maxThreads="150" scheme="https" secure="true"
        clientAuth="false" sslProtocol="TLS"
        keystoreFile="<path>/TestServerp12.pfx"
        truststoreFile="<path>/truststore.jks"
        truststorePass="****"
        keystoreType="PKCS12"
        truststoreType="JKS"
        keystorePass="******" />

在web.xml中添加以下内容

    <security-constraint>
            <web-resource-collection>
                <web-resource-name>App</web-resource-name>
                <url-pattern>/authenticate/*</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>

    and below in tomcat users

    <role rolename="cert"/>
        <user username="EMAILADDRESS=testclient3@email.com, CN=TestClient3, OU=Test, O=MyO, L=TestL, ST=TestST, C=LA" password="null" roles="cert"/>

应用程序
/鉴定/*
还有一个问题

在上面的配置中,受保护的URL抛出403,所以我必须在web.xml中添加安全角色

    <security-constraint>
            <web-resource-collection>
                <web-resource-name>App</web-resource-name>
                <url-pattern>/authenticate/*</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>

    and below in tomcat users

    <role rolename="cert"/>
        <user username="EMAILADDRESS=testclient3@email.com, CN=TestClient3, OU=Test, O=MyO, L=TestL, ST=TestST, C=LA" password="null" roles="cert"/>

证书
下面是tomcat用户中的
添加此选项后,SSL握手成功,但用户名(客户端证书的区分名称)是硬编码的,这本质上意味着其他用户将无法访问它


在没有硬编码用户的情况下,如何在tomcat中启用CLIENT-CERT auth?

您可以在没有任何外部实用程序的情况下执行此操作。从你的问题上看,你不清楚你到底想做什么。您真正想要做的是将所有用户视为一个组,而不必明确地将每个用户放入该角色(例如,使用用户数据库)

这可以使用Tomcat的
allRolesMode
完成,您可以在中阅读


此技术适用于所有当前受支持的ApacheTomcat版本(6.0-9.0)。

无需任何外部实用程序即可完成此操作。从你的问题上看,你不清楚你到底想做什么。您真正想要做的是将所有用户视为一个组,而不必明确地将每个用户放入该角色(例如,使用用户数据库)

这可以使用Tomcat的
allRolesMode
完成,您可以在中阅读


此技术适用于所有当前支持的Apache Tomcat版本(6.0-9.0)。

您需要的是合法的用户数据库,而不是您配置的平面文件。您有哪些可用于身份验证数据库的功能?或者您是从零开始的?我是从零开始的,我遵循了在tomcat中配置SSL的方法。我有安装在机器上的客户端证书,当我点击受保护的Web服务时,浏览器会提示输入客户端证书。在tomcat日志中,我可以看到成功的SSL握手。您希望如何存储有效用户的身份?在关系数据库中?在LDAP中?很明显,你不想使用平面文件。。。那么你想用什么来代替呢?Tomcat可以使用许多后端存储来获取授权信息。由于客户端颁发的证书将具有相同的CA,所以keystore和truststore将处理这些信息。无论如何,我找到了解决方案,您需要的是合法的用户数据库,而不是您配置的平面文件。您有哪些可用于身份验证数据库的功能?或者您是从零开始的?我是从零开始的,我遵循了在tomcat中配置SSL的方法。我有安装在机器上的客户端证书,当我点击受保护的Web服务时,浏览器会提示输入客户端证书。在tomcat日志中,我可以看到成功的SSL握手。您希望如何存储有效用户的身份?在关系数据库中?在LDAP中?很明显,你不想使用平面文件。。。那么你想用什么来代替呢?Tomcat可以使用许多后端存储来获取授权信息。由于客户端颁发的证书将具有相同的CA,所以keystore和truststore将处理这些信息。无论如何,我找到了解决方案