Exchange 2016 – Enable & Troubleshoot Certificate Based Authentication for OWA/Active Sync

Um die zertifikatsbasierte Authentifizierung des Exchange 2016 zu aktivieren empfehle ich, sich an folgenden Technet-Artikel zu halten. Dieser beschreibt die Konfiguration schritt für schritt.
Der anschließende Test war jedoch wenig erfolgreich und brachte auf den Client Geräten immer den Fehler „Anmeldung fehlgeschlagen“. Die Analyse des IIS Logfiles bestätigte in dem Fall die Fehlermeldung:

2018-01-17 14:14:41 W3SVC1 MSEXCHSRV 10.0.1.212 OPTIONS /Microsoft-Server-ActiveSync/default.eas Cmd=OPTIONS&User=domain%5CUser.Name&DeviceId=SEC15BF1D9F90A8E&DeviceType=SamsungDevice 443 - 10.0.0.213 HTTP/1.1 Android-SAMSUNG-SM-G955F/101.700 - - oma.fqdn.net 403 16 2148204809 184 375 452
2018-02-22 08:24:54 W3SVC3 EXCHANGESRV 10.0.1.212 GET / - 9943 - 10.0.0.5 HTTP/1.1 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/63.0.3239.132+Safari/537.36 - - exchangesrv.fqdn.info:9943 403 16 2148204809 1423 434 4230

Da der Microsoft Exchange Health Manager (+ Recovery) durchgängig Testaufrufe machen, wird das IIS Logfile schnell unübersichtlich gefüllt. Daher hatte ich einfach eine neue Site im IIS Manager erstellt und dort unter einem anderem Port Binding die Authentifizierung via Client Zertifikate getestet. (Unterer Logeintrag) Man kann aber auch den Health Manager Dienst temporär deaktivieren, dass funktioniert auch.
Zurück zur Fehlermeldung, welche im Detail wie folgt aussieht:

403 16 2148204809
  • 403 = HTTP Statuscode (Authentication Failed)
  • 16 = Subfehler (Client certificate is untrusted or invalid.)
  • 2148204809 = Detaillierter Fehlercode (0x800b0109 CERT_E_UNTRUSTEDROOT)

Sucht man nach der Fehlermeldung findet man folgenden Technet-Artikel, der eigentlich auf den IIS 8 bezogen ist. Windows Server verwendet IIS 10 – aber der Artikel trifft auch darauf zu.
Hintergrund: Seit Windows Server 2012 wurden strengere Überprüfungen für die zertifikatsbasierte Authentifizierung eingeführt. Einer dieser Checks prüft ob sich im Zertifikatsspeicher (Trusted Root Certification Authorities) auch wirklich nur sogenannte Root-Zertifikate befinden. Ein Root Zertifikat muss logischerweise immer selbst-signiert sein. Wenn sich dort ein Zertifikat befindet, was von einer anderen Zertifikatstelle ausgestellt wurde, ist dies eigentlich ein „Zwischenzertifikat / Intermediate“ und gehört an einen anderen Zertifikatsspeicherort.
In meinem Fall befand sich das „StartCom Class 3 OV Server CA“ in den Root-CA’s welches den Fehler produzierte. Um den Fehler zu beheben, müssen alle nicht selbst-signierten Zertifikate aus dem Root-CA entfernt bzw. zu den Zwischenzerifikaten verschoben werden.
Um bei der Vielzahl von Zertifikaten nicht alle händisch zu überprüfen kann man dies per Powershell identifizieren:

Get-Childitem cert:\LocalMachine\root -Recurse |
    Where-Object {$_.Issuer -ne $_.Subject}

Um die Zertifikate anschließend in den Speicher für „Intermediate Certification Authorities“ zu verschieben kann man folgenden Befehl nutzen:

Get-Childitem cert:\LocalMachine\root -Recurse |
    Where-Object {$_.Issuer -ne $_.Subject} |
    Move-Item -Destination Cert:\LocalMachine\CA

Anschließend den kompletten Server neustarten. Eventuell reicht auch nur ein Neustart des IIS (W3SVC). Hatte in meinem Fall jedoch nicht ausgereicht.

Zerifikatsvalidy period erhöhen

Kurz und knapp: Wenn man bei seiner Windows Zertifizierungsstelle keine Zertifikate mit längerer Gültigkeit ausstellen kann, obwohl es in den entsprechenden Templates konfiguriert ist, muss man prüfen was die generelle Gültigkeitsdauer ist.
Dazu auf dem CA-Server folgende Einstellungen prüfen:

