一尘不染

在不指定用户名的情况下对Tomcat使用CLIENT-CERT

tomcat

我正在尝试使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>

阅读 504

收藏
2020-06-16

共1个答案

一尘不染

首先,听起来像是您想要的,clientAuth=want而不是clientAuth=true:它将允许客户端提供证书,但并非绝对需要证书。

当您使用任何形式的身份验证时,Tomcat(或与此相关的任何servlet容器)必须能够从中构建一个Principal对象-
具有名称(通常是用户名)的对象。然后,容器必须决定用户具有什么角色才能正确 授权 特定请求。因此,Tomcat将需要事先了解用户才能使授权工作。

另一方面,如果不需要任何授权,则可以设置clientAuth=want然后使用Filter来验证证书。CLIENT- CERT如果您已经在进行自己的检查,则无需使用身份验证。

2020-06-16