2013-05-19 68 views
1

列表,如何使用Tomcat 7为PKI用户证书身份验证配置JNDI Realm?

我实际上在这个主题上进行了大量搜索,或者a)我不知道如何配置某些东西和/或b)我不太明白JNDI Realm究竟应该做什么。我正在使用Tomcat 7.0.32和jdk 1.7.0_15。

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

我尝试了很多事情,但似乎无法通过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> 

我的问题是,我不断收到此错误,不管我尝试什么:

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

它提示我申请我的证书,所以我知道通过了。本地主机日志文件显示:

FINE:Realm.authenticate()返回false

但是,我知道我是正确连接,因为如果我更改了密码,我不能打的部位都没有。

我想我的问题之一是JNDI领域设置的结果是什么。如果它在LDAP中查找用户名的CN,那么是什么?这是否假设提供进行我的Web应用程序所需的身份验证?如果我将所有内容都更改为BASIC并使用用户名/密码进行身份验证,则完美无缺。但是使用CLIENT-CERT并使用LDAP查找,我似乎无法达到我需要的。

我需要一个基于证书CN查找用户ID的进程,然后在http请求中填充Principal用户,以便稍后调用getTemoteUser()可以正常工作。

任何帮助,将不胜感激。

回答

0

嗨我有一个设置在Tomcat 6.0.18中的工作,但它在Tomcat 6.0.37上有类似的问题,因为你有。检查我的帖子Tomcat 6.0.37 can not retrieve username from LDAP比较你的配置。希望有所帮助。请让我知道如果您的Tomcat版本的工作...

1

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

相关问题