H:\>certutil -getreg ca\ValidityPeriod
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\CertSvc\Configuration\CA\ValidityPeriod:
ValidityPeriod REG_SZ = Years
CertUtil: -getreg command completed successfully.
H:\>certutil -getreg ca\ValidityPeriodUnits
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\CertSvc\Configuration\CA\ValidityPeriodUnits:
ValidityPeriodUnits REG_DWORD = 2
CertUtil: -getreg command completed successfully.

Über die Werte kriegt man zum einen raus, in was für Perioden gerechnet wird (i.d.R. Jahre), sowie wie lange die max. Gültigkeit ist. (ValidityPeriodUnits)
Um den Wert nun zu erhöhen wie folgt ausführen:

H:\>certutil -setreg ca\validityperiodunits 4
SYSTEM\CurrentControlSet\Services\CertSvc\Configuration\CA\ValidityPeriod
Units:
Old Value:
ValidityPeriodUnits REG_DWORD = 2
New Value:
ValidityPeriodUnits REG_DWORD = 4
CertUtil: -setreg command completed successfully.
The CertSvc service may need to be restarted for changes to take effect.

Abschließend den Zertifikatsdienst neustarten:

H:\>net stop certsvc
The Active Directory Certificate Services service is stopping.
The Active Directory Certificate Services service was stopped successfully.
H:\>net start certsvc
The Active Directory Certificate Services service is starting.
The Active Directory Certificate Services service was started successfully.

Anschließend kann man über den CA-Server in den Zertifikatstemplates die Gültigkeit erhöhen:
img_005_compressed
Und siehe da, die Zertifikate sind nun länger gültig:
img_007_compressed

vSphere 6 – Zertifikat austauschen

Mit vSphere 6 bietet vMware eine eigene Zertifikatsstelle (vmcad) für seine Produkte an. Wer aber dennoch lieber eigene Zertifikate verwenden möchte kann dies natürlich auch weiterhin tun.
Zertifikat Request erstellen:

C:\Program Files\VMware\vCenter Server\vmcad>certificate-manager
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
| |
| *** Welcome to the vSphere 6.0 Certificate Manager *** |
| |
| -- Select Operation -- |
| |
| 1. Replace Machine SSL certificate with Custom Certificate |
| |
| 2. Replace VMCA Root certificate with Custom Signing |
| Certificate and replace all Certificates |
| |
| 3. Replace Machine SSL certificate with VMCA Certificate |
| |
| 4. Regenerate a new VMCA Root Certificate and |
| replace all certificates |
| |
| 5. Replace Solution user certificates with |
| Custom Certificate |
| |
| 6. Replace Solution user certificates with VMCA certificates |
| |
| 7. Revert last performed operation by re-publishing old |
| certificates |
| |
| 8. Reset all Certificates |
|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|
Note : Use Ctrl-Z and hit Enter to exit.
Option[1 to 8]: 1
Please provide valid SSO password to perform certificate operations.
Password:
1. Generate Certificate Signing Request(s) and Key(s) for Machine SSL certificate
2. Import custom certificate(s) and key(s) to replace existing Machine SSL certificate
Option [1 or 2]: 1
Please provide a directory location to write the CSR(s) and PrivateKey(s) to:
Output directory path: c:\tmp\6
2015-03-22T14:25:31.824Z Running command: ['C:\\Program Files\\VMware\\vCenter Server\\vmcad\\certool.exe', '--genkey', '--privkey', 'c:\\tmp\\6\\machine_ssl.key', '--pubkey', 'c:\\users\\admin\\appdata\\local\\temp\\2\\pubkey.pub']
2015-03-22T14:25:32.064Z Done running command
2015-03-22T14:25:32.067Z Running command: ['C:\\Program Files\\VMware\\vCenter Server\\vmcad\\certool.exe', '--gencsrfromcert', '--privkey', 'c:\\tmp\\6\\machine_ssl.key', '--cert', 'c:\\users\\admin\\appdata\\local\\temp\\2\\vecs_crt.crt', '--csrfile', 'c:\\tmp\\6\\machine_ssl.csr']
2015-03-22T14:25:32.116Z Done running command
CSR generated at: c:\tmp\6\machine_ssl.csr

Anschließend diesen Request von seiner Zertifikatsstelle signieren und das Zertifikat im Base64 Format wieder auf dem Server zur Verfügung stellen.
Dann kann dieses jetzt importiert werden:

