Zum Inhalt springen

SQL Server Kerberos-Authentifizierung

Diese Anleitung beschreibt, wie man eine Datenbankquelle oder ein Ziel für die Authentifizierung bei Microsoft SQL Server mit Kerberos-Ticket-Cache-Authentifizierung (kinit) konfiguriert.

Hinweis

Diese Konfiguration wird nur für private Jitterbit-Agenten unterstützt.

Hinweis

Das Verhalten der Kerberos- und SQL Server-Authentifizierung kann je nach Microsoft Active Directory-Konfiguration, DNS-Auflösung, Netzwerk-Routing und anderen umgebungsspezifischen Faktoren variieren.

Voraussetzungen

Stellen Sie vor Beginn sicher, dass Folgendes vorhanden ist:

  1. Ein Jitterbit privater Agent.

  2. Netzwerkzugriff auf Folgendes:

  3. Ein gültiges Active Directory-Benutzerkonto.

  4. Ein Service Principal Name (SPN), der in Active Directory für SQL Server im folgenden Format konfiguriert ist:

     MSSQLSvc/<SQL_SERVER_HOST>:<PORT>
    

Schritt 1: DNS-Auflösung zum KDC sicherstellen

Kerberos erfordert eine ordnungsgemäße DNS-Auflösung, um den KDC zu finden.

Linux

In einigen Umgebungen müssen möglicherweise DNS-Einstellungen angepasst werden. Ersetzen Sie die folgenden Platzhalter durch Ihre Werte:

  • <AD_DNS_IP>: Der DNS-Server, der die Active Directory-Domäne auflösen kann.
  • <SECONDARY_DNS_IP>: Ein optionaler Fallback-DNS-Server.

Dies ist eine temporäre Konfiguration. Führen Sie diese Befehle jedes Mal aus, wenn der Container neu gestartet wird:

cat > /etc/resolv.conf <<EOF
nameserver <AD_DNS_IP>
nameserver <SECONDARY_DNS_IP>
EOF

Windows

Wenn das Gerät, auf dem der Windows-Agent ausgeführt wird, bereits derselben Domäne wie der KDC beigetreten ist, ist keine weitere Konfiguration erforderlich. Andernfalls fügen Sie die erforderlichen Einträge zu C:\Windows\System32\drivers\etc\hosts hinzu, damit das Gerät die Hostnamen des KDC und SQL Server auflösen kann.

Schritt 2: Kerberos-Client-Dienstprogramme installieren

Linux

Der Host des privaten Agenten muss über installierte Kerberos-Tools verfügen. Diese Tools sind erforderlich, um den Ticket-Cache zu erstellen und die KDC-Kommunikation sowie die Erstellung von Service-Tickets zu validieren.

Führen Sie die folgenden Befehle aus, um krb5-user zu installieren:

apt-get update
apt-get install krb5-user

Dies installiert Folgendes:

  • kinit
  • klist
  • Kerberos-Bibliotheken

Windows

Kerberos-Tools sind nativ auf Windows verfügbar. Falls sie nicht installiert sind, laden Sie sie von https://ist.mit.edu/mit-apps/kerberos-win herunter.

Schritt 3: DNS-Auflösung testen

Überprüfen Sie, ob der Agent den KDC-Hostnamen auflösen kann.

Linux

Führen Sie den folgenden Befehl aus, um DNS-Dienstprogramme zu installieren:

apt-get update
apt-get install dnsutils

Testen Sie dann die DNS-Auflösung:

nslookup <DOMAIN_CONTROLLER_HOSTNAME>

Beispiel

nslookup ad.dev.local

Windows

Führen Sie den folgenden Befehl aus, um die Namensauflösung zu testen:

ping <DOMAIN_CONTROLLER_HOSTNAME>

Beispiel

ping ad.dev.local

Falls die Auflösung fehlschlägt, funktioniert die Kerberos-Authentifizierung nicht.

Schritt 4: Kerberos-Konfigurationsdatei erstellen (krb5.conf)

Linux

Verwenden Sie den folgenden Befehl, um die Konfigurationsdatei unter /etc/krb5.conf zu erstellen oder zu bearbeiten:

vi /etc/krb5.conf

Beispielinhalt

[libdefaults]
default_realm = DEV.LOCAL
rdns = false
dns_lookup_kdc = false
dns_lookup_realm = false
[realms]
DEV.LOCAL = {
kdc = ad.dev.local
admin_server = ad.dev.local
}
[domain_realm]
.dev.local = DEV.LOCAL
dev.local = DEV.LOCAL

Windows

