ADFS Monitoring

Ein ADFS-Server und ggfls. eine Veröffentlichung per Reverse Proxy oder ADFS-Proxy ist gefühlt in weniger als einem Tag installiert. Sehr schnell werden dann Dienste wie Office 365, Yammer aber auch SharePoint, CRM, Partnerdienste etc. damit verbunden und es hat sich keiner wirklich Gedanken über den langfristigen Betrieb gemacht. Der Verlust der ADFS-Funktion bedeutet, dass die Clients keine Tickets mehr bekommen und damit sich nicht mehr an verbundenen Diensten anmelden können. In Verbindung mit Office 365 heißt das kein Outlook, kein Postfach, kein SharePoint und eventuell sogar kein Telefon mehr, wenn Sie Skype für Business Online mit Telefonie nutzen.

Über Loadbalancer und mehrere ADFS-Server kann die Last verteilt und ein Ausfall oder die Wartung eines Servers überbrückt werden. Aber erst eine Überwachung stellt sicher, dass Sie einen Ausfall sofort bemerken und mit den passenden Prüfpunkten können Sie sogar zukünftige Probleme vorhersehen. Dazu gehört z.B. der Ablauf von Zertifikaten. Diese Seite fasst meine bisherigen Checks und deren Aussagekraft zusammen

Basis-URLS und Eventlog

Ein ADFS-Service stellt einige Grundfunktionen bereit, die erst mal direkt per HTTPS abgerufen werden. Hier einige URLs, die eigentlich immer funktionieren sollten:

Url Intern ADFSProxy Beschreibung

https://<fqdn des ADFS_Servers>/adfs/ls/IdpInitiatedSignon.aspx

Anonym

Anoym

Startet die formularbasierte Anmeldung

https://<fqdn des ADFS_Servers>/adfs/fs/federationserverservice.asmx

Anonym

503 Fehler

WSWSDL-Beschreibung des WebService als XML-Datei

https://<fqdn des ADFS_Servers>/adfs/services/trust/mex

Anonym

Anonym

WSDL-Beschreibung des WebService als XML-Datei.

https://<fqdn des ADFS_Servers>/federationmetadata/2007-06/federationmetadata.xml

Anonym

Anonym

XML-Datei

Auch im Eventlog des ADFSService/Admin sollten Sie einen Event 100 finden, der die erfolgreiche Kommunikation anzeigt.

federationmetadata.xml

Eine besondere Bedeutung kommt der federationmetadata.xml zu. Auf der Seite ADFS Zertifikat aktualisieren habe ich beschrieben, dass dass ADFS-Signing-Zertifikat immer mal wieder zu erneuern ist. Damit ist nicht das Zertifikate gemeint, welches für die Verschlüsselung der HTTPS-Kommunikation gedacht ist. Dieses Zertifikat können gängige Monitoring-Lösungen sehr einfach über einen HTTPS-Connect abrufen und die Restlaufzeit ermitteln. Aber das ADFS-Signing Zertifikat wird für die ADFS-Tokens verwendet und dessen Laufzeit sollte sehr wohl überwacht werden. Wenn es nämlich abläuft, dann können keine Tokens mehr ausgestellt werden und alle Anmeldungen der Anwender an darauf aufbauenden Diensten, z.B. Office 365 funktionieren auf einmal nicht mehr.

Daher ist es aus meiner Sicht wichtig, die URL "https://<fqdn des ADFS_Servers>/federationmetadata/2007-06/federationmetadata.xml" regelmäßig abzurufen und das darin hinterlegt Zertifikat zu prüfen. Sie sieht z.B. eine Antwort aus:

Der rot markierte Teil ist ein BASe64 codiertes Zertifikat. Sie können diesen Text einfach in "Notepad" übertragen und als CER-Datei speichern. Wenn Sie diese Datei dann mit einem Doppelklick öffnen, zeigt ihnen Windows das ADFS Signing Zertifikat an

Tokens des ADFS-Servers werden mit dem privaten Schlüssel dieses Zertifikats signiert. Stören Sie sich nicht daran, dass es ein "Self Signed" Zertifikat ist. Dies ist "normal", denn diese Zertifikat wird auf den Diensten eingetragen, die Tokens des ADFS-Servers vertrauen. Alternativ können sich diese Dienste das Zertifikat auch selbst über eben diese URL https://<fqdn des ADFS_Servers>/federationmetadata/2007-06/federationmetadata.xml holen.

ADFS PowerShell

Das Zertifikat liegt natürlich auch im Windows Zertifikatsspeicher des ADFS-Servers. Allerdings sehen Sie hier am Beispiel von Net at Work, dass nicht alle Zertifikats aus der ADFS-Verwaltung auch im Windows Zertifikatsspeicher liegen:

Insofern kann auch ein Überwachtungstool, welches von Hause aus einfach alle Zertifikate auf einem Server überwacht, dieses Zertifikat nicht finden. Welches der vielen Zertifikate der ADFS-Service aber aktuell nutzt, lässt sich am besten über die ADFS-Powershell ermitteln