1. Continue to importing Custom certificate(s) and key(s) for Machine SSL certificate
2. Exit certificate-manager
Option [1 or 2]: 1
Please provide valid custom certificate for Machine SSL.
File : c:\tmp\6\machine_ssl.cer
Please provide valid custom key for Machine SSL.
File : c:\tmp\6\machine_ssl.key
Please provide the signing certificate of the Machine SSL certificate
File : c:\tmp\6\root-base64.cer
You are going to replace Machine SSL cert using custom cert
Continue operation : Option[Y/N] ? : y
Status : 100% Completed [All tasks completed successfully]

Alternativ kann man auch mit Hilfe des Windos-Zertifikatsdienst ein Zertifikat anfordern, austellen lassen und exportieren:


Das Zertifikat als .pfx (mit Private Key’s) exportieren und anschließend per OpenSSL für vMware konvertieren.
Key exportieren:

openssl pkcs12 -in 123.pfx -nocerts -out key.pem -nodes
Enter Import Password:
MAC verified OK

Zertifikat exportieren:

openssl pkcs12 -in 123.pfx -nokeys -out cert.pem
Enter Import Password:
MAC verified OK

Passwort vom Key entfernen:

openssl rsa -in key.pem -out server.key
writing RSA key

Die beiden Dateien (cert.pem & server.key) könnt ihr anschließend über den Certificate-Manager importieren.

VMware SSL Automation Tool – Erleichterung beim Verteilen von SSL-Zertifikaten?

VMware hat gestern ein nettes Tool veröffentlicht, was den Aufwand beim Austauschen der SSL-Zertifikate (die mittlerweile immer mehr Bedeutung haben…) etwas minimieren soll.
Um das einzelne erstellen jedes Zertifikates kommt man allerdings noch nicht herum. Eine ausführliche Anleitung wie man zu den SSL-Zertifikaten kommt schrieb ich schon vergangenes Jahr.
Allerdings werden mit dem vCenter Certificate Automation Tool die Zertifikate automatisch hochgeladen bzw. ausgetauscht und die dazugehörigen Dienste automatisch neugestartet.
Es wird natürlich auch ein Backup der alten Zertifikate gemacht – und für den Notfall gibt es den Rollback Modus.
Unterstützt werden folgende Dienste / Server:
1. vCenter Server
2. vCenter Single Sign On
3. vCenter Inventory Service
4. vSphere Web Client
5. vCenter Log Browser
6. VMware Update Manager (VUM)
7. vCenter Orchestrator (VCO)
Noch mal ausdrücklich erwähnt: Das austauschen von Zertifikaten für ESXi Hosts wird NICHT unterstützt. Muss man klassisch machen.
Es wird empfohlen das Tool auszuführen nachdem man vom vCenter 4.x oder 5.0 zu 5.1 aktualisiert hat, oder bereits vCenter 5.1 im Einsatz hat und plant seine Zertifikate zu updaten.
Von VMware gibt es solch eine Anleitung ebfenfalls in Englisch: Generating certificates for use with the VMware SSL Certificate Automation Tool (2044696)
2041600_tool_session
Download gibts beim VMware hier: vCenter Certificate Automation Tool
Was man ebenfalls in naher Zukunft auf dem Radar behalten sollte ist der vCert Manager von vsslabs.

Diese wollen sich in Form eines Plugins im vCenter einnisten und ebenfalls den Prozess der Erneuerung von Zertifikaten komfortabler machen und beschleunigen. Ich habe mich bereits letztes Jahr schon in das „early adopter“ Programm eingeschrieben, aber bis heute noch keine Rückmeldung bekommen.
Mal schauen wann die Jungs die erste Beta veröffentlichen.
Einen ausführlichen Beitrag findet ihr hier: http://longwhiteclouds.com/2012/09/15/vcert-manager-changing-vmware-ssl-certs-made-easy/

Vmware View 5.1 + Zeroclients & Smartcard Authentication

1. Als erstes solltet ihr eine passende Smartcard konfiguriert haben.
– Den passenden Blogpost hatte ich gestern schon geschrieben.
2. View Connection Server mit SSL Zertifikat ausstatten.
– Siehe Anleitung: http://pubs.vmware.com/view-51/topic/com.vmware.ICbase/PDF/view-51-obtaining-certificates.pdf
3. SmartCard Authentifizierung im View Connection Server aktivieren. (zumindest Optional)
– View Configuration – Servers – Connection Servers – Edit – Authentication –


4. View Connection Server Keystore erzeugen
– Im Keystore müssen die Zertifikate von der RootCA, Connection Server sowie des Enroll-Users enthalten sein.
Das File wird erzeugt mittels keytool.exe

