Как настроить JNDI Realm с Tomcat 7 для аутентификации сертификата пользователя PKI?

Список,

Я на самом деле много обыскивал эту тему, и либо а) я не знаю, как что-то настроить, и / или б) я не совсем понимаю, что на самом деле должно делать Царство JNDI. Я использую Tomcat 7.0.32 с JDK 1.7.0_15.

Вот что я хочу сделать. Я работаю с клиентами, использующими PKI User Certificates. Пользовательские сертификаты имеют знак "Джо Смит". То, что мне нужно сделать, это посмотреть этот CN в LDAP и получить идентификатор пользователя, который может быть что-то вроде "jsmith23", и заполнить основного пользователя в заголовке запроса. Причина в том, что у меня есть приложение, развернутое в Tomcat, которое специально вызывает getRemoteUser(), и этот идентификатор (например, "jsmith23") должен быть заполнен правильно. Это приложение похоже на веб-адаптер для другого стороннего инструмента, который снова проверяет 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-аутентификация.

Он запрашивает у меня сертификат, поэтому я знаю, что все проходит. Файл журнала localhost показывает:

FINE: Realm.authenticate () вернул false

Тем не менее, я знаю, что подключаюсь правильно, потому что, если я изменю пароль, я вообще не смогу зайти на сайт.

Я предполагаю, что один из моих вопросов - каков результат настройки области JNDI. Если он ищет CN имени пользователя в LDAP, то что? Предполагается ли, что для доступа к моему веб-приложению необходима аутентификация? Если я изменю все на BASIC и использую имя пользователя /pwd для аутентификации, это работает отлично. Но используя CLIENT-CERT и используя поиск LDAP, я просто не могу достичь того, что мне нужно.

Мне нужен процесс, который ищет идентификатор пользователя на основе его сертификата CN, а затем заполняет основного пользователя в запросе http, чтобы последующий вызов getTemoteUser() работал правильно.

Любая помощь будет оценена.

2 ответа

Проблема заключается в org.apache.catalina.realm.JNDIRealm требует имя пользователя и пароль. При аутентификации с CLIENT-CERT, org.apache.catalina.realm.RealmBase может использовать DN из сертификата для имени пользователя, но не может получить пароль, который требуется для JNDIRealm,

Привет, у меня есть настройка, которая работает в Tomcat 6.0.18, но у Tomcat 6.0.37 такая же проблема, как и у вас. Проверьте мой пост здесь. Tomcat 6.0.37 не может получить имя пользователя из LDAP для сравнения вашей конфигурации. надеюсь что поможет. Пожалуйста, дайте мне знать, если это работает на вашей версии Tomcat...

Другие вопросы по тегам