Das Thema Client-Zertifikate ist im Zeitalter der 2-Faktor-Authentifizierung meiner Meinung nach etwas überholt. Trotzdem gibt es immer noch viele Firmen, die ein Client-Zertifikat voraussetzen, um den Zugriff auf eine bestimmte Ressource an weitere Bedingungen zu knüpfen. Man verhindert dadurch das pure Bruteforcen von Benutzername und Passwort — wobei genau hier meiner Meinung nach der zweite Faktor ins Spiel kommt, der dieses Problem sauber löst. Solltet ihr trotzdem einmal in die Situation kommen, ad hoc ein Client-Zertifikat zur Absicherung eures Citrix Gateways zu brauchen, stelle ich euch hier einen möglichen Lösungsweg bereit.

Wir gehen in unserem Beispiel davon aus, dass unsere Laptops kein Mitglied einer Domäne sind und es keine interne CA gibt, die Zertifikate verteilt. Ist das bei euch anders, könnt ihr euch das Erstellen eines Root-CA-Zertifikats ersparen — je nach Konfigurationsstand auch das Verteilen der Client-Zertifikate. Legen wir also los mit dem Erstellen eines Root-CA-Zertifikats auf dem Citrix ADC.

Erstellung Root CA Zertifikat

Wir öffnen hierzu die Weboberfläche des Citrix ADC (nachfolgend NetScaler genannt) und melden uns an. Unter Traffic Management → SSL finden wir im Menü Getting Started den Root-CA Certificate Wizard.

Hier generieren wir uns zunächst einen Private Key. Übliche Werte für die Key Size sind 2048 oder 4096 Bit. Das Key Format kann auf DER gestellt werden, es sei denn, man möchte den Private Key zusätzlich verschlüsseln. Der Dateiname sollte am besten auf .key enden.

Der Certificate Signing Request (CSR) wird benötigt, um zusammen mit dem Private Key ein Zertifikat zu bekommen. Solltet ihr im vorherigen Schritt PEM als Key Format gewählt haben, müsst ihr hier noch einmal die Passphrase eingeben. Ein Subject Alternative Name ist mittlerweile Standard; Zertifikate ohne SAN werden von Google als nicht vertrauenswürdig eingestuft.

Im zweiten Schritt des CSR werden einige Informationen zum Zertifikat selbst benötigt. Die mit * versehenen Angaben sind Pflicht. Bei klassischen Domainzertifikaten gehören in SAN und Common Name die Domainnamen. Da wir bei einem Client-Zertifikat aber nur die pure Anwesenheit dieses Zertifikats prüfen, ist der Name zweitrangig.

Nun kommen wir zum Erstellen des Zertifikats. Hier können wir festlegen, wie lange es gültig ist, und ebenso wählen, ob wir ein DER- (unverschlüsselt) oder ein PEM-Zertifikat (verschlüsselt) haben wollen.

Zum Abschluss wird das Root-Zertifikat auf dem NetScaler installiert, damit man es an ein Citrix Gateway binden kann.

Die grüne Leiste zeigt an, dass die Installation des Zertifikats erfolgreich war. Mit Done kann man den Wizard beenden.

Erstellung Client Zertifikat

Zurück im SSL-Hauptmenü unter Traffic Management wählen wir nun den Punkt Client Certificate Wizard aus.

Auch hier müssen wir im ersten Schritt den Private Key erzeugen. Die Key Size habe ich analog zum Root-CA-Key auf 2048 eingestellt, diesmal allerdings PEM als Key Format gewählt. Das hat zur Folge, dass ich einen Encoding Algorithm wählen und eine Passphrase eingeben muss.

Im nächsten Schritt folgt der Certificate Signing Request. Da wir zuvor das PEM-Format gewählt haben, müssen wir auch hier bei Key Format PEM auswählen und die Passphrase eingeben. Als Subject Alternative Name und Common Name habe ich ns-itnetx-client-a gewählt.

