如何使用Tomcat7配置JNDI Realm以进行PKI用户证书身份验证



列表,

实际上,我已经就这个主题进行了广泛的搜索,a(我不知道如何配置一些东西,和/或b(我不太明白JNDI Realm到底应该做什么。我使用的是Tomcat 7.0.32和jdk 1.7.0_15。

这是我想做的。我与使用PKI用户证书的客户合作。用户证书有一个类似于"Joe Smith"的cn。我需要做的是在LDAP中查找这个CN,获取用户id,它可能类似于"jsmith23",并在请求标头中填充Principal用户。原因是我在Tomcat中部署了一个应用程序,它专门调用getRemoteUser((,并且必须正确填充此id(例如"jsmith23"(。这个应用程序有点像另一个第三方工具的web适配器,它会再次检查LDAP。但是,它必须是这个userid。

我尝试了很多方法,但似乎无法通过LDAP查找。在我的server.xml中,它看起来如下:

     <Connector port="443" protocol="org.apache.coyote.http11.Http11Protocol" SSLEnabled="true"
                   maxThreads="150" scheme="https" secure="true"
                   clientAuth="true" sslProtocol="TLS"
                   keystoreFile="c:/tomcat7/pki/keystore.jks" keystorePass="changeit"
                   truststoreFile="c:/tomcat7/pki/cacerts.jks" truststorePass="changeit" />
<Realm className="org.apache.catalina.realm.JNDIRealm" debug="99" 
                connectionURL="ldap://servername:3268"
                allRolesMode="authOnly" 
                connectionName="cn=DC Services,OU=Generic,OU=Users,OU=Managed Objects,DC=domain,DC=com" 
                connectionPassword="mypassword" 
                userBase="DC=domain,DC=com" 
                userSubtree="true" 
                userSearch="cn={0}" 
                userRoleName="memberOf" />

我的应用程序的web.xml文件如下所示:

<security-constraint>
    <web-resource-collection>
        <web-resource-name>ArcGIS Web Adapter</web-resource-name>
        <url-pattern>/*</url-pattern>
    </web-resource-collection>
    <auth-constraint>
        <role-name>*</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>
    <realm-name>ArcGIS Web Adapter</realm-name>
</login-config>
<security-role>
    <role-name>*</role-name>
</security-role>
<welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
</welcome-file-list>

我遇到的问题是,无论我尝试什么,我都会不断出现这个错误:

消息无法使用提供的凭据进行身份验证description此请求需要HTTP身份验证。

它会提示我输入证书,所以我知道它能通过。localhost日志文件显示:

FINE:Realm.authenticate((返回错误的

然而,我知道我连接正常,因为如果我更改密码,我根本无法访问该网站。

我想我的一个问题是JNDI领域设置的结果是什么。如果它在LDAP中查找用户名的CN,那么怎么办?这是为了提供继续使用我的web应用程序所需的身份验证吗?如果我将所有内容都更改为BASIC,并使用username/pwd进行身份验证,那么它就可以完美地工作。但是使用CLIENT-CERT和LDAP查找,我似乎无法实现我需要的

我需要一个进程,根据用户的证书CN查找用户的id,然后在http请求中填充Principal用户,以便稍后对getTemoteUser((的调用能够正常工作。

如有任何帮助,我们将不胜感激。

问题是org.apache.catalina.realm.JNDIRealm需要用户名和密码。当使用CLIENT-CERT进行身份验证时,org.apache.catalina.realm.RealmBase可以使用证书中的DN作为用户名,但无法获得JNDIRealm所需的密码。

Hi我有一个在Tomcat 6.0.18中工作的设置,但它在Tomcat 6.0.37上也有类似的问题。在这里查看我的帖子Tomcat6.0.37无法从LDAP中检索用户名来比较您的配置。希望能有所帮助。请让我知道这是否适用于您的Tomcat版本。。。

相关内容

  • 没有找到相关文章

最新更新