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, не уверен, что это ошибка или исправление безопасности...) ИЛИ вы можете предложить лучшая работа вокруг...
Спасибо! Ань