Die Felder mit * müssen hier wieder befüllt werden. Damit das Zertifikat aussagekräftig bleibt, sollte man möglichst zutreffende Angaben machen.

Nachdem wir den CSR für unser Client-Zertifikat erstellt haben, kommen wir zum eigentlichen Zertifikat. In diesem Abschnitt ist es wichtig, die richtigen Key- und Zertifikatsformate auszuwählen — ebenso die Laufzeit des Zertifikats.

Abschließend kann das Zertifikat auch als Client-Zertifikat auf dem NetScaler installiert werden. Dieser Schritt ist keine Pflicht, denn wir brauchen das Zertifikat auf dem PC, der sich mit dem NetScaler verbindet, nicht auf dem NetScaler selbst.

Führt ihr den Schritt trotzdem durch, kommt es möglicherweise zu einer Fehlermeldung, dass für den Private Key ein Passwort benötigt wird — siehe nächster Screenshot.

Das ist ein bekannter Bug in einigen NetScaler-Versionen. Um ihn zu umgehen, bleibt ihr im Wizard an dieser Stelle stehen und verbindet euch via PuTTY mit dem NetScaler. Dort wechselt ihr in den Ordner /nsconfig/ssl und gebt folgenden Befehl ein:

openssl rsa -in ns-itnetx-client-a.key -out ns-itnetx-client-b.key

Dann müsst ihr die Passphrase eures Keys erneut eingeben. Anschließend entfernt ihr den alten Key und benennt den neuen in den alten um.

rm ns-itnetx-client-a.key
mv ns-itnetx-client-b.key ns-itnetx-client-a.key

Nun sollte auch das Installieren des Client-Zertifikats funktionieren — der grüne Balken gibt darüber Auskunft. Mit Done wird der Wizard beendet.

Exportieren des Client Zertifikates im PKCS12 Format

Zurück im SSL-Hauptmenü unter Traffic Management klicken wir nun auf Export PKCS#12.

Der Dialog ist relativ simpel aufgebaut. Als Erstes wählen wir den Namen der Ausgabedatei, hier im Beispiel ns-itnetx-client-a.p12. Dann müssen noch das crt und der Private Key auf der NetScaler-Appliance gewählt werden. Abschließend brauchen wir ein Export-Passwort, damit der Key nicht von jedem installiert werden kann, sondern nur von der Person, die dieses Passwort kennt. Zusätzlich benötigen wir die PEM-Passphrase für den Private Key.

Unter dem Untermenüpunkt SSL Files → Certificates sollte sich dann unser p12-Zertifikat befinden. Wir wählen es aus und klicken auf Download.

Exportieren des Client Zertifikates im PKCS12 Format mit TLS 1.2 Support

Bei der oben beschriebenen Variante des PKCS12-Exports muss im Citrix Gateway TLS 1.2 deaktiviert werden. Da das kein akzeptabler Zustand ist, gibt es die Möglichkeit, das Zertifikat über die CLI TLS-1.2-kompatibel zu exportieren. Hierzu verbinden wir uns erneut via PuTTY auf den NetScaler, wechseln wieder in das Verzeichnis /nsconfig/ssl und kopieren die Dateien ns-itnetx-client-a.key und ns-itnetx-client-a.crt nach /tmp:

cp ns-itnetx-client-a.key /tmp
cp ns-itnetx-client-a.crt /tmp

Jetzt wechseln wir in das Verzeichnis /tmp und erstellen manuell eine PKCS12-Datei. Wichtig ist die Angabe des CSP — erst damit wird das Zertifikat TLS-1.2-kompatibel.

openssl pkcs12 -export -in ns-itnetx-client-a.crt -inkey ns-itnetx-client-a.key -passin pass:Passw0rt -out ns-itnetx-client-a.p12 -CSP "Microsoft Enhanced RSA and AES Cryptographic Provider"

Nach dem letzten Befehl müssen wir noch eine Passphrase (das Export-Passwort) für unser Zertifikat vergeben.

Via WinSCP können wir uns mit dem NetScaler verbinden und die erzeugte Datei aus /tmp auf den lokalen Rechner kopieren.

Anpassung des Citrix Gateway

Im nächsten Schritt müssen wir das Citrix Gateway anpassen, damit es die Client-Zertifikatsauthentifizierung auch verwendet.

Nachdem wir das Gateway angeklickt haben, das wir bearbeiten wollen, fügen wir im ersten Schritt das CA-Zertifikat hinzu.

Im Dialog CA Certificate Binding wählen wir das von uns generierte Root-CA-Zertifikat aus.

Unter den SSL Parameters ist zum Abschluss wichtig, dass der Punkt Client Authentication aktiv und bei Client Certificate „MANDATORY“ ausgewählt ist. Habt ihr den PKCS12-Export über das Web-Frontend des NetScalers gemacht, wird es vermutlich nötig sein, hier auch TLSv12 zu deaktivieren. Habt ihr das Zertifikat über die CLI erstellt, könnt ihr die Einstellung so lassen.

Installation Client Zertifikat auf Client

Nachdem ihr die p12-Datei per E-Mail oder auf anderem Weg verteilt habt, folgt nun die Anleitung, wie man sie installiert. Zuerst installieren wir das Zertifikat in den Windows-Zertifikatsspeicher. Dazu führen wir einen Doppelklick auf die p12-Datei aus; der Zertifikatsimport-Assistent leitet uns durch die nächsten Schritte.

Hier muss das Passwort eingegeben werden, das wir beim Erstellen der p12-Datei verwendet haben (siehe Abschnitt zur CLI). Anschließend klicken wir auf Weiter.

Hier kann man den Zertifikatsspeicher selbst auswählen oder Windows die Wahl überlassen. Lässt ihr es auf automatisch, landet das Zertifikat direkt unter „Eigene Zertifikate“.

Abschließend klicken wir auf Fertigstellen.

Installation Zertifikat via Mozilla Firefox

Mozilla Firefox hat einen eigenen Zertifikatsspeicher und greift nicht auf den von Windows zurück — wir müssen unser Zertifikat also auch dort installieren. Hierzu öffnen wir Firefox und wechseln im Menü rechts auf den Punkt Einstellungen.

Die Suche im Einstellungsmenü ist sehr hilfreich: einfach „Zertifikat“ eingeben, dann erscheint der passende Abschnitt. Unter „Zertifikate anzeigen …“ öffnet sich ein neues Fenster mit der Zertifikatsverwaltung.

Unter dem Punkt Importieren lässt sich nun das p12-Zertifikat einlesen.

Auch hier muss man das Passwort eingeben, das zum Erstellen der p12-Datei verwendet wurde.

Zur Kontrolle prüfen wir, ob das Zertifikat nun unter „Ihre Zertifikate“ aufgeführt wird.

Test und Umgebung

Wir öffnen die Webseite des Citrix Gateways. Firefox sollte uns mit einem Dialog fragen, welches Zertifikat er verwenden soll. Hat man nur ein persönliches Zertifikat, wird ohnehin immer das richtige angezeigt und man kann einfach auf OK klicken.

War die Authentifizierung mit dem Client-Zertifikat erfolgreich, kommen wir zur eigentlichen Anmeldemaske.

Nach der Eingabe von Benutzername und Passwort kommen wir in den StoreFront, in dem wir unsere Session auswählen. Beim Start der Anwendung fragt er erneut nach dem Client-Zertifikat — deswegen ist es wichtig, dass wir es auch im Windows-Zertifikatsspeicher installiert haben.

Wenn wir alles richtig gemacht haben, sehen wir unseren Citrix Desktop oder unsere Anwendung — ab jetzt zusätzlich mit einem Client-Zertifikat geschützt.

Das war’s. Solltet ihr Fragen oder Anregungen haben, schreibt mir gerne.