使用CLIENT-CERT保护tomcat 8.5中的webresource
我是tomcat新手,我使用Spring框架和Tomcat8.5编写了一些Web服务。我想用auth-type CLIENT-CERT保护特定的Web资源。我已将server.xml配置为使用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
<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将处理这些信息。无论如何,我找到了解决方案