PS C:\> Get-AdfsCertificate

Certificate     : [Subject]
                    CN=*.netatwork.de, OU=Domain Control Validated
                  [Issuer]
                    CN=AlphaSSL CA - SHA256 - G2, O=GlobalSign nv-sa, C=BE
                  [Serial Number]
                    1121250ADA10F0BE638D7E37AF8C053E1A4D
                  [Not Before]
                    4/20/2015 11:31:29 PM
                  [Not After]
                    7/2/2018 3:19:07 PM
                  [Thumbprint]
                    3F65896B1E2102515FC7942BD1FC6D9F3603C04A

CertificateType : Service-Communications
IsPrimary       : True
StoreLocation   : LocalMachine
StoreName       : My
Thumbprint      : 3F65896B1E2102515FC7942BD1FC6D9F3603C04A

Certificate     : [Subject]
                    CN=ADFS Encryption - adfs.netatwork.de
                  [Issuer]
                    CN=ADFS Encryption - adfs.netatwork.de
                  [Serial Number]
                    74BE661C3C0EA4B545B8A3EF612A4320
                  [Not Before]
                    1/14/2015 1:38:57 PM
                  [Not After]
                    1/14/2016 1:38:57 PM
                  [Thumbprint]
                    CA66DB34010191003336F4121C6FE63A4800826A

CertificateType : Token-Decrypting
IsPrimary       : True
StoreLocation   : CurrentUser
StoreName       : My
Thumbprint      : CA66DB34010191003336F4121C6FE63A4800826A

Certificate     : [Subject]
                    CN=ADFS Signing - adfs.netatwork.de
                  [Issuer]
                    CN=ADFS Signing - adfs.netatwork.de
                  [Serial Number]
                    6E1AA335412ECB904B2CDA73AD9AF60E
                  [Not Before]
                    1/14/2015 1:38:57 PM
                  [Not After]
                    1/14/2016 1:38:57 PM
                  [Thumbprint]
                    DA34989B3800A3DAEEA634E600FB063EDD938BB0

CertificateType : Token-Signing
IsPrimary       : True
StoreLocation   : CurrentUser
StoreName       : My
Thumbprint      : DA34989B3800A3DAEEA634E600FB063EDD938BB0

Allerdings kann dieser Befehl nur als lokale Administrator in einer Powershell mit dem passenden SnapIn auf dem ADFS-Server erfolgen. Das macht eine automatische Überwachung nicht einfacher.

Azure AD Connect Health

Microsoft betreibt natürlich selbst auch ADFS-Services und überwacht diese auch. Mit der gleichen Infrastruktur können Sie aber auch ihren eigenen ADFS-Service mit überwachen lassen. Mit ADConnect wird ein Health Agent installiert, mit dem Microsoft die lokalen Services überwacht und die Daten direkt in die Cloud übermittelt. Sie können dann als Administrator am Azure-Portal diese Daten auswerten.

Check-ADFS -Powershell (PRTG)

Auch wenn ADFS etwaige Probleme im Eventlog meldet und die "Anwender" auch einen guten Fühler für die Funktion hergeben, bevorzuge ich regelmäßige aktive Checks zusätzlich zu einer passiven Überwachung von Eventlog und Performance Counter. In dem Zuge ist ein Script entstanden, welches ich nach und nach ausbaue. Es verbindet sich per HTTPS mit dem ADFS-Server, fragt relevante URLs ab und gibt die Ergebnisse entsprechend aus. Da ich als Überwachungsprogramm gerne mit PRTG arbeite, ist der Sensor als PRTG:Custom Sensor ausgeführt, der die Ergebnisse unter PRTG als XML-Datei ausgibt.

Die aktuelle Version verbindet sich direkt per HTTPS mit dem angegeben ADFS-Namen und prüft sowohl das Alter des HTTPS-Zertifikats als auch das Alter des Signing Zertifikats

check-adfs.20160106.ps1.txt

Sie können das Skript auf jedem PC mit einer Powershell aufrufen lassen. Bedenken Sie aber, dass Sie natürlich ihren ADFS-Server als Parameter mit angeben müssen. Das Beispiel "adfs.msxfaq.de" funktioniert nicht. Wie Sie das Skript in PRTG als PRTG:Custom Sensor einbinden, ist auf den PRTG-Seiten beschrieben. Achten Sie vielleicht darauf, dass Sie das Skript z.B. nach check-adfs.ps1 umbenennen, damit sie später eine aktuelle Version einfach ersetzen können. Zudem ist es sicher ausreichend, wenn Sie den Sensor nur einmal in 24h starten und nicht alle 60 Sekunden, solange er eh nur das Alter der beiden Zertifikate ermittelt. Hier das Ergebnis meiner Installation:

In dem LiveGraph und den anderen Grafiken ist natürlich erst dann die Abnahme der Restlaufzeit zu sehen, wenn der Sensor einige Wochen Daten ermittelt hat. Wenn später z.B. auch eine Anmeldung erfolgen kann, macht eine häufigere Messung wieder mehr Sinn.

Weitere Links