我正在尝试使Tomcat Web应用程序使用客户端证书身份验证进行传入连接。在server.xml中使用clientAuth = true时,一切工作正常,但是由于在同一服务器上运行的其他应用程序,我们不能在生产环境中使用它。
有没有一种方法可以形成web.xml文档,从而以与clientAuth = true相同的方式强制应用程序使用客户端证书?似乎使用CLIENT- CERT设置还要求您为要访问系统的每个证书设置一个tomcat用户帐户?我们需要能够允许来自特定CA(在服务器信任库中设置)的所有证书,其中主题与某些规则匹配(在实际应用程序中检查)。我希望以下类似的方法能够奏效,但是还没有运气!
<security-constraint> <web-resource-collection> <web-resource-name>Everything</web-resource-name> <url-pattern>/*</url-pattern> </web-resource-collection> <user-data-constraint> <transport-guarantee>CONFIDENTIAL</transport-guarantee> </user-data-constraint> </security-constraint> <login-config> <auth-method>CLIENT-CERT</auth-method> </login-config>
首先,听起来像是您想要的,clientAuth=want而不是clientAuth=true:它将允许客户端提供证书,但并非绝对需要证书。
clientAuth=want
clientAuth=true
当您使用任何形式的身份验证时,Tomcat(或与此相关的任何servlet容器)必须能够从中构建一个Principal对象- 具有名称(通常是用户名)的对象。然后,容器必须决定用户具有什么角色才能正确 授权 特定请求。因此,Tomcat将需要事先了解用户才能使授权工作。
Principal
另一方面,如果不需要任何授权,则可以设置clientAuth=want然后使用Filter来验证证书。CLIENT- CERT如果您已经在进行自己的检查,则无需使用身份验证。
Filter
CLIENT- CERT