Я работаю над настройкой Tomcat 8.0.35 на Ubuntu 16.04 с Oracle Java 1.8.0_91-b14 (не openjdk
) для использования аутентификации Kerberos при аутентификации в нашей базе данных Microsoft SQL. Проблема, с которой я сталкиваюсь, заключается в том, что после запуска kinit
под соответствующим пользователем с соответствующими переключателями:
sudo -u tomcat8 kinit -k -t /etc/tomcat8/tomcat8.keytab HTTP/[email protected]
Я получаю эту ошибку в журнале localhost от Tomcat:
Caused by: GSSException: No valid credentials provided (Mechanism level: Fail to create credential. (63) - No service creds)
Caused by: KrbException: Fail to create credential. (63) - No service creds
Когда я бегу
sudo -u tomcat8 klist
Я получаю ожидаемый ответ:
root@linux-test2:/home/tbourne# sudo -u tomcat8 klist
Ticket cache: FILE:/tmp/krb5cc_111
Default principal: HTTP/[email protected]
Valid starting Expires Service principal
06/23/2016 14:33:10 06/24/2016 00:33:10 krbtgt/[email protected]
renew until 06/24/2016 14:33:07
Когда я захватываю пакеты во время запуска Tomcat, я вижу, что передается имя службы/экземпляра krbtgt/OUR.DOMAIN.LOCAL
. Я ожидал, что это будет упомянутый выше Default Principal. Когда я задаю опцию serverSpn
в строке подключения к базе данных, я получаю указанные выше результаты.
Когда я удаляю эту serverSpn
опцию, используется другое имя Principal . К сожалению, я не могу использовать это имя, так как мне понадобятся уникальные логины (и, следовательно, уникальные SPN) для каждого из наших экземпляров Tomcat.MSSQLSvc/[email protected]
Наша строка подключения к базе данных выглядит так:
property.db.driverClassName=com.microsoft.sqlserver.jdbc.SQLServerDriver
property.db.jdbcUrl=jdbc:sqlserver://sql-server.our.domain.local:1434;databaseName=DBAUTH2;integratedSecurity=true;authenticationScheme=JavaKerberos;serverSpn="HTTP/[email protected]"
Я загрузил драйвер Microsoft JDBC версии 4.2, и Tomcat его использует.
Я не понимаю, почему Tomcat не отправляет правильное имя принципала при аутентификации в базе данных. Любое понимание было бы очень ценно.
Я могу выложить конфигурации krb5.ini
для Tomcat, krb5.conf
, jaas.conf
и любые другие, если они будут полезны.
решение1
Файл конфигурации Kerberos ( /etc/krb5.conf
) чувствителен к регистру, и изменение default_realm
имени на нижний регистрвызовет эту проблему.