C:\IT>keytool -importcert -keystore keys.jks -storepass 123456 -alias rootCA -file caRoot-base64.cer
C:\IT>keytool -importcert -keystore keys.jks -storepass 123456 -keyalg "RSA" -trustcacerts -alias server -file servername.cer
C:\IT>keytool -importcert -keystore keys.jks -storepass 123456 -file enroll-base64.cer

Weiterlesen

vSphere 5 / ESXi5 / View 5 – Alle SSL Zertifikate austauschen

Es gibt mehrere Gründe warum man die selbst-signierten SSL-Zertifikate von VMWare austauschen sollte. Hauptkriterium ist natürlich um Man-in-the-Middle Angriffen vorzubeugen. Außerdem schafft man damit gleichzeitig auch die lästigen Zertifikatsfehler und „roten“ Adresszeilen aus dem weg. Macht also auch optisch was her 😉
Ich beschreibe hier, wie man die folgenden Zertifikate austauschen kann (ich würde die Reihenfolge auch empfehlen):

  1. ESXi Host
  2. vCenter Server (vSphere 5.0)
  3. vSphere Update Manager
  4. View 5 Connection Server

Voraussetzungen:

  1. Zertifizierungsstelle (in meinem Fall die Windows Active Directory CA)
  2. openssl
  3. ESX Server sowie vCenter und View Connection Server müssen zwischendurch neu gestartet werden

 

Schritt 1: Zertifikat erstellen


# Keyfile generieren

openssl genrsa 1024 > rui.key

(Info: Als Root Benutzer ausführen, sonst kann der „random state“ nicht geschrieben werden. Siehe Bild.)
# Zertifikat Request erstellen

openssl req -new -key rui.key > rui.csr


Common Name = FQDN
# Zertifikat Request anzeigen

openssl req -in rui.csr

# Zertifikat erstellen via / https://CASERVER/certsrv
# Zertifikat in Base64 kodierung herunterladen und nochmal via openssl ins x509 Format umwandeln.

openssl x509 -in server.domain.info.cer -out rui-x509.cer

 

Schritt 2: Zertifikat auf ESX Server austauschen

# Zertifikat auf den ESX kopieren
Anschließend per WinSCP auf den ESX-Host verbinden, und die Dateien aktualisieren:

cd /etc/vmware/ssl
mv rui.key rui.key.old
mv rui.crt rui.key.old

Nun die generierte rui-x509.cer als rui.crt sowie das Keyfile hochladen.

# ESX rebooten
Anschließend den ESX neubooten (Empfehlung!) oder ggf. den VPXA-Dienst neustarten:

service vmware-vxpa restart

 

Schritt 3: vCenter Zertifikat austauschen

# Zertifikat erstellen (Schritt 1)
Als erstes wieder ein Zertifikat erstellen. Selber Ablauf wie schon oben oder beim ESX durchgeführt.
Der Pfad für das SSl-Zertifikat des vCenters ist:
Windows 2008: C:\ProgramData\VMware\VMware VirtualCenter\SSL
Windows 2003: C:\Documents and Settings\All Users\Application Data\VMware\VMware VirtualCenter\SSL\
# Zusätzlich Zertifikat als .pfx speichern
openssl pkcs12 -export -in rui.crt -inkey rui.key -name rui -passout pass:testpassword -out rui.pfx
Wichtig: Das Passwort auf gar keinen Fall ändern, sonst wird das Zertifikat nicht erkannt!
Zum Austausch gibts es nun 2 Wege, Entweder via zurücksetzen der vCenter Datenbank – oder neu per vCenter Api. Ich beschreibe beide Wege.

Weg 1:

# vCenter Server Dienst stoppen.

net stop vpxd

# Passwort der vCenter Server Datenbank zurücksetzen

"C:\Program Files\VMware\Infrastructure\VirtualCenter Server\vpxd.exe" –p

Das Passwort wird zufällig generiert.
# Starte den vCenter Server Dienst.

net start vpxd

Weg 2:

# Webseite aufrufen

https://vcenterservername/mob/?moid=vpxd-securitymanager&vmodl=1 


# Auf reloadSslCertificate klicken

# Auf „Invoke Method“ klicken

Als Bestätigung muss nun folgendes erscheinen:

# Überprüfen ob das Zertifikat korrekt ist.
Dazu die Webseite bzw. FQDN des vCenters aufrufen.

# Einstellung überprüfen:
Der Haken sollte gesetzt sein.

# ESX mit vCenter neu verbinden.
Damit der vCenter das neue Zertifikat des ESX „aktualisiert“ müssen die ESX-Hosts der Reihe nach neu verbunden werden. Dazu aus dem vCenter entfernen und neu verbinden. (FQDN verwenden!)

Schritt 3: Zertifikat des Update Managers austauschen

