Teil 2: VerSAMLung – SSO mit SAML oder KCD für interne Webservices

(von Stefan Kuscher und Benjamin Rodewald)

Im ersten Teil unserer Serie „verSAMLung“ haben wir den Citrix Application Delivery Controller (ADC) als SP an die MS Azure MFA Authentifizierung (als IdP) angebunden und so die bequeme und transparente Nutzung von Applikationen auf dem Citrix ADC möglich gemacht, welche mit einer Pre-Authentifizierung geschützt sind.

Bisher muss man sich nach der Anmeldung am Azure (welche der ADC nutzt) noch immer an der eigentlichen Applikation anmelden, aber auch dafür gibt es eine Lösung. Der ADC bietet die Möglichkeit Anmeldedaten zu extrahieren und die diese auch für den Single Sign On im Backend zu benutzen. Im einfachsten Fall, könnte die dem ADC bekannte Username/ Kennwort Kombination z.B. für eine 401 Header Based Authentication genutzt werden, hierfür wäre lediglich eine Traffic Policy, welche Web Single Sign On anschaltet, notwendig.

In Verbindung z.B. mit SAML oder Certificate based Authentication ist das Vorgehen ein klein wenig komplizierter, da auf dem ADC keine Anmeldedaten vorliegen (was dem Sicherheitsniveau natürlich sehr zuträglich ist). Hier muss ein Verfahren genutzt werden, welches alleine mit den im SAML Token vorhandenen oder im Zertifikat vorhandenen Informationen auskommt. Neben der Möglichkeit hier im Backend ebenfalls SAML für den SSO zu benutzen, gibt es die Möglichkeit Kerberos Constrained Delegation (KCD) zu nutzen. Da sämtliche Applikationen aus dem Windows Umfeld damit sehr einfach angebunden werden können, bietet sich diese Möglichkeit oft an um eine Applikationen zu verSAMLen (SAML fähig zu machen).

DNS und NTP auf dem ADC

Wie auch in den späteren Logs erkennbar sein wird, benötigt der Netscaler für die Nutzung von Kerberos eine funktionierende DNS Auflösung der Windows Active Direcory Domain und eine per NTP korrekt synchronisierte Uhrzeit. Für die Domain/ den DC kann theoretisch auf dem Netscaler auch manuell ein Ressource Record hinzugefügt werden. Zur Zeitsynchronisation sind idealerweise mindestens zwei NTP Server einzutragen und die Synchronisation einzuschalten.

Konfiguration AD Account / Delegation

Bei der Constrained Delegation wird ein Servcie Benutzer für den ADC angelegt, dem dann die Delegierung (Zugriff im Auftrag eines anderen Benutzers) erlaubt wird:

Nachdem der Benutzer angelegt wurde, muss der HOST SPN gesetzt werden, damit die Regsiterkarte „Delegation“ erscheint:

setspn -S HOST/[Name d. Deleg.-konto].[FQDN] [NetBIOS-Domainname]\[Name d. Deleg.-konto]

Setzen des Host SPN
Kerberos Delegierungskonto 1/2

Auf der Registerkarte „Delegation“ des Accounts wird dann die eigentliche Delegierung konfiguriert, der Service SPN „http/demoweb.mwdemo.local@MWDEMO.LOCAL“ für einen internen Microsoft IIS Webserver.

Kerberos Delegierungskonto 2/2

Konfiguration KCD auf dem ADC

Für den Account wird dann auf dem ADC ein KCD Objekt erstellt, welches in einer Traffic Policy eingebunden wird:

ADC / KCD-Account
add aaa kcdAccount wiakcd_appdelegation -realmStr MWDEMO.LOCAL -delegatedUser appdelegation -kcdPassword b616477dhgkjifdghuidf4757747593458930580f -encrypted -encryptmethod ENCMTHD_3 -kek -suffix 2021_yy_yy_yy8 -userRealm MWDEMO.LOCAL -serviceSPN "http/demoweb.mwdemo.local@MWDEMO.LOCAL"

Steuerung SSO mittels Traffic Policy und Profile

Mittels einer Traffic Policy und einem Traffic Profile, welches auf dem Load Balancing Vserver gebunden wird, wird gesteuert an welchen Stellen die KCD SSO Settings angewendet werden sollen:

Traffic Profile (unten ist der KCD Account ausgewählt)
add tm trafficAction prof_traf_wia_demoweb_kcd -SSO ON -persistentCookie OFF -InitiateLogout OFF -kcdAccount wiakcd_appdelegation

Traffic Policy über die das o.g. Profile angebunden wird
add tm trafficPolicy pol_traf_wia_demoweb_kcd true prof_traf_wia_demoweb_kcd

Debugging

