如何使用Tomcat 7为PKI用户证书身份验证配置JNDI Realm?
列表,如何使用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()可以正常工作。
任何帮助,将不胜感激。
嗨我有一个设置在Tomcat 6.0.18中的工作,但它在Tomcat 6.0.37上有类似的问题,因为你有。检查我的帖子Tomcat 6.0.37 can not retrieve username from LDAP比较你的配置。希望有所帮助。请让我知道如果您的Tomcat版本的工作...
问题是org.apache.catalina.realm.JNDIRealm
需要用户名和密码。当使用CLIENT-CERT
进行身份验证时,org.apache.catalina.realm.RealmBase
能够使用用户名证书中的DN
,但无法获取JNDIRealm
所需的密码。