use*_*912 3 authentication ssl tomcat servlets x509
我正在Tomcat上部署一个webapp,最终应该成为一个提供多种服务的平台.有时我需要能够使用客户端证书对用户进行身份验证,但只有在访问某些servlet/url时,才能验证证书并读取某些属性.
我得出的结论是,仅使用Tomcat和jsp/servlets,就不可能只使用Web应用程序的一部分来请求客户端证书身份验证.它是每个地方每次请求用户证书的整个tomcat服务器(clientAuth true或want),或者对此方案无用的web.xml授权设置.
是否有框架,应用程序服务器或某些经过验证的架构我可以用它来实现这个需求?我想过可能有一个专门用于相互ssl身份验证的单独服务器实例,重定向用户和转发会话参数,但这个选项似乎相当复杂.我打赌有类似的解决方案,只是想知道是否有一些参考实施,指南,无论如何......谢谢.
我过去直接使用Tomcat,使用客户端证书重新协商完成了这项工作.对于较新版本的Tomcat,配置可能略有改变,但这是一个想法:
配置连接器以进行客户端身份验证:设置其信任存储参数,但使用clientAuth="false"
.这在Tomcat文档中有记录:
如果希望SSL堆栈在接受连接之前需要来自客户端的有效证书链,则设置为true.设置为想要SSL堆栈请求客户端证书,但如果没有呈现则不会失败.除非客户端请求受使用CLIENT-CERT身份验证的安全性约束保护的资源,否则false值(默认值)将不需要证书链.
在您的web.xml
文件中,使用以下内容:
<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>
Run Code Online (Sandbox Code Playgroud)
当然,请web-resource-collection
使用您需要的URL模式.
归档时间: |
|
查看次数: |
6500 次 |
最近记录: |