Ein Debugging ist mittels cat /tmp/nkrb.debug möglich.

Bei unserem ersten Versuch in der Demo Umgebung gab es wegen den unterschiedlichen Realms in Verbindung mit dem Azure AD noch Probleme:

Log Fehler

Wir haben daraufhin in den KCD Settings das Feld „User Realm“ ergänzt, dies verhindert, dass wie oben eine Cross Realm Authentifizeirung zwischen Azure AD und AD Domäne versucht wird. Somit wird die Anfrage „Username@michaelwesseldemo.onmicrosoft.com“ zu der passenden Anfrage „Username@mwdemo.local“ umgewandelt. Dieser „Workaround“ betrifft unserer Testumgebung aufgrund der fehlenden routingfähigen Domäne.

Hier die Logs des Erfolgsfalls:

Log Erfolg – 1
Log Erfolg – 2
Log Erfolg – 3
Log Erfolg – 4
Log Erfolg – 5
Log Erfolg – 6
Log Erfolg – 7

Teil 1: VerSAMLung – Microsoft Azure SSO am Citrix ADC mit SAML

(von Stefan Kuscher und Benjamin Rodewald)

Im Nachfolgenden erläutern wir die Vorteile, wenn Citrix ADC und Azure Active Directory verSAMLt sind und wie wir dies umgesetzt haben.

Folgende Vorteile ergeben sich:

  • Benutzer muss lediglich beim Anmelden am Arbeitsgerät ein Passwort eingeben (SSO) und ist somit automatisch beim Citrix ADC bekannt und bestenfalls alles was mit diesem verknüpft ist. Von dort aus kann z.B. der Zugriff auf Applikationen wie Citrix Xenapp/XenDesktop oder auch Web-Applikationen erfolgen. (Ohne zusätzliche Anmeldung)
  • Azure AD als der Zugangspunkt für Benutzer.
  • Benutzersteuerung/Berechtigungsverwaltung zentral in Azure AD.
  • Conditional Access\Begrenzter Zugriff + MFA (Azure AD P1 Lizenz)

Voraussetzungen

Ablauf

Abbildung Ablauf SAML

Das SAML Protokoll wurde geschaffen um über eine Teilung in Identity Provider (IdP) und Service Provider (SP) die Authentication für Zugriffe zu ermöglichen. Dabei kann sofern eine Applikation z.B. aus der Cloud bezogen wird, trotzdem gegen einem IdP, der unter Kontrolle des eigenen Unternehmens steht authentifiziert werden (in unserem Falle ist dieser in der Cloud als MS Azure AD ausgeprägt). Der SAML SP (AAA auf dem ADC) vertraut diesem IdP und lässt den Request beim Vorhandensein der Authentifizierungsinformationen passieren. Sind die Informationen nicht vorhanden, würde der Citrix ADC auf die Anmeldeseite des SAML IdP weiterleiten.

In unserem speziellen Fall meldet das Gerät bereits beim MS Windows Logon den Benutzer in der Cloud beim Azure AD an. Der Benutzer besitzt daher zum Zeitpunkt seines ersten Zugriffs schon die entsprechenden Anmeldeinformationen und der ADC (bzw. die AAA / SP Komponente) lässt den Benutzer mit SSO passieren.

Deployment einer Enterprise Applikation in Azure (IDP)

Um eine Kommunikation mit dem Citrix ADC via SAML herzustellen benötigt man auf der Azure Active Directory Seite eine Enterprise Applikation. Diese wird im Azure Active Directory -> Enterprise Applications -> New Application
bereitgestellt und wird benötigt um sich mit dem SP per SAML auszutauschen.

Auswählen einer Vorlage im Browse Azure AD Gallery für das Citrix SAML Add On
Microsoft bietet bereits diverse Vorlagen für Enterprise Applikationen an. In unserem Fall benötigen wir die Vorlage „Cirix ADC SAML Connector for Azure AD“.

In der Enterprise Applikation müssen die benötigten Informationen wie Identifier, Reply URL und Sign On URL des Citrix ADC hinterlegt werden.

1.) Enterprise Applikation -> Name der APP -> Single Sign-on
Identifier: https://FQDN
Reply URL: http(s)://FQDN der WebApplication/cgi/samlauth
Sign On URL: https://FQDN/CitrixAuthService/AuthService.asmx


Ebenfalls finden sich dort die Informationen die der Citrix ADC im späteren Verlauf benötigt z.B. die Login URL von Azure Active Directory oder die Metadaten URL.

2.) Mittels Metadaten URL kann der Austausch der Informationen zwischen AAD und ADC automatisch erfolgen. Voraussetzung hierfür ist dass die Version des CItrix ADC den Austausch via Metadaten bereits unterstützt.

