Schäuffelhut Berger – Software Engineering
DE|EN

← Alle Beiträge

· Matthias C. Berger

Single Sign-On mit Apache unter Windows: Anleitung für Windows Server 2022 und 2025

Ihre Anwender sind am Windows-Rechner in der Domäne angemeldet, und die Webanwendung auf Ihrem Apache soll sie ohne weitere Passwortabfrage erkennen. Unter Linux erledigt das das Modul mod_auth_kerb. Für Apache unter Windows gibt es kein fertiges Kerberos-Modul, deshalb haben wir es portiert: mod_auth_kerb für Windows.

Diese Anleitung zeigt die Einrichtung mit der aktuellen Version 2.0 auf Windows Server 2022 oder 2025 mit Apache 2.4 von Apache Lounge. Sie ersetzt unsere Anleitung von 2014 für Apache 2.2. Version 2.0 erscheint Mitte November 2026.

Die Umgebung

In den Beispielen stehen Platzhalter, die Sie durch Ihre Namen ersetzen:

PlatzhalterBedeutung
EXAMPLE.COMIhr Kerberos-Realm, also der Name Ihrer AD-Domäne in Großbuchstaben
example.comIhre DNS-Domäne
dc1.example.comein Domain Controller (Windows Server 2016 bis 2025)
web.example.comder Name des Webservers, wie er in der Adresszeile des Browsers steht
svc-webdas Dienstkonto für den Webserver

Der Webserver braucht Zugriff auf den Domain Controller (Port 88), und seine Uhr darf höchstens fünf Minuten von der des Domain Controllers abweichen.

1. Dienstkonto im Active Directory anlegen

Legen Sie im Active Directory ein Benutzerkonto für den Webserver an, zum Beispiel svc-web:

  • „Kennwort läuft nie ab“ aktivieren, „Benutzer muss Kennwort bei der nächsten Anmeldung ändern“ deaktivieren.
  • Unter „Konto“ die Option „Dieses Konto unterstützt Kerberos AES 256-Bit-Verschlüsselung“ aktivieren.
  • Nur wenn die Anwendung mit den Tickets der Anwender weiterarbeiten soll (KrbSaveCredentials, siehe unten): unter „Delegierung“ das Konto für die Delegierung vertrauen.

2. Keytab erzeugen

Das Keytab enthält den Schlüssel, mit dem Apache die Kerberos-Tickets der Browser prüft. Erzeugen Sie es auf einem Domain Controller als Domänen-Administrator:

ktpass /out krb5.keytab ^
       /princ HTTP/web.example.com@EXAMPLE.COM ^
       /mapuser EXAMPLE\svc-web ^
       /pass * ^
       /crypto AES256-SHA1 ^
       /ptype KRB5_NT_PRINCIPAL
  • web.example.com ist der Name, unter dem die Anwender den Server im Browser aufrufen. Stimmt er nicht mit dem Principal überein, gibt es kein Single Sign-On.
  • /pass * fragt das Kennwort ab, statt es in die Kommandozeile zu schreiben.
  • Verwenden Sie AES, nicht RC4 wie in älteren Anleitungen.

Das Keytab ist so vertraulich wie ein Kennwort. Lesen dürfen es nur Administratoren und das Konto, unter dem Apache läuft (standardmäßig LocalSystem).

3. Apache und das Modul installieren

Voraussetzungen auf dem Webserver:

  • Apache httpd 2.4 x64 von Apache Lounge, VS18-Build
  • das aktuelle Visual C++ Redistributable (x64), wie von Apache Lounge verlangt

Die Beispiele gehen von Apache in C:\Apache24 aus. Kopieren Sie aus dem Paket von mod_auth_kerb 2.0:

Aus dem PaketNach
bin\*.dllC:\Apache24\bin\
bin\pluginsC:\Apache24\bin\plugins
modules\mod_auth_kerb.soC:\Apache24\modules\

Die Kerberos-Bibliotheken (MIT Kerberos 1.22) liegen damit neben httpd.exe. Eine separate Installation von „MIT Kerberos for Windows“ ist nicht nötig. Wenn Sie von Version 1.x kommen: KfW deinstallieren, den Server neu starten, dann die Dateien kopieren. httpd.conf, krb5.ini und Keytab bleiben, wie sie sind.

Kopieren Sie das Keytab aus Schritt 2 nach C:\Apache24\conf\krb5.keytab.

4. Kerberos konfigurieren

Die Kerberos-Konfiguration liegt in C:\ProgramData\MIT\Kerberos5\krb5.ini (C:\ProgramData ist versteckt, aber vorhanden):

[libdefaults]
    default_realm = EXAMPLE.COM
    dns_lookup_kdc = true
    rdns = false

[realms]
    EXAMPLE.COM = {
        kdc = dc1.example.com
    }

