LDAPS (LDAP over TLS) auf DCs schnell testen

Nach und nach wird LDAPS anstelle des unverschlüsselten LDAP auf Windows Domänen Controllern (DCs) eingeführt. Das ist auch sinnvollso. Das einzige was der Admin dazu tun muss, ist ein passendes (Domänen-) Zertifikat zu installieren. Das funktioniert auch bestens mit Wildcard-Zertifikaten, sofern man eine Domäne mit „Routingfähigem“ FQDN verwendet.

Wann man nun ein Zertifikat hinzugefügt hat, wie testet man das denn auf die schnelle? Natürlich hat Microsoft kein Werkzeug dafür an Boad, aber OpenSSL to the rescue.

Lösung

Man verbinde sich einfach mit dem openSSL-Client mit dem LDAPS-Port

openssl.exe s_client -connect DC.EXMAPLE.COM:636

und warte auf den CONNECTED output. Wenn es den gibt, war die Verbindung erfolgreich.

Die Ausgabe des TLS-Tests sieht dann (in etwa) so aus:

C:\>openssl.exe s_client -connect DC.EXAMPLE.COM:636
Connecting to <IP>
CONNECTED(000001F8)
depth=1 C=US, O=DigiCert Inc, OU=www.digicert.com, CN=RapidSSL TLS RSA CA G1
verify error:num=20:unable to get local issuer certificate
verify return:1
depth=0 CN=*.EXAMPLE.COM
verify return:1
---
Certificate chain
 0 s:CN=*.EXAMPLE.COM
   i:C=US, O=DigiCert Inc, OU=www.digicert.com, CN=RapidSSL TLS RSA CA G1
   a:PKEY: rsaEncryption, 2048 (bit); sigalg: RSA-SHA256
   v:NotBefore: Jan 01 00:00:00 2026 GMT; NotAfter: Jun 29 23:59:59 2096 GMT
 1 s:C=US, O=DigiCert Inc, OU=www.digicert.com, CN=RapidSSL TLS RSA CA G1
   i:C=US, O=DigiCert Inc, OU=www.digicert.com, CN=DigiCert Global Root G2
   a:PKEY: rsaEncryption, 2048 (bit); sigalg: RSA-SHA256
   v:NotBefore: Nov  2 12:24:33 2017 GMT; NotAfter: Nov  2 12:24:33 2029 GMT
---
Server certificate
-----BEGIN CERTIFICATE-----
ETZGLDCCBRSgAwIBAgIQAp8gNFzPD8DDuYunngMxzzANBgkqhkiG9w0BAQsFADBg
MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3

[...]

Ein Gruppenrichtlinienobjekt (GPO) auf alle Organisationseinheiten (OUs) mit bestimmtem Namen unterhalb eines DNs anwenden (linken)

Problem

Als Windows-Administrator wird man mit Aufgaben konfrontiert, die recht einfach klingen. Bis man sie sehr oft von Hand ausführen muss.

Ein Beispiel aus der Praxis:
„Erstelle eine neue GPO und verlinke diese auf alle OUs, die ‚Würstchen‘ heißen, unterhalb von OU=Speisekarte“.

Oder anders formuliert: Verknüpfe eine Gruppenrichtlinie auf alle 3673409 OUs mit diesem Namen.

Das ist in der Gruppenrichtlinienverwaltung technisch gar kein Problem; sofern die Anzahl übersichtlich ist (und die OUs nicht über mehrere Ebenen verteil sind). Man klickt sich durch die AD-Verwaltungskonsole, öffnet Eigenschaften, fügt die GPO hinzu … und wiederholt das sehr oft.

Lösung

Das kann man glücklicherweise ganz gut mit der PowerShell automatisieren.

Dieser Schnippsel durchsucht mit -like alle OUs unterhalb eines angegebenen DN nach einem bestimmten Begriff und verlinkt automatisch die gewünschte GPO dazu.

$BaseDN = "OU=UNTERSTRUKTUR,DC=EXAMPLE,DC=COM"
$Suchbegriff = "WÜRSTCHEN"
$GPO = Get-Gpo -Name "NEUE_GRUPPENRICHLINIE"

Get-ADOrganizationalUnit -SearchBase $BaseDN -Filter * -SearchScope Subtree |
    Where-Object { $_.Name -like "*$Suchbegriff*" } |
    ForEach-Object {
    New-GPLink -Guid $GPO.id -Target $_.DistinguishedName -LinkEnabled Yes
    }

Mit diesen Zeilen wird aus ermüdender Klickarbeit eine schnelle Aktion.

NextCloud Client als Windows-Dienst funktioniert nach Update auf Version 3.14.1 nicht mehr richtig (macht hohe CPU-Last)

Problem

Der NextCloud Client hat in (oder ab?) Version 3.14.1 einen Bug, der dafür sorgt, dass der Client nicht (mehr) korrekt funktioniert, wenn er ohne GUI startet. Dann gibt es hohe CPU-Last und die Synchronisation läuft nicht mehr – oder nur noch wahnsinnig langsam.

Im Logfile findet sich dazu diese Fehlermeldung:

[ warning default unknown:0 ]:	Failed to create Direct Composition device: COM error 0x80070005: Access is denied.

Das ist immer der Fall, wenn man den Client via NSSM als Windows-Dienst im Hintergrund laufen lassen möchte oder im Taskplaner einen Task für „Systemstart“ ohne Desktop.Interaktion angelegt hat.

Lösung

Für den betroffenen Benutzer einfach die Systemvariable „QT_QUICK_BACKEND“ setzen:

QT_QUICK_BACKEND=software

Danach startet der Dienst wieder fehlerfrei.

Anzahl der echten CPU-Kerne in der PowerShell anzeigen

Manchmal braucht man „mal eben“ die Anzahl der echten physischen CPU-Cores. Sei es um Systemvoraussetzungen zu prüfen, Daten zu inventarisieren oder einer Asset-Verwaltung auf die Sprünge zu helfen. Nein, wir nennen Asset.Desk, Service.Desk und dieses unglaublich furchtbare Heinzelmann nicht beim Namen.

Windows zählt die physischen und logischen Cores getrennt und kann diese auch ausgeben – via WMI.

Display CPU Core count in PowerShell

Get-WmiObject win32_processor | ft Name,NumberOfCores,NumberOfLogicalProcessors

Vollständige AD Replikation sofort erzwingen

Und schon wieder ein „Schnipsel“ den man viel zu oft googelt. Manchmal muss es eine SOFORT!!11-Replikation sein, so löst man diese aus.

Erzwingt eine Pull-Replikation des aktuellen DCs (Domain Controllers) von allen anderen DCs:

repadmin /syncall /AeD

Erzwingt eine Push-Replikation des aktuellen DCs (Domain Controllers):

repadmin /syncall /APeD

Erklärung der Parameter:

A = Alle Partitionen
e = Enterprise (Auch cross-Site)
D = Servers mit den DNs auflösen
P = Push