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.