Erstellen Sie die Datei krb5.conf mit der oben gezeigten Struktur. Wählen Sie einen Speicherort, auf den der private Agent ohne erhöhte Berechtigungen zugreifen kann, z. B.:

C:\Jitterbit\kerberos

Konfigurationsparameter

[libdefaults]

  • default_realm: Der Name der Active Directory-Domäne in Großbuchstaben.
  • rdns = false: Verhindert Probleme bei der Reverse-DNS-Suche.
  • dns_lookup_kdc = false: Deaktiviert die automatische KDC-Erkennung über DNS.
  • dns_lookup_realm = false: Deaktiviert die automatische Realm-Erkennung über DNS.

[realms]

  • kdc: Der Hostname des Domänencontrollers.
  • admin_server: Der Domänencontroller für administrative Operationen.

[domain_realm]

Ordnet DNS-Domänen dem Kerberos-Realm zu.

Schritt 5: JAAS-Konfigurationsdatei erstellen

Die Kerberos-Authentifizierung erfordert eine JAAS-Konfigurationsdatei (Java Authentication and Authorization Service).

Linux

Führen Sie den folgenden Befehl aus, um das Verzeichnis zu erstellen:

mkdir -p /opt/jitterbit/kerberos

Führen Sie den folgenden Befehl aus, um die Konfigurationsdatei zu erstellen:

vi /opt/jitterbit/kerberos/jaas.conf

Beispielinhalt

com.sun.security.jgss.krb5.initiate {
com.sun.security.auth.module.Krb5LoginModule required
useTicketCache=true
useKeyTab=false
storeKey=false
isInitiator=true
doNotPrompt=true
renewTGT=false
debug=true
refreshKrb5Config=true;
};

SQLJDBCDriver {
com.sun.security.auth.module.Krb5LoginModule required
useTicketCache=true
useKeyTab=false
storeKey=false
isInitiator=true
doNotPrompt=true
renewTGT=false
debug=true
refreshKrb5Config=true;
};

Windows

Erstellen Sie die Datei jaas.conf mit der oben gezeigten Struktur. Wählen Sie einen Speicherort, auf den der private Agent ohne erhöhte Berechtigungen zugreifen kann, z. B.:

C:\Jitterbit\kerberos

JAAS-Parameterreferenz

  • useTicketCache=true: Verwendet das Kerberos-Ticket, das über kinit abgerufen wurde.
  • useKeyTab=false: Verwendet keine Keytab-Datei.
  • storeKey=false: Speichert keinen geheimen Schlüssel.
  • isInitiator=true: Konfiguriert diesen Client als Authentifizierungsinitiator.
  • doNotPrompt=true: Fordert kein Passwort an.
  • renewTGT=false: Erneuert das Ticket Granting Ticket (TGT) nicht automatisch.
  • debug=true: Aktiviert Kerberos-Debug-Protokolle. (Optional)
  • refreshKrb5Config=true: Lädt die Kerberos-Konfiguration dynamisch neu.

Dateiberechtigungen festlegen (nur Linux)

Die Kerberos-Authentifizierung erfordert ordnungsgemäße Dateiberechtigungen, um ordnungsgemäß zu funktionieren. Wenn die Dateien nicht lesbar sind, schlägt die Authentifizierung mit dem folgenden Fehler fehl:

Could not initialize class com.microsoft.sqlserver.jdbc.KerbAuthentication

Führen Sie die folgenden Befehle aus, um die erforderlichen Berechtigungen festzulegen:

chmod 644 /opt/jitterbit/kerberos/jaas.conf
chmod 644 /etc/krb5.conf
chmod 644 /tmp/krb5cc_agent

Schritt 6: Tomcat konfigurieren (setenv.sh)

Linux

Verwenden Sie den folgenden Befehl, um das Tomcat-Startskript unter /opt/jitterbit/tomcat/bin/setenv.sh zu öffnen:

vi /opt/jitterbit/tomcat/bin/setenv.sh

Beispielinhalt

#!/bin/sh
JAVA_OPTS="$JAVA_OPTS \
-Djava.security.krb5.conf=/etc/krb5.conf \
-Dsun.security.jgss.native=true \
-Djava.security.auth.login.config=/opt/jitterbit/kerberos/jaas.conf \
-Dsun.security.krb5.debug=true \
-Djavax.security.auth.useSubjectCredsOnly=false"

export KRB5CCNAME=/tmp/krb5cc_agent
export JAVA_OPTS

Windows

