Tomcat 6.0.37 не может получить имя пользователя из LDAP

Я бился головой о стену. Я недавно обновил Tomcat с 6.0.18 до 6.0.37, чтобы исправить некоторые уязвимости в команде безопасности. Все работает нормально, кроме функции входа в CAC. Эта конфигурация работает нормально в 6.0.18, но не для 6.0.37(выдает ошибку HTTP500). Когда пользователь входит в систему с CAC, сайт запрашивает сертификат CAC, после того как пользователь выбирает свой сертификат, он регистрирует пользователя.

По сути, сайт получает сертификат от CAC и проходит аутентификацию с LDAP для получения имени пользователя из LDAP. Приложение использует имя пользователя для аутентификации пользователя и входа в систему.

Он должен получить доступ к /process.jsp для аутентификации имени пользователя. Однако в web.xml он установлен на (защищенная страница)

Пожалуйста, помогите указать мне правильное направление. Я действительно ценю.

Я просто не понимаю, почему это не работает в Tomcat 6.0.37. Есть ли новый конфиг, который нужно установить для Tomcat 6.0.37?

Ниже приведена конфигурация для Connector и JNDIRealm в файле server.xml:

<Connector port="443" 
    maxHTTPHeaderSize="8192" 
    allowUnsafeLegacyRenegotiation="true" 
    protocol="org.apache.coyote.http11.Http11Protocol" 
    SSLEnabled="true" 
    enableLookups="false" 
    disableUploadTimeout="true" 
    acceptCount="200" 
    maxThreads="150" 
    scheme="https" 
    secure="true" 
    keystoreFile="C:\Tomcat 6.0\cert\xxxx.keystore" 
    keystorePass="changeit" 
    truststoreFile="D:\Sun\SDK\jdk\jre\lib\security\cacerts" 
    truststorePass="changeit" 
    clientAuth="false" 
    sslProtocol="TLS" 
    ciphers="xxxxxxxxx" 
    address="0.0.0.0"/>



<Realm className="org.apache.catalina.realm.JNDIRealm"
    connectionURL="ldap://xxx.xx.xx.xxx/" 
    alternateURL="ldap://xxx.xx.xx.xxx/" 
    connectionName="CN=xxxxxx,OU=xxxx Accounts,OU=xxxxx,DC=xxxx,DC=xxxx,DC=local" connectionPassword="MyPassword" 
    authentication="simple" 
    referrals="follow" 
    userSubtree="true" 
    userBase="OU=xxxxx,DC=xxxx,DC=dhhq,DC=local" 
    userRoleName="xxx" 
    userSearch="(altSecurityIdentities={0})" roleBase="CN=xxxxxxx,OU=xxxxxx,OU=Accounts,DC=xxxx,DC=xxxx,DC=local" roleSubtree="true" 
    roleName="cn" 
    roleSearch="(member={0})" />

Конфигурация безопасности web.xml:

    <security-constraint>
           <web-resource-collection>
                <web-resource-name>Myapp</web-resource-name>
                <url-pattern>/process.jsp</url-pattern>
           </web-resource-collection>
        <auth-constraint>
        <role-name>User</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>TOMCATLDAP</realm-name>
        </login-config>
    <security-role>
        <role-name>User</role-name>
    </security-role>

1 ответ

Я наконец-то нашел способ обойти это, однако это не идеально... ограничение безопасности из web.xml как:

<security-constraint> 
<web-resource-collection> 
<web-resource-name>Myapp</web-resource-name> 
<!--url-pattern>/process.jsp</url-pattern--> 
</web-resource-collection> 
<auth-constraint> 
<role-name>User</role-name> 
</auth-constraint> 
<user-data-constraint> 
<transport-guarantee>CONFIDENTIAL</transport-guarantee> 
</user-data-constraint> 
</security-constraint> 

Он защищает страницу process.jsp, которая запускает смарт-карту для получения имени пользователя из AD, затем process.jsp может войти в систему пользователя. Основной причиной, по которой у меня были последние несколько дней, был process.jsp, а не доступ, поэтому проверка подлинности умереть, когда имя пользователя не может достичь process.jsp. Но если я удалю файл process.jsp (защищенная страница), то смарт-карта не получит триггер и имя пользователя вообще не будет.

Что я сделал, так это установил clientAuth="true" так, чтобы смарт-карта запускалась каждый раз, когда на страницах веб-сайта происходит доступ / щелчок, чтобы имя пользователя всегда возвращалось независимо от того, нужно ли оно; я также удаляю process.jsp, чтобы имя пользователя могло достигать process.jsp и делало все возможное, чтобы войти в систему. Это работает! Проблема в том, что теперь каждый клик на сайте запускает смарт-карту, и это очень раздражает.

Кто-нибудь знает, почему доступ к защищенной странице невозможен даже после проверки подлинности с помощью смарт-карты?(Это для Tomcat 6.0.37; нет проблем в 6.0.18, не уверен, что это ошибка или исправление безопасности...) ИЛИ вы можете предложить лучшая работа вокруг...

Спасибо! Ань

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