Ich arbeite daran, Tomcat 8.0.35 auf Ubuntu 16.04 mit Oracle Java 1.8.0_91-b14 (nicht ) so einzurichten, openjdk
dass bei der Authentifizierung gegenüber unserer Microsoft SQL-Datenbank die Kerberos-Authentifizierung verwendet wird. Das Problem, auf das ich stoße, ist, dass nach der Ausführung kinit
als entsprechender Benutzer mit den entsprechenden Schaltern:
sudo -u tomcat8 kinit -k -t /etc/tomcat8/tomcat8.keytab HTTP/[email protected]
Ich erhalte diesen Fehler im Localhost-Protokoll von 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
Wenn ich laufe
sudo -u tomcat8 klist
Ich erhalte die erwartete Antwort:
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
Wenn ich beim Start von Tomcat Pakete erfasse, sehe ich, dass ein Dienst-/Instanzname übergeben wird krbtgt/OUR.DOMAIN.LOCAL
. Ich hatte erwartet, dass es sich dabei um den oben erwähnten Standard-Principal handelt. Wenn ich die serverSpn
Option in der Datenbankverbindungszeichenfolge einstelle, erhalte ich die oben genannten Ergebnisse.
Wenn ich die Option entferne serverSpn
, wird ein anderer Principal name verwendet . Leider kann ich diesen Namen nicht verwenden, da ich für jede unserer Tomcat-Instanzen eindeutige Logins (und damit eindeutige SPNs) benötige.MSSQLSvc/[email protected]
Unsere Datenbankverbindungszeichenfolge sieht folgendermaßen aus:
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]"
Ich habe den Microsoft JDBC-Treiber Version 4.2 heruntergeladen und Tomcat verwendet ihn.
Ich verstehe nicht, warum Tomcat bei der Authentifizierung gegenüber der Datenbank nicht den richtigen Hauptnamen sendet. Für jede Aufklärung wäre ich sehr dankbar.
Ich kann die krb5.ini
für Tomcat, die krb5.conf
, die jaas.conf
und alle anderen Konfigurationen posten, wenn sie hilfreich wären.
Antwort1
Die Kerberos-Konfigurationsdatei ( /etc/krb5.conf
) ist case-sensitiv und ändert den default_realm
Namen in Kleinbuchstabenwird dieses Problem verursachen.