3.) Falls ein Austausch via Metadaten nicht in Frage kommt ,können die Informationen auch manuell dem Citrix ADC übergeben werden (Login URL, Zertifikat…).

Screenshot aus dem Citrix ADC SAML Connector

Berechtigungskontrolle für die Enterprise Applikation

Im Anschluss müssen die Benutzer noch die Berechtigungen erhalten, um die Enterprise Applikation nutzen zu können. In unserem Fall stellen wir die Applikation für alle Benutzer zur Verfügung. Wir deaktivieren somit die Zuweisung für einzelne Benutzer komplett:

Assignment required = No

Screenshot Zuweisung einzelner Gruppen und Nutzer
Falls eine Zuweisung an einzelne Benutzer erwünscht ist, einfach „Assignment required“ auf „Yes“ umstellen (Standardeinstellung) und die Zuweisung für Benutzer unter „Users and Groups“ durchführen.

Konfiguration des AAA Servers / SAML SPs auf dem ADC

Um eine Applikation auf dem Netscaler mit einer Preauthentication zu schützen, kommt die AAA Funktion zum Einsatz. Hierfür wird ein AAA Virtual Server Objekt angelegt, welches in der SAML Welt gleichzeitig den SAML Service Provider (SP) darstellt, der in unserem Fall dem Microsoft Azure Identity Provider (IdP) vertraut. Um für eine Web Applikation die Anmeldung am AAA bzw. dem SAML IdP zu erzwingen, wird der AAA Vserver auf dem enstprechenden Load Balancer oder Content Switch Objekt über die „Authentication“ Registerkarte verknüpft.

Anlage des AAA Virtual Servers

Screenshot  Anlage des AAA im Authentication Virtual Servers
add authentication vserver aaademo SSL 0.0.0.0

Ein SSL Zertifikat muss gebunden werden, auch wenn der AAA Vserver nicht direkt angesprochen wird.

bind ssl vserver aaademo -certkeyName AAA_test
bind ssl vserver aaademo -eccCurveName P_256
bind ssl vserver aaademo -eccCurveName P_384
bind ssl vserver aaademo -eccCurveName P_224
bind ssl vserver aaademo -eccCurveName P_521

Screenshot SSL Virtual Server Server Certificate Binding

SAML SP Server

Falls der Import der Metadaten nicht funktioniert, können die Daten auch aus dem XML extrahiert werden und manuell hinterlegt werden. Das IdP Zertifikat lässt sich auf der Azure Enterprise Appliacation im Azure Portal exportieren (Base64 bietet sich an).

Screenshot mögliche Konfiguration aus dem Configure Authentication SAML Server
SAML Action 1/3
SAML Action 2/3

Nach Citrix Best Practices muss zur Absicherung eine Relaystate Regel konfiguriert werden (vergl. Citrix Application Delivery Controller and Citrix Gateway – SAML Configuration Reference Guide):

SAML Action 3/3 – Relaystate Regel
add authentication samlAction AzureSSOHapp-SAMLServer -samlIdPCertName ADC-SAML-Connector -samlRedirectUrl "https://login.microsoftonline.com/883dfdf-154e-4fdf33-b857-1dfdf8d/saml2" -samlIssuerName "https://vipdemo.michael-wessel.de" -relaystateRule "AAA.LOGIN.RELAYSTATE.EQ(\"https://vipdemo.michael-wessel.de/\")" -logoutURL "https://login.microsoftonline.com/8dda6db-dde-4e33-dddd7-173179eb1e8d/saml2"

SAML SP Policy

Screenshot Configure Authentication Policy
add authentication Policy pol_AzureSSOHapp -rule true -action AzureSSOHapp-SAMLServer

Die erstellte SAML SP Policy muss dann an den AAA Virtual Server / SAML SP gebunden werden und der AAA Virtual Server auf der Registerkarte „Authentication“ des Load Balancers oder Content Switches verknüpft werden. Auf ADCs mit einer aktuellen Firmware haben sich zudem die Defaults für die Athorization geändert, so dass eine pasende Authorization Policy anzulegen ist.

Ausblick

Mit dem Vorliegen der Anmeldeinformationen kann auf dem Netscaler auch eine detaillierte Berechtigung auf bestimmte URLs anhand von z.B. Gruppenmitgliedschaften über Authorization Policies erfolgen.

Außerdem ist es möglich authentifizierte Benutzer z.B. per SAML oder KCD an Servern hinter der Pre-Authentication automatisch anzumelden.

Im MS Azure sind umfangreiche Möglichkeiten der Multi Faktor Authentifizierung und des Conditional Access möglich.

Mehr zu diesen und anderen Möglichkeiten werden sie in den weiteren Artikeln unserer Serie „verSAMLt“ lesen.