Sollen Benutzer für Intranet Anwenungen per SSO authentifiziert werden, muss es nicht immer der IIS sein. Dank Kerberos und der flexiblen Authentifizierungsmodule im Apache, klappt auch hier die Anbindung. Häufig ist die Authentifizierung per Kerberos aber nur ein Teil der Anmeldung, Weitere Benutzerinformationen müssen im Fall der Anbindung ans Active Directory zusätzlich per LDAP(S) abgefragt werden. Für beide Zwecke muss im AD ein Proxy-Benutzer eingerichtet sein.
Anlegen eines Active Directory Proxy Benutzers
Der Benutzer sollte das Kennwort nicht ändern können und es sollte nie ablaufen. Wichtig ist desweiteren der Verschlüsselungsalgorithmus der für die Kerberos Keytab verwendet wird, hier z.B. AES-256. Als Kennwort kann ein langer zufälliger String verwendet werden, es wird nur noch einmal im nächsten Schritt verwendet.
Erstellen einer Kerberos Keytab
Die Kerberos Keytab repräsentiert das Passwort des Proxy-Benutzers und erlaubt die Authentifizierung am AD. Die Identität wird dabei an Hostnamen gebunden. Deshalb ist es wichtig, dass eine für den Webserver passende Keytab erstellt wird. Im Beispiel wird die SSO gesicherte Webseite unter webserver1.domain.com erreichbar sein.
ktpass -princ HTTP/webserver1.domain.com@DOMAIN.COM -mapuser idp@DOMAIN.COM -pass * -crypto AES256-SHA1 -ptype KRB5_NT_PRINCIPAL -out C:\webserver1.keytab -setupn
Die webserver.keytab Datei kan nun auf sicherem Wege auf den Webserver verschoben werden. Sie sollte dort nur vom Apache Prozess lesbar sein (z.B. chown root:www-data webserver1.keytab && chmod 640 webserver1.keytab).
Anlegen des ServicePrincipleNames für das Konto
Bei Windows verbindet der Service Principal Name die Kerberos Identität mit dem AD Konto.
setspn -s HTTP/webserver1.domain.com idp
Apache Konfiguration
Es gibt eine Reihe von Kerberos-Modulen für Apache das bestgepflegteste scheint mod_auth_gssapi zu sein. (Bei Debian im Paket libapache2-mod-auth-gssapi enhalten).
<Location "/sso.php"> AuthName "Benutzer mit Domainteil (getrennt durch @) in GROSSBUCHSTABEN - sollte auf 'DOMAIN.COM' enden" AuthType GSSAPI GssapiBasicAuth On GssapiCredStore keytab:/etc/krb5/webserver1.keytab Require valid-user </Location>
Sollte der Browser keine SPNEGO mit bestehender Session aushandeln können, bekommt der Benutzer ein Anmeldefenster für die HTTP Basic Authentifizierung.
Die Keytab auf mehreren Servern oder verschiedene Server in eienr Keytab
Soll eine weitere Keytab für einen anderen Webserver erstellt werden, so muss auf dem Domain Controller zunächst der SPN ergänzt werden:
setspn -s HTTP/webserver2.domain.com idp
setspn -L idp Registrierte Dienstprinzipalnamen (SPN) für CN=IDP proxy user,CN=Managed Service Accounts,DC=domain,DC=com: HTTP/webserver1.domain.com HTTP/webserver2.domain.comAnschließend kann eine weitere Keytab exportiert werden. Wichtig ist die Angabe -setpass (im Gegensatz zum Default +setpass) die dafür sorgt, dass die KVNO erhalten bleibt (kein geändertes Passwort und damit auch die erste Keytab gültig bleibt).
ktpass -princ HTTP/webserver2.domain.com@DOMAIN.COM -mapuser idp@DOMAIN.COM -pass * -crypto AES256-SHA1 -ptype KRB5_NT_PRINCIPAL -out C:\webserver2.keytab -setupn -setpassSollen stattdessen zwei Dienstidentitäten in einer Keytab gespeichert werden, so benutzt man die erste Keytab als Input:
ktpass -princ HTTP/webserver2.domain.com@DOMAIN.COM -mapuser idp@DOMAIN.COM -pass * -crypto AES256-SHA1 -ptype KRB5_NT_PRINCIPAL -out C:\webserver1.keytab -setupn -setpass -in C:\webserver.keytab
Keine Kommentare:
Kommentar veröffentlichen