2013-05-19 66 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所需的密碼。

相關問題