Für den Windows-Private-Agent müssen Sie keine setenv.sh-Datei erstellen. Fügen Sie stattdessen die oben gezeigten JAVA_OPTS-Parameter hinzu, indem Sie die Anweisungen unter Java-Optionen für private Agents konfigurieren befolgen.

Beachten Sie beim Festlegen von KRB5CCNAME den Pfad, da Sie ihn später in Schritt 8 beim Erstellen des Ticket-Cache erneut angeben müssen.

Wenn der Verbindungstest einen Fehler zurückgibt, der jgss oder gss erwähnt, versuchen Sie Folgendes:

  1. Entfernen Sie den Parameter -Dsun.security.jgss.native=true.
  2. Fügen Sie udp_preference_limit = 1 zum Abschnitt [libdefaults] von krb5.conf hinzu.
  3. Starten Sie den Agent neu, damit die Änderungen wirksam werden.

Parameterreferenz

  • java.security.krb5.conf: Der Pfad zur Kerberos-Konfigurationsdatei.
  • sun.security.jgss.native=true: Aktiviert die native Generic Security Services (GSS)-Implementierung.
  • java.security.auth.login.config: Der Pfad zur JAAS-Konfigurationsdatei.
  • sun.security.krb5.debug=true: Aktiviert Kerberos-Debug-Protokolle (optional).
  • javax.security.auth.useSubjectCredsOnly=false: Ermöglicht die Verwendung externer Anmeldeinformationen.

Schritt 7: Private Agent neu starten

Starten Sie den Private Agent nach jeder Konfigurationsänderung neu.

Linux

Führen Sie den folgenden Befehl aus, um den Agent neu zu starten:

sudo jitterbit restart

Wenn Sie einen Docker-Agent verwenden, starten Sie den Container neu:

docker restart <CONTAINER_NAME>

Wiederholen Sie nach dem Neustart Schritt 1.

Windows

Um den Windows-Private-Agent neu zu starten, verwenden Sie die während der Agent-Installation erstellten Shortcuts zum Beenden und Starten:

Stop Jitterbit Services
Start Jitterbit Services

Schritt 8: Kerberos-Ticket abrufen

Diese Konfiguration verwendet einen Kerberos-Ticket-Cache, der benutzerabhängig ist. Die folgenden Befehle erstellen einen Ticket-Cache, auf den Tomcat zur Laufzeit zugreift. Sie werden möglicherweise aufgefordert, ein Passwort einzugeben.

Linux

Führen Sie den folgenden Befehl aus, um den Ticket-Cache zu erstellen:

kinit -c /tmp/krb5cc_agent <USER>@<REALM>

Überprüfen Sie, ob das Ticket erstellt wurde:

klist -c /tmp/krb5cc_agent

Windows

Verwenden Sie unter Windows denselben Pfad, der für KRB5CCNAME in Schritt 6 angegeben ist.

Führen Sie den folgenden Befehl aus, um den Ticket-Cache zu erstellen:

kinit -c <TICKET_CACHE_PATH> <USER>@<REALM>

Überprüfen Sie, ob das Ticket erstellt wurde:

klist -c <TICKET_CACHE_PATH>

Wenn kein Ticket angezeigt wird, schlägt die Authentifizierung fehl.

Hinweis

Kerberos-Tickets verfallen. Führen Sie kinit erneut aus, um das Ticket bei Bedarf zu erneuern.

Schritt 9: Datenbankverbindung konfigurieren

Konfigurieren Sie die Datenbankquelle oder das Ziel mit den folgenden Einstellungen:

  1. Treibertyp: Wählen Sie JDBC.
  2. Treiber: Wählen Sie SQL Server MS JDBC.
  3. Aktivieren Sie unter Optionen das Kontrollkästchen Verbindungszeichenfolge manuell erstellen und geben Sie Folgendes ein:

    jdbc:sqlserver://<SQL_SERVER_HOST>:<PORT>;databaseName=<DATABASE>;integratedSecurity=true;authenticationScheme=JavaKerberos;encrypt=false
    

Konfigurieren Sie die Verbindungszeichenfolge mit den folgenden Werten:

  • <SQL_SERVER_HOST>: Der vollständig qualifizierte Domänenname (FQDN) des SQL Server.
  • <PORT>: Die SQL Server-Portnummer, normalerweise 1433.
  • <DATABASE>: Der Name der Zieldatenbank.
  • encrypt: Legen Sie je nach Ihrer Umgebung true oder false fest.
  • trustServerCertificate=true: Erforderlich bei Verwendung von Transport Layer Security (TLS) ohne vertrauenswürdige Zertifizierungsstelle (CA).