Ausgangslage:
Die erzwungen Umstellung der LDAP Abfragen auf LDAP Channel Binding oder LDAPs "ADV190023" bringt so manchen Domain Admin und Administrator ins schwitzen. Was sollt man tun, wenn die Anwendung nur eine Eingabefeld für den Authentifizierungsserver hat (Bsp: Tomcat) und man die Redundanz der Domainaufrufs beibehalten will.
Hier die Lösung:
Die für LDAPs benötigten Zertifikate sind meist schon auf den jeweiligen Domain Controller vorhanden und beinhalten wie von Microsoft gefordert als CN= den FQDN des Domain Controllers. Dieser eindeutiger Eintrag im Zertifikat ist aber hinderlich wenn man in der Applikation welche man umstellt nur ein Feld für die LDAP Server hat, sich aber die Redundanz der mehrfach vorhanden Domain Controller zu Nutze machen will.Bei einer reinen LDAP Abfrage auf den Domain Name war dies bisher einfach möglich.
Durch die Umstellung auf LDAPs hat man das Problem, dass die Abfrage welche zuvor auf den hinterlegten Domain Name lautete z.B. ldap:///DomainName.Beispiel.com nicht mit dem CN des Zertifikates übereinstimmt und somit die LDAPS Abfrage nicht erfolgreich ist.
Workaround der funktioniert aber umständlich ist:
Der einfachste Weg ist es das Zertifikat der Domain Controller mit den benötigten Inhalten wie dem Domain Namen oder einem (falls gewünscht) extra für LDAPs definierten DNS Namen zu ergänzen. Das Attribut dafür gibt es schon und nennt sich das SAN Attribut.
Dieser Workaround ist umständlich und für mich nicht zufriedenstellend. Durch diese Anpassung müssen beim beziehen des Zertifikates die SAN-Felder manuell ausgefüllt werden und das bei jedem erneuern auf jedem Domain Controller. Somit ist das automatische erneuern der Zertifikate nicht mehr möglich.
Lösung dieses Dilemmas lässt sich durch einen zwar nicht offiziell von Microsoft unterstützen Kniff lösen. Man bedient sich dem automatischen Renewal Prozess von Zertifikaten welche schon ausgestellt sind.
Dazu erstellt man das Zertifikate in der initialen Version manuell oder per PS Befehl, so wie auf den jeweiligen Domain Controllern benötigt. Das Autoenrollment wird erst danach aktiviert. So wird das Zertifikat zukünftige automatisch erneuert und die manuellen Tasks werden auf ein Minimum begrenzt.
Umsetzung:
Vorbereiten des Zertifikat Templates auf der internen CA und der AD Berechtigungsgruppe
- Zu Beginn erstellt man im Active Directory eine Gruppe welche die Domain Controller beinhaltet, welche nachher für LDAPS Abfragen bereitstehen. Dies kann bei grösseren Umgebung nur eine Auswahl an Domain Controller sein. Bevor die Gruppen Mitgliedschaft verwendet werden kann, wird ein Reboot benötigt.
- Öffnen der MMC "Enterprise Issuing CA". Navigation zu den "Certificate Templates" und wähle Manage aus.
- Im Neu geöffneten Fenster das Template "Kerberos Authentication" suchen und dublicate auswählen.
- In den geöffneten Template Einstellungen wird im Tab:Compatibility mindestens die Version 2012 R2 in beiden Felder ausgewählt.
- Im Tab General wird der Template Name vergeben: "Kerberos Authenticaton (LDAPS)"
- Im Tab "Subject Name" wird die Option "Supply in the Request" ausgewählt mit der Option "Use subject information from existing certificates for autoenrollment renewal requests". Dies ist die die Magische Zutat.
- Im "Security" Tab muss das "Enroll" und falls vorhanden "Autoenroll" Recht für alle Gruppen entfernt werden welche Domain Controller enthalten. Das sind "Domain Controllers","Enterprise Domain Controllers" and "Enterprise Read-only Domain Controllers”.
- Vergewissere dich, dass keine weitere Computer Gruppe das Recht Enroll und Autoenroll aktiviert hat.
- Füge nun die zuvor erstellt Gruppe hinzu und vergebe das Recht "read" und "enroll".
- Optional kann über das Tab " Superseded Templates" bereits das auf dem Domain Controller vorhandene Zertifikate durch das Neue ersetzt werden.
GPO - Autoenrollment
Als nächste wird das Autoenrollment für die Domian Controller eingerichtet. Dies wird am besten durch eine GPO realisiert.
In der GPO findet man an folgender Stelle die Optionen für das Einrichten des Autodeployments
" \Computer Configuration\Windows Settings\Security Settings\Public Key Policies\Certificate Services Client – Auto-Enrollment"
Es gilt zu beachten, falls sich Certificate Templates auf der CA befinden, bei welchen die Domain Controller für Autoenrollment bereits berechtigt sind, beziehen sich die Domain Controller nach dem aktivieren der GPO die Zertifikate von diesen Templates. Dies kann geprüft werden, in den Security Tab bei allen auf der CA hinzugefügten Templates.
Erstmaliges Ausrollen
Das erstmalige beziehen des Zertifikates kann über zwei Weg durchgeführt werden, über die GUI oder Powershell. Je mehr Domain Controller dieses Zertifikat erhalten, je eher lohnt sich das Vorgehen via Powershell.
GUI
- Im der MMC für die Server Zertifikate (certlm.msc) wird unter Personal ein neues Zertifikat bezogen "request new certificate".
- Template auswählen welches wir zuvor erstellt haben.
- Vervollständigen der Zertifikats Informationen. Siehe Screenshot
- Subject name: bleibt leer. Dies wird vom DC beim Beziehen selbst befüllt.
- Alternativ Name:
- FQDN des Domain Controller
- FQDN der Domain
- NetBIOS Name der Domain
- falls gewünscht Alias für LDAPS Abfrage
- mit Ok bestätigen
- Nun wird das Zertifikat unter Personal angezeigt.
- Zu Kontrolle können nach dem erstellen die vorher eingegeben Daten im Zertifikat verifiziert werden.
- Dieser Schritt muss auf allen Domain Controller wiederholt werden.
Powershell
Der Powershell Befehl muss im Admin Modus mit Domain Admin Rechte und installierten PS Module ActiveDirectory ausgeführt werden.
Die PSRemote Shell muss konfiguriert sein.
Invoke-Command -ComputerName <DomainController> -ScriptBlock {Get-Certificate -Url LDAP: -Template "Kerberos Authenticaton (LDAPS)" -SubjectName "" -DnsName <FQDN>,<FQDNDomain>,<NetBIOS>,<AliasLDAPS> -CertStoreLocation "cert:\localmachine\my"}
Nach diesen Schritten können sie den Aufruf von LDAPS den Domain Namen oder ihren LDAPS definierten Alias als Authentifizierungsserver angeben und testen.
Als nächste Punkt wird das Autoenrollment für das zuvor erstellte Template "Kerberos Authenticaton (LDAPS)" aktiviert. Hier für setzte man die Option für die hinzugefügt Gruppe im Template welche die Domain Controller beinhaltet die Option "autoenroll". Nach dieser Einstellung ist das Autoenrollment aktiviert und das automatisches erneuern der Zertifikate findet kurz vor Ablauf automatisch statt.
Jetzt ist alles fertig eingerichtet und die Administrative Arbeit wurde auf das Minimum reduziert. Einzig die Überprüfung des automatischen erneuern gilt es noch zu testen.
Überprüfen ob des Autoenrollments
Damit wir nicht bis kurz vor Ablauf des Zertifikates warten müssen, bevor wir sicher sind, dass das automatische erneuern des Zertifikates funktioniert kann man den Wechsel auch provozieren.
Dazu erhöht man die Major Version des Templates.
- öffnen der Template Verwaltung
- Auswählen des Templates Kerberos Authenticaton (LDAPS) und mit Rechte Maus folgende Option auswählen: "Reenroll All Certificate Holders". Die Version des Templates wird dann von 100.xx auf 101.xx angehoben. Die Server erneuern das Zertifikat bei der nächsten Überprüfung.
- Für alle welche dies zu lange geht können das automatische erneuern auch forcieren. Mit dem CMD Befehl "certutil -pulse".
- Prüfen im Certificatsstore "certlm.msc" ob das Zertifikat erneuert wurde.
Dies ist mein aktuelles Tutorial, welches zeigt, wie man die Domain Controller fit macht für die LDAPS Abfrage auf dem "Domain Namen". Ich hoffe es hilft dem einen oder anderen weiter und ich freue mich immer über Feedback, Anregungen oder Korrekturen des Tutorials.
Teilen ist natürlich erwünscht.
Keine Kommentare:
Kommentar veröffentlichen