# Zertifikat erstellen (Schritt 1)
Als erstes wieder ein Zertifikat erstellen. Selber Ablauf wie schon oben oder beim ESX durchgeführt.
Der Pfad für das SSL Zertifikat des Update Managers ist (unter W2K8R2 64-bit):
C:\Program Files (x86)\VMware\Infrastructure\Update Manager\SSL
# Zusätzlich Zertifikat als .pfx speichern
openssl pkcs12 -export -in rui.crt -inkey rui.key -name rui -passout pass:testpassword -out rui.pfx
# Update Manager Dienst stoppen

net stop vmware-ufad-vci


# Zertifikat austauschen
Nun wieder die erstellen Zertifikat-Dateien austauschen. (rui.crt | rui.key | rui.pfx)
# Update Manager Dienst starten

net start vmware-ufad-vci

Schritt 4: Zertifikat des View Connection Server austauschen

Das Austauschen des View-Zertifikates wird in einem VMWare-KB sehr gut beschrieben. Siehe hier: http://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=1008705
Mittels des keytools kann man sich den Request erstellen und dann ganz normal via AD-CA zertifizieren.
 

Debugging: SSL-Fingerprints im vCenter

Gegebenenfalls bekommt man das ein oder andere mal eine Fehlermeldung, das die Fingerprints nicht übereinstimmen. Dies kommt zum Beispiel, wenn man die ESX-Hosts nicht neu verbindet, wenn sich das Zertifikat geändert hat.
Dies kann man debuggen, indem man sich auf den SQL-Server verbindet und sich alle Fingerprints anzeigen lässt:

SELECT id,EXPECTED_SSL_THUMBPRINT,HOST_SSL_THUMBPRINT FROM dbo.VPX_HOST

Der Erwartete Fingerprint muss mit dem realen Fingerprint übereinstimmen:

Ggf. dann den Expected_SSL_Thumbprint mit dem realen aktualisieren:

UPDATE dbo.VPX_HOST SET EXPECTED_SSL_THUMBPRINT = '7B:93:B8:F9:FE:E2:8E:E4:9A:6E:19XXXXXXX:D:CB:21:03:E7’ WHERE id = '5849’

# Fingerprint vom Zertifikat anzeigen

openssl x509 -fingerprint -noout -md5 -in self-signed-certificate.pem

MD5 oder Sha1 – Alternativ einfach Rechtsklick-Eigenschaften und Zertifikat Details anzeigen lassen.
 
 
 
 

iPhone 4S konfigurieren für Exchange Active Sync 2010 und WLAN 802.1X via Zertifikate

Servus,
aus gegebenem Anlass schreibe ich hier mal eine Anleitung für das neue iPhone 4S. (Funktioniert wohl mit älteren Versionen ebenfalls)
Da es doch oft nervig ist, wenn man sein Windows-Kennwort immer an mehreren Stellen ändern muss – dachte ich mir dies für das Handy komplett mit Zertifikaten abzulösen.
Man benötigt:
– Root Zertifikat
– User Zertifikat
(Auf die Einstellungen des Access-Points und Exchange/Forefront gehe ich hier mal nicht näher ein.)
Für die vereinfachte Konfiguration des iPhone gibt es ein Konfigurationstool, momentan in der Version 3.3.
iPhone-Konfigurationsprogramm 3.3
Windows: https://support.apple.com/kb/DL926?viewlocale=de_DE
Mac OSX: https://support.apple.com/kb/DL851?viewlocale=de_DE
Innerhalb der Software erstellt man ein Konfigurationsprofil, was man dann den angeschlossenen Geräten zuweisen kann.

Zertifikate importieren
Schritt 1: Hier müssen das Root sowie das User Zertifikat importiert werden.

Schritt 2: Exchange: Server Adresse eingeben, ggf. SSL verwenden und Zertifikat auswählen. (Einschl. Kennwort)

Schritt 3: W-Lan konfiguration | SSID eingeben und Authentifizierungsprotokolle auswählen

Schritt 4: Im Reiter "Authentifizierung" muss das Userzertifikat ausgewählt werden.

Schritt 5: Abschließend noch unter "Vertrauen" das eigene Root-Zertifikat auswählen.

Wie schon oben beschrieben muss nun das Konfigurationsprofil noch dem Gerät zugewiesen werden. Hat man auf Installieren geklickt muss es nochmal auf dem Handy selbst bestätigt werden.
 
Nachtrag: das iPhone Konfigurationsprogramm gibt es nun in der Version 3.4 | Bisher sind mir aber keine gravierenden Neuerungen aufgefallen.