[domain_realm]
    .example.com = EXAMPLE.COM

5. Apache konfigurieren

In C:\Apache24\conf\httpd.conf:

LoadModule auth_kerb_module modules/mod_auth_kerb.so

<Location /secure>
    AuthType Kerberos
    AuthName "Anmeldung"
    KrbMethodNegotiate On
    KrbMethodK5Passwd On
    KrbAuthRealms EXAMPLE.COM
    Krb5Keytab conf/krb5.keytab
    KrbServiceName Any
    Require valid-user
</Location>
  • KrbMethodNegotiate On: Single Sign-On für Anwender, die in der Domäne angemeldet sind.
  • KrbMethodK5Passwd On: Wer kein Ticket mitbringt (etwa ein Mac außerhalb der Domäne oder ein Skript), kann sich mit Benutzername und Kennwort anmelden. Das Modul prüft beides am Domain Controller. Verwenden Sie das nur über HTTPS, denn bei der Basic-Anmeldung geht das Kennwort unverschlüsselt über die Leitung.
  • KrbServiceName Any: Apache akzeptiert jeden Schlüssel im Keytab.

Prüfen und starten:

C:\Apache24\bin\httpd.exe -t
net start Apache2.4

Im Error-Log von Apache steht danach mod_auth_kerb/5.4-sbg2.0 in der Versionszeile.

6. Testen

Eine Testseite C:\Apache24\htdocs\secure\index.php (mit PHP) zeigt, wer angemeldet ist:

<?php echo "Angemeldet als: ", htmlspecialchars($_SERVER["REMOTE_USER"]); ?>

Ohne PHP genügt jede statische Seite; dann zeigt das Access-Log von Apache den angemeldeten Benutzer.

Von einem Windows-Rechner in der Domäne, als angemeldeter Domänenbenutzer:

curl.exe --negotiate -u : https://web.example.com/secure/

Mit Benutzername und Kennwort, von einem beliebigen Rechner:

curl.exe -u benutzer https://web.example.com/secure/

7. Browser

Edge und Chrome schicken ihr Kerberos-Ticket nur an Server in der Zone „Lokales Intranet“. Tragen Sie https://web.example.com dort ein, am besten per Gruppenrichtlinie für alle Rechner. Firefox braucht den Server zusätzlich in network.negotiate-auth.trusted-uris.

Mehrere Domänen

Ein Apache kann Anwender aus mehreren Domänen anmelden, auch wenn zwischen ihnen keine Vertrauensstellung besteht. Legen Sie in jeder Domäne ein Dienstkonto an und fügen Sie den Schlüssel auf einem Domain Controller der jeweiligen Domäne dem gleichen Keytab hinzu:

ktpass /in krb5.keytab /out krb5.keytab ^
       /princ HTTP/web.example.com@OTHER.EXAMPLE ^
       /mapuser OTHER\svc-web ^
       /pass * ^
       /crypto AES256-SHA1 ^
       /ptype KRB5_NT_PRINCIPAL

In krb5.ini kommt der zweite Realm unter [realms] hinzu, in der Apache-Konfiguration KrbAuthRealms EXAMPLE.COM OTHER.EXAMPLE. Basic-Anmeldungen ohne @REALM probiert das Modul in dieser Reihenfolge durch.

Tickets an die Anwendung weitergeben

Mit KrbSaveCredentials On legt das Modul die Tickets des Anwenders für die Dauer der Anfrage in einem Ticket-Cache ab. Die Anwendung findet ihn über die Umgebungsvariable KRB5CCNAME und kann damit im Namen des Anwenders auf weitere Dienste zugreifen. Bei Single Sign-On setzt das voraus, dass das Dienstkonto für die Delegierung vertraut wird (Schritt 1). Nach der Anfrage löscht das Modul den Cache.

Wenn es nicht funktioniert

  • Ausführliches Log: LogLevel warn auth_kerb:debug in httpd.conf.
  • gss_acquire_cred_from() failed: Das Keytab fehlt, ist nicht lesbar oder enthält keinen Schlüssel für den angefragten Principal.
  • Der Browser fragt nach Benutzername und Kennwort statt Single Sign-On: Der Server steht nicht in der Zone „Lokales Intranet“, oder der Name in der Adresszeile passt nicht zum HTTP/-Principal im Keytab.
  • Die Uhren von Webserver und Domain Controller dürfen höchstens fünf Minuten auseinanderliegen.

Lizenz und Unterstützung

mod_auth_kerb 2.0 für Windows ist ein Produkt der Schäuffelhut Berger GmbH. Preis und Lizenz finden Sie auf der Produktseite. Bei der Einrichtung, bei mehreren Domänen oder beim Umstieg von Version 1.x helfen wir gern: Schreiben Sie uns.