Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
Letzte Überarbeitung Beide Seiten der Revision
de:shibidp3x509 [2018/06/21 15:46]
Wolfgang Pempe [Hinweis zur Urheberschaft und weiterführende Informationen]
de:shibidp3x509 [2018/06/25 11:46]
Wolfgang Pempe
Zeile 3: Zeile 3:
 Ein Login-Vorgang am Shibboleth-IdP besteht im Allgemeinen aus verschiedenen //Flows//. Nachdem eine Anfrage von einem Service Provider (SP) empfangen wurde, geht der IdP in einen der verfügbaren Flows zur Authentifizierung über. Dabei handelt es sich beispielsweise um den Password-Flow authn/​Password,​ wobei sich der Nutzer durch die Eingabe von Nutzername und Passwort authentifizieren kann. Diese Daten werden dann gegen eine angeschlossene Datenquelle (häufig LDAP-Server) geprüft. Am Ende dieses Flows steht die //​Subject-Canonicalization//,​ die das Erzeugen eines Benutzernamens (auch //​Principal//​ genannt) für den Nutzer, der sich gerade erfolgreich authentifiziert hat, beschreibt. Unter diesem Benutzernamen ist der Nutzer im weiteren Verlauf schließlich im IdP bekannt. Normalweise (und vor allem bei Verwendung des Password-Flows) entspricht dieser Name schlichtweg dem Nutzernamen. Ein Login-Vorgang am Shibboleth-IdP besteht im Allgemeinen aus verschiedenen //Flows//. Nachdem eine Anfrage von einem Service Provider (SP) empfangen wurde, geht der IdP in einen der verfügbaren Flows zur Authentifizierung über. Dabei handelt es sich beispielsweise um den Password-Flow authn/​Password,​ wobei sich der Nutzer durch die Eingabe von Nutzername und Passwort authentifizieren kann. Diese Daten werden dann gegen eine angeschlossene Datenquelle (häufig LDAP-Server) geprüft. Am Ende dieses Flows steht die //​Subject-Canonicalization//,​ die das Erzeugen eines Benutzernamens (auch //​Principal//​ genannt) für den Nutzer, der sich gerade erfolgreich authentifiziert hat, beschreibt. Unter diesem Benutzernamen ist der Nutzer im weiteren Verlauf schließlich im IdP bekannt. Normalweise (und vor allem bei Verwendung des Password-Flows) entspricht dieser Name schlichtweg dem Nutzernamen.
  
-Neben dem authn/​Password-Flow stellt der Shibboleth-IdP auch den sogenannten authn/​X509-Flow zur Verfügung, welcher die Verwendung von X509-Client-Zertifikaten als Authentifizierungsmethode erlaubt. Die Logik auf Seiten des IdP ist dabei vergleichsweise simpel, da schlichtweg die Umgebungsvariable „javax.servlet.request.X509Certificate“ im Servlet-Container verwendet wird, um zu prüfen, ob die Authentifizierung erfolgreich ist oder nicht. Wie diese Variable befüllt wird, spielt für den IdP dabei keine Rolle [Shib-X509AuthnConfiguration].+Neben dem authn/​Password-Flow stellt der Shibboleth-IdP auch den sogenannten authn/​X509-Flow zur Verfügung, welcher die Verwendung von X509-Client-Zertifikaten als Authentifizierungsmethode erlaubt. Die Logik auf Seiten des IdP ist dabei vergleichsweise simpel, da schlichtweg die Umgebungsvariable „javax.servlet.request.X509Certificate“ im Servlet-Container verwendet wird, um zu prüfen, ob die Authentifizierung erfolgreich ist oder nicht. Wie diese Variable befüllt wird, spielt für den IdP dabei keine Rolle (siehe ​[[https://​wiki.shibboleth.net/​confluence/​display/​IDP30/​X509AuthnConfiguration|Dokumentation im Shibboleth Wiki]]).
  
 Jeder Login-Flow wird über einen dedizierten Endpunkt am IdP zur Verfügung gestellt. Bei authn/X509 handelt es sich dabei um den Pfad /​Authn/​X509. Ein naheliegender Weg besteht nun darin, diesen Endpunkt über den Apache-Webserver zu schützen. Sobald der IdP dann in seinem Ablauf in den authn/​X509-Flow springt (wodurch der User auf den geschützten Pfad auf dem Webserver weitergeleitet wird), greift die Zugriffskontrolle von Apache. Da in diesem Fall als Authentifizierungsmethode X509-Zertifikate eingesetzt werden sollen, kann hierfür das Apache-Modul „mod_ssl“ entsprechend konfiguriert [Apache-mod-ssl] und das Client-Zertifikat validiert werden. Ist diese Validierung erfolgreich,​ kann der Nutzer den Endpunkt des IdP aufrufen. Dort ist „javax.servlet.request.X509Certificate“ nun korrekt befüllt und stellt Informationen über das verwendete Zertifikat bereit. Wenn die Zugriffskontrolle von Apache den Nutzer nicht durchlässt (also die Validierung des Zertifikats nicht erfolgreich war), kommt der Nutzer gar nicht erst zum X509-Endpunkt. Jeder Login-Flow wird über einen dedizierten Endpunkt am IdP zur Verfügung gestellt. Bei authn/X509 handelt es sich dabei um den Pfad /​Authn/​X509. Ein naheliegender Weg besteht nun darin, diesen Endpunkt über den Apache-Webserver zu schützen. Sobald der IdP dann in seinem Ablauf in den authn/​X509-Flow springt (wodurch der User auf den geschützten Pfad auf dem Webserver weitergeleitet wird), greift die Zugriffskontrolle von Apache. Da in diesem Fall als Authentifizierungsmethode X509-Zertifikate eingesetzt werden sollen, kann hierfür das Apache-Modul „mod_ssl“ entsprechend konfiguriert [Apache-mod-ssl] und das Client-Zertifikat validiert werden. Ist diese Validierung erfolgreich,​ kann der Nutzer den Endpunkt des IdP aufrufen. Dort ist „javax.servlet.request.X509Certificate“ nun korrekt befüllt und stellt Informationen über das verwendete Zertifikat bereit. Wenn die Zugriffskontrolle von Apache den Nutzer nicht durchlässt (also die Validierung des Zertifikats nicht erfolgreich war), kommt der Nutzer gar nicht erst zum X509-Endpunkt.
  
-Im Gegensatz zum authn/​Password-Flow,​ wo die //​Subject-Canonicalization//​ im Allgemeinen sehr simpel ist, muss beim authn/​X509-Flow unter Umständen mehr konfiguriert werden. Normalerweise lässt sich der zu verwendende Name aber aus dem //​Subject-DN//​des Client-Zertifikats extrahieren.+Im Gegensatz zum authn/​Password-Flow,​ wo die //​Subject-Canonicalization//​ im Allgemeinen sehr simpel ist, muss beim authn/​X509-Flow unter Umständen mehr konfiguriert werden. Normalerweise lässt sich der zu verwendende Name aber aus dem //​Subject-DN//​ des Client-Zertifikats extrahieren.
  
 ===== Anleitung für Apache, Tomcat und Shibboleth ===== ===== Anleitung für Apache, Tomcat und Shibboleth =====
Zeile 45: Zeile 45:
  
 **Abbildung 1:** Standardmäßig konfigurierte Hinweis-Seite vor der Weiterleitung auf den geschützten Endpunkt **Abbildung 1:** Standardmäßig konfigurierte Hinweis-Seite vor der Weiterleitung auf den geschützten Endpunkt
- 
 ===== Validierung der Zertifikate in Apache ===== ===== Validierung der Zertifikate in Apache =====
  
Zeile 68: Zeile 67:
  ​SSLVerifyClient require  ​SSLVerifyClient require
  ​SSLVerifyDepth 3  ​SSLVerifyDepth 3
- ​SSLOptions ​+StdEnvVars ​+ExportCertData+ ​SSLOptions ​ StdEnvVars ​ ExportCertData
  ​Require expr (%{SSL_CLIENT_S_DN_O} == '​Organisation 1')  ​Require expr (%{SSL_CLIENT_S_DN_O} == '​Organisation 1')
 </​Location>​ </​Location>​
Zeile 82: Zeile 81:
  
 ''​Require''​ erlaubt die Konfiguration von Bedingungen,​ die erfüllt sein müssen, damit der Zugriff gestattet wird und ermöglicht damit die Einschränkung der Authentifizierung auf bestimmte Nutzergruppen. Im folgenden wird diese Direktive genauer betrachtet. ''​Require expr''​ ersetzt im Allgemeinen die veraltete ''​SSLRequire''​-Direktive. ''​Require''​ erlaubt die Konfiguration von Bedingungen,​ die erfüllt sein müssen, damit der Zugriff gestattet wird und ermöglicht damit die Einschränkung der Authentifizierung auf bestimmte Nutzergruppen. Im folgenden wird diese Direktive genauer betrachtet. ''​Require expr''​ ersetzt im Allgemeinen die veraltete ''​SSLRequire''​-Direktive.
- 
 ==== Konfigurationsmöglichkeiten Require ==== ==== Konfigurationsmöglichkeiten Require ====
  
Zeile 98: Zeile 96:
  
 Hier wird mit ''​%{SSL_CLIENT_I_DN_CN}''​ der CN des Issuer des Client-Zertifikats überprüft. Da beide Zertifikate von „Test Eins CA“ ausgestellt wurden, werden beide Zertifikate nicht akzeptiert. Hier wird mit ''​%{SSL_CLIENT_I_DN_CN}''​ der CN des Issuer des Client-Zertifikats überprüft. Da beide Zertifikate von „Test Eins CA“ ausgestellt wurden, werden beide Zertifikate nicht akzeptiert.
- 
 ===== Weiterverarbeitung des Ergebnisses in Shibboleth ===== ===== Weiterverarbeitung des Ergebnisses in Shibboleth =====
  
Zeile 144: Zeile 141:
 Hier wird der wie oben beschrieben erzeugte Principal als Eingangswert für das Attribut ''​uid''​ verwendet. Hier wird der wie oben beschrieben erzeugte Principal als Eingangswert für das Attribut ''​uid''​ verwendet.
  
-===== Hinweis zur Urheberschaft und weiterführende Informationen ===== 
-Diese Anleitung stammt aus einer Dokumentation,​ die von DAASI International GmbH im Auftrag des DFN-CERT erstellt wurde. Das vollständige Dokument, das auch alternative Systemumgebungen behandelt, kann {{de:​anleitung-x509-authn-shibidp-v1.0.pdf|hier heruntergeladen werden}}. 
  
  • Zuletzt geändert: vor 18 Monaten