Table of Contents
Seit Citrix XenApp / XenDesktop 7.9 ist der Federated Authentication Service (FAS) verfügbar. Über Citrix FAS ist es möglich einen Benutzer über SAML zu authentifizieren und somit Citrix als Service Provider, an bestehende Identity Provider, wie zum Beispiel Azure-AD, anzubinden.
Ablauf der SAML Authentifizierung
- Der Benutzer ruft die FQDN (z.B. citrix.deyda.net) des Citrix Gateway vServer (Service Provider) auf, um seine VA/VD Ressourcen starten zu können
- Der Citrix Gateway vServer leitet den nicht authentifizierten Benutzer direkt weiter an den Identity Provider (Azure AD) um sich dort zu authentifizieren (saml:authnRequest)
- Der Identity Provider verweist auf seine SingleSignOnService URL (z.B. login.microsoftonline.com) und der User muss sich authentifizieren.
- Der Benutzer gibt seine AD Zugangsdaten ein und diese werden vom Identity Provider gegenüber der User Database geprüft
- Bei erfolgreicher Überprüfung in der User Database wird der IdP informiert
- Der IdP stellt einen Token (SAML Assertion) aus und übermittelt diesen an das Citrix Gateway (saml:response)
- Citrix Gateway prüft den Token (Assertion Signature) und extrahiert den UPN aus dem Assertion Token. Dies erlaubt den Zugriff per SSO auf die VA/VD Farm über FAS (Der SP hat keinen Zugriff auf die Zugangsdaten des Benutzers)
Einrichtung SAML Authentifizierung
Ich gehe in meiner Anleitung von einer SAML Authentifizierung zwischen Azure AD und dem Citrix ADC (ehemals NetScaler) Version > 12 aus. Die SAML Authentifizierung würde natürlich auch mit einer ADFS Umgebung funktionieren.
Voraussetzungen
Ich setze die folgenden Dinge voraus und gehe nicht im Detail auf diese ein:
- Voll funktionsfähige Citrix Virtual Apps and Desktop Umgebung (Minimum Version 7.9)
- Citrix ADC mit erfolgreicher Basis Konfiguration und eingespielter Enterprise oder Platinum Lizenz
- Interne und externe DNS Einträge für Unified Gateway-vServer (z.B. citrix.deyda.net)
- Zertifikate für die DNS Einträge (Wildcard Zertifikate sind am einfachsten)
- Konfigurierter Unified Gateway-vServer
- Vorhandener Azure Tenant mit Azure AD Basis Konfiguration (Domäne, AAD Sync) & aktivierter Azure AD Premium Lizenz
Active Directory
Wenn man nicht den gleichen UPN in Azure-AD und in der lokalen Active Directory verwendet, muss man diesen noch anpassen.
Hierfür öffnet man das Tool Active Directory Domänen und Vertrauensstellungen.
Klickt im Fenster auf den obersten Punkt (Active Directory Domänen und Vertrauensstellungen) mit der rechten Maustaste und wählt dort Eigenschaften aus.
Im folgenden Fenster trägt man unter Alternative UPN Suffixe die gewünschte Domäne (z.B. deyda.net) ein und Bestätigt die Eingabe über Add.
Prüft das der Domänen Name richtig eingefügt wurde und Bestätigt dies per OK.
Nun kann man per Bulk Edit oder manuell den UPN der benötigten Benutzer an die Azure-AD Domäne anpassen.
Certificate Authority
Als nächstes muss eine PKI Umgebung, falls keine in der Domäne vorhanden ist, erstellt werden. Begebt euch hierfür auf die Maschine die diese Rolle erhalten soll. In meinem Beispiel ist es der Domänen Controller selber.
Hierfür gehen wir auf den Server Manager und klicken dort auf Add Roles and Features hinzufügen.
Klickt euch durch den Wizard bis zum Punkt Server Roles und wählt dort den Punkt Active Directory Certificate Services aus. Bestätigt die Auswahl durch Add Features.
Klickt danach Next im Server Roles, Features und AD CS Reiter.
Unter dem Punkt Role Services wählt ihr die folgenden Punkte aus:
- Certification Authority
- Certification Authority Web Enrollment
Wenn Pop Up Fenster mit zusätzlichen Features erscheinen, bestätigt ihr diese ebenfalls mit Add Features.
Schließt die Installation mit Install ab.
Wählt nun im Server Manager den Notifications Punkt aus und klickt auf Configure Active Directory Certificate Services.
In der folgenden Konfiguration können die Standard Einstellungen mit Next bestätigt werden.
Von mir verwendete Konfiguration:
- Setup Type (Enterprise CA)
- CA Type (Root CA)
- Private Key (Create a new private key)
- CA Name (Deyda-CA)
- Validity Period (5 Jahre)
Bestätigt die Konfiguration mit Configure.
Jetzt muss dem Domänen Controller ein Zertifikat der lokalen CA ausgestellt werden.
Hierfür öffnet ihr auf dem Domänen Controller die MMC.
Hier klickt auf File und Add/Remove Snap-in…
Klickt nun auf Certificates und auf Add.
Im folgenden Fenster wählt Computer account aus und bestätigt dies mit Next.
Abschließend noch mit OK das Fenster schließen.
Mit der rechten Maustaste auf Personal klicken und dann auf All Tasks > Request New Certificate klicken.
Im Certificate Enrollment Fenster wählt ihr Active Directory Enrollment Policy aus und klickt auf Next.
Wählt Domain Controller Authentication aus und bestätigt dies mit Enroll.
Citrix Federated Authentication Service
Nun können wir den FAS Server installieren und konfigurieren. In meinem Beispiel installiere ich den FAS Part mit auf den StoreFront Server.
Hierfür mountet das ISO eurer Virtual Apps & Desktops Version und startet autoselect.exe.
Startet daraufhin die Installation, indem ihr im folgenden Fenster auf Federated Authentication Service klickt.
Klickt auf „I have read, understand, and … “ und bestätigt dies mit Next.
Bestätigt nun die folgenden Standard Einstellungen mit Next.
Und klickt wieder Next.
Startet die Installation mit Finish.
Gegebenenfalls müsst ihr euren Server neu starten.
Um die Basiskonfiguration des FAS über die GPO durchführen zu können, kopiert die ADMX/ADML Dateien vom angegebenen Pfad eures FAS Servers.
C:\Program Files\Citrix\Federated Authentication Service\PolicyDefinitions
Fügt diese in den PolicyDefinitions Store eurer Active Directory ein.
Erstellt eine neue oder editiert eine vorhandene GPO, die von den folgenden Systemen abgegriffen wird:
- FAS Server
- StoreFront Server
- VDA Worker
In der GPO geht auf den Pfad.
1 |
Computer Configuration \ Policies \ Administrative Templates \ Citrix Components \ Authentication |
Tragt in Federated Authentication Service euren FAS Server ein.
Aktualisiert euren lokalen GPOs auf dem FAS Server durch ausführen von gpupdate /force in der CMD.
Danach kontrolliert die Registry, das der benötigte Eintrag auf dem System geschrieben wurde.
1 |
HKEY_LOCAL_MACHINE \ SOFTWARE \ Policies \ Citrix \ Authentication \ UserCredentialService \ Addresses |
Oder / Und
1 |
HKEY_LOCAL_MACHINE \ SOFTWARE \ WOW6432Node \ Policies \ Citrix \ Authentication \ UserCredentialService \ Addresses |
Starte nun das Citrix Federated Authentication Service Tool mit dem “run as administrator” Parameter.
Hier seht ihr nun die Liste der FAS Server, die über GPO konfiguriert worden sind. Klickt auf OK.
Im folgenden Fenster wird der FAS konfiguriert.
Klickt im Rahmen 1 Deploy certificate templates auf Start.
Klickt auf OK , damit die Konfiguration im Hintergrund automatisch durchgeführt wird.
Nach erfolgreicher Einrichtung erscheint der Rahmen 1 in Grün.
Klickt danach im Rahmen 2 Setup Certificate Authority auf Start.
Wählt unter Certificate Authority eure für FAS konfigurierte / erstellte CA aus (z.B. DC01.deyda.local\CA-DEYDA ) und klickt auf OK.
Bei erfolgreicher Einrichtung erscheint der Rahmen 2 auch in Grün.
Klickt nun auf Start bei 3 Authorize this Service.
Wählt hier die in Punkt 2 ausgewählte CA aus und klickt OK.
Punkt 3 erscheint nun in Gelb, weil nun der Certificate Request genehmigt werden muss.
Verbindet euch wieder auf den Server mit der FAS CA und öffnet den Server Manager. Im Server Manager klickt auf Tools > Certification Authority.
In der Certification Authority Konsole klickt auf Pending Requests.
Dort klickt ihr mit der rechten Maustaste auf den gerade erstellten Request eures FAS Servers (z.B. DEYDA\CTX01) und klickt dort auf All Tasks > Issue.
Danach erscheint das Zertifikat unter Issued Certificates.
Das nun genehmigte Zertifikat läuft im Normalfall in 2 Jahren aus.
Daher ist es zu empfehlen dieses Zertifikat ins Monitoring aufzunehmen, damit man das Zertifikat erneuert, bevor es abläuft.
Hier die PowerShell Befehle um das Datum zu erfahren (Ersetzt CTX01.deyda.local mit eurem FAS Server).
1 2 |
Add-PsSnapin Citrix.Authentication.FederatedAuthenticationService.V1 Get-FasAuthorizationCertificate -FullCertInfo -address CTX01.deyda.local |
Nach dem Genehmigen erscheinen alle Punkte in der FAS Configuration Konsole in Grün.
In den neusten Versionen des Virtual Apps & Desktops Image wird bei der Installation des FAS Servers, auch die Citrix FAS Administration BETA Konsole installiert. Alle Tätigkeiten bezüglich Konfiguration, können auch hiermit durchgeführt werden. Ich habe dies auch schon geprüft und konnte keine Fehler feststellen.
Klickt nun auf den User Rules Tab in der FAS Configuration Konsole und wählt folgendes im oberen Bereich aus:
- Rule name (default)
- Certificate Authority (Eure FAS CA, z.B. DC01.deyda.local\CA-DEYDA)
- Certificate Template (Citrix_SmartcardLogon)
Im unteren Bereich unter Security Access Control Lists klickt auf Edit neben dem Punkt List of Storefront servers that can use this rule.
Im folgenden Fenster löscht ihr die Gruppe Domain Computers.
Fügt daraufhin eure StoreFront Server hinzu und gibt ihm das Recht Assert Identity (Allow). Bestätigt dies mit OK.
Unter dem Punkt List of VDA desktops and servers that can be logged into by this rule könnt ihr die Liste der Citrix Worker eingrenzen, auf die man sich per SAML einloggen kann. Im Standard steht dies auf Domain Computers, was auch so bleiben kann.
Im letzten Punkt List of users that StoreFront can log in using this rule könnt ihr die Benutzer einschränken die sich über SAML in Citrix einloggen können. Im Standard ist hier die Gruppe Domain Users hinterlegt, die auch so bleiben kann.
Nachdem alles definiert ist klickt auf Apply und schliesst die FAS Konsole.
StoreFront
Jetzt konfigurieren wir den StoreFront Server, so dass er mit dem FAS Server sprechen kann.
Geht auf eure Citrix StoreFront Konsole und notiert euch eure Stores die ihr für FAS konfigurieren wollt (z.B. Store).
Startet die PowerShell als Administrator auf einem StoreFront Server.
Führt die folgenden Befehle im PowerShell aus (Ändert hierfür den Store Pfad in Zeile 2 in euren Store Namen um).
1 2 3 4 5 6 |
Get-Module "Citrix.StoreFront.*" -ListAvailable | Import-Module $StoreVirtualPath = "/Citrix/Store" $store = Get-STFStoreService -VirtualPath $StoreVirtualPath $auth = Get-STFAuthenticationService -StoreService $store Set-STFClaimsFactoryNames -AuthenticationService $auth -ClaimsFactoryName "FASClaimsFactory" Set-STFStoreLaunchOptions -StoreService $store -VdaLogonDataProvider "FASLogonDataProvider" |
Wenn ihr dies wieder deaktivieren wollt, z.B. fürs Troubleshooting, könnt ihr dies mit dem folgenden Befehl durchführen.
1 2 3 4 5 6 |
Get-Module "Citrix.StoreFront.*" -ListAvailable | Import-Module $StoreVirtualPath = "/Citrix/Store" $store = Get-STFStoreService -VirtualPath $StoreVirtualPath $auth = Get-STFAuthenticationService -StoreService $store Set-STFClaimsFactoryNames -AuthenticationService $auth -ClaimsFactoryName "standardClaimsFactory" Set-STFStoreLaunchOptions -StoreService $store -VdaLogonDataProvider "" |
Öffnet nun wieder die Citrix StoreFront Konsole und klickt dort auf Manage Authentication Methods im Panel auf der rechten Seite.
Aktivier Pass-through from Citrix Gateway, wenn es nicht aktiviert ist.
Klickt dann auf das Zahnrad bei Pass-through from Citrix Gateway und auf Configure Delegated Authentication.
Im folgenden Fenster aktiviert das Kästchen neben Fully delegate credential validation to Citrix Gateway und klickt zwei mal auf OK um die Fenster zu schließen.
Klickt, zurück im Hauptfenster der StoreFront Konsole, auf Manage Citrix Gateways.
In Manage Citrix Gateways fügt ihr ein neues Gateway hinzu oder editiert ein bestehendes, für die Verbindung zu eurem Citrix Gateway das später als SP genutzt werden soll.
In meinem Fall habe ich ein vorhandenes über Edit editiert und folgendes unter Authentication Settings konfiguriert:
- Version (10.0 (Build69.4) or later)
- VServer IP address (IP Adresse der Gateway VIP, z.B. 10.0.0.8)
- Logon type (Domain)
- Callback URL (Adresse des Callback, z.B. https://citrix.deyda.net)
Bestätigt die Einstellungen mit Finish.
Wichtig hierbei ist, dass auch im internen DNS die Callback Adresse citrix.deyda.net hinterlegt ist.
Klickt im Hauptmenü der StoreFront Konsole auf Configure Remote Access Settings und kontrolliert das der Punkt …(No VPN tunnel) aktiviert ist.
Delivery Controller
Auf dem Delivery Controller muss noch der XML Trust aktiviert werden, wenn dies nicht schon aktiviert ist.
Hierfür startet ihr eine PowerShell als Administrator auf einem Delivery Controller.
Setzt hier nun folgenden Befehl ab:
1 2 |
asnp citrix.* Set-BrokerSite -TrustRequestsSentToTheXmlServicePort $true |
In den neueren Version von CVAD (>1906) folgt nach dem ausführen der PowerShell Befehle noch ein Citrix Cloud Fenster, in dem man seine Credentials hinterlegen muss.
Azure-AD
Um unseren kommenden Service Provider anzubinden, müssen wir nun im Azure AD eine Custom Application erstellen.
Um die Azure-AD zu konfigurieren, melden wir uns bei portal.azure.com an.
Im Azure Navigation Panel klicken wir auf Azure Active Directory.
Im Azure Active Directory Fenster klickt auf Unternehmensanwendungen.
Klickt nun auf Neue Anwendung.
Und dann auf Nicht-Kataloganwendung
Im Fenster Eigene Anwendung hinzufügen konfiguriert den Namen der Anwendung für den Endbenutzer, z.B. Citrix FAS und klickt auf Hinzufügen.
Wartet bis die Anwendung erstellt ist. Informationen erhält man über den Punkt Benachrichtigungen am oberen Rand.
Wenn die Anwendung erstellt wurde, klickt auf Azure Active Directory > Unternehmensanwendungen > Alle Anwendungen und dort auf die gerade erstellte Anwendung (z.B. Citrix FAS).
In der Unternehmensanwendung klickt auf Einmaliges Anmelden.
Unter SSO-Methode klickt auf SAML.
Im nun folgenden Fenster wird die Kommunikation zwischen Identity Provider und Service Provider konfiguriert.
Klickt im oberen Bereich mit der Nummer 1 auf das Stift Symbol um die Grundlegende SAML-Konfiguration zu bearbeiten.
Tragt hier nun folgendes ein:
- Bezeichner (Adresse Citrix Gateway, z.B. https://citrix.deyda.net)
- Antwort-URL (Adresse Citrix Gateway mit /cgi/samlauth, z.B. https://citrix.deyda.net/cgi/samlauth)
Bestätigt eure Eingabe mit Save.
Die Einstellungen unter Punkt 2 Benutzerattribute und Ansprüche, können im vorhanden Standard bestehen bleiben.
Unter SAML-Signaturzertifikat (Punkt 3), ladet das Zertifikat (Base 64) für den Service Provider (Citrix ADC) herunter.
Aus Bereich 4 (Citrix FAS einrichten) die angezeigten URLs (URL für Anmeldung, Azure AD-Bezeichner & Abmelde-URL), in eine lokale Datei kopieren.
Klickt auf die Bestätigung Checkbox am unteren Rand und klickt auf Next.
Um nun Benutzern die SAML Authentifizierung für Citrix zu erlauben, müssen diese die Anwendung zugeordnet bekommen.
Klickt auf Benutzer und Gruppen.
Klickt nun auf Benutzer hinzufügen.
Markiert nun aus der Liste die Benutzer die Zugriff erhalten sollen (oder wählt alle Benutzer aus) und bestätigt dies mit Zuweisen.
Ich habe nur einen Test Benutzer (user01) hierfür berechtigt.
Citrix ADC
Als letztes muss der Citrix ADC, für die Kommunikation mit dem Identity Provider (Azure-AD), konfiguriert werden.
Hierfür melden wir uns an die Admin Weboberfläche des Citrix ADC an und navigieren nach Traffic Management > SSL > Certificates > Server Certificates.
Dort klickt auf Install, um das vorher aus dem Azure Portal heruntergeladene Zertifikat, einzuspielen.
Gebt folgendes ein und bestätigt die Eingabe mit Install:
- Certificate-Key Pair Name (Eindeutiger Name für das SAML Signatur Zertifikat, z.B. SAML-Azure-AD)
- Certificate File Name (Heruntergeladene Signatur Zertifikat, z.B. Citrix FAS.cer)
Das installierte Zertifikat ist danach nicht unter Server oder Client Certificates zu finden, sondern unter Unknown Certificates.
Danach navigieren wir nach Security > AAA – Application Traffic > Virtual Servers um die SAML Authentication Policy und den Authentication vServer zu erstellen.
Klickt unter Authentication Virtual Servers auf Add um einen neuen vServer zu erstellen.
Gebt nun folgendes ein:
- Name (Name des vServers, z.B. Azure-AD_auth_VS
- IP Address Type (Non Addressable)
Klickt im Anschluss auf OK.
Im folgenden Wizard klickt auf No Server Certificate um euer Server Zertifikat anzubinden (Nicht das IdP Zertifikat).
Klickt in den Bereich Click to select.
Wählt euer Citrix ADC Server Zertifikat aus (z.B. bei mir mein Wildcard Zertifikat) und klickt auf Select.
Klickt nun auf Bind.
Wenn das Zertifikat angebunden ist (1 Server Certificate) klickt auf Continue.
Unter dem Menüpunkt Advanced Authentication Policies klickt auf No Authentication Policy.
Klickt unter Select Policy auf das + Symbol.
Gebt folgendes ein:
- Name (Name der Authentication Policy, z.B. saml_auth_pol)
- Action Type (SAML)
- Expression (HTTP.REQ.IS_VALID)
Klickt auf das + Symbol neben Action.
Konfiguriert nun den Authentication SAML Server mit folgenden Parametern:
- Name (Name des SAML Authentication Server, z.B. saml_auth_server)
- IDP Certificate Name (Zertifikat aus der Azure-AD Anwendung, z.B. SAML-Azure-AD)
- Redirect URL (URL für Anmeldung aus der Azure-AD Anwendung, z.B. https://login.microsoftonline.com/…/saml2)
- Single Logout URL (URL für Anmeldung aus der Azure-AD Anwendung, z.B. https://login.microsoftonline.com/…/saml2)
- Signing Certificate Name (Server Zertifikat des Citrix Gateway, z.B. Wildcard201904)
- Issuer Name (FQDN des Citrix Gateway vServer, z.B. https://citrix.deyda.net)
Bestätigt die Eingabe mit Create.
Überprüft die Eingaben nochmals und klickt auf Create.
Unter Policy Binding kontrolliert die Eingaben und ändert folgendes:
- Goto Expression (END)
Bestätigt dies mit Bind.
Wenn die Authentication Policy angebunden ist klickt auf Continue und Done.
Um die Konfiguration auf dem Citrix ADC abzuschliessen müssen wir nur noch die gerade erstellte SAML Authentication Policy an unseren Gateway Virtual Server binden.
Hierfür navigieren wir nach NetScaler Gateway > Virtual Servers.
Wählt den Gateway vServer aus, der im StoreFront vorher für FAS konfiguriert wurde (z.B. https://citrix.deyda.net = UG_VPN_ug_10.0.0.8_443) und klickt auf Edit.
Löst alle angebundenen LDAP oder RADIUS Authentication policy vom vServer. Klickt hierfür auf die Policies (1 LDAP Policy).
Wählt die Policies aus und klickt Unbind.
Bestätigt das Fenster mit Yes.
Prüft das weder in Basic Authentication, noch in Advanced Authentication eine Policy angebunden ist.
Klickt auf der rechten Seite auf Authentication Profile unter Advanced Settings.
Klickt auf das + Symbol unter Authentication Profile.
Tragt unter Create Authentication Profile einen Namen (z.B. saml_auth_profile) ein und klickt auf Click to select unter Authentication Virtual Server.
Wählt den vorher erstellten Authentication Virtual Server (Azure-AD_auth_VS) aus und klickt auf Select.
Bestätigt die Eingabe durch klick auf Create.
Klickt auf OK und auf Done.
Navigiert nach NetScaler Gateway > Global Settings um die Single Sign-on Domain zu löschen.
Klickt auf Change Global Settings.
Löscht den eventuellen Eintrag unter Single Sign-on Domain.
Gegebenenfalls müssen auch die Policies des Gateway vServers bezüglich Single Sign-on Domain bereinigt werden.
Ergebnis
Wenn wir nun die FQDN des Gateways (https://citrix.deyda.net) per Browser öffnen.
Werden wir direkt an Azure-AD weitergeleitet und können uns dort authentifizieren.
Wir bekommen unsere Citrix Ressourcen aufgezeigt und können diese starten.
Weiterführender Artikel von Julian Mooren über Citrix FAS.