- de:shibidp:prepare-zert|Vorarbeiten: Zertifikate ^ de:shibidp:uebersicht|Überblick: Tutorial zur IdP-Inbetriebnahme ^ de:shibidp:install|IdP-Installation ->
====== IdP-Vorarbeiten: Webserver ======
Die TCP-Ports 443 und 8443 müssen auf dem IdP für eingehende Zugriffe geöffnet sein! Die Verwendung des Backchannels auf Port 8443 wird im [[https://shibboleth.atlassian.net/wiki/spaces/IDP4/pages/1265631506/SecurityAndNetworking#Back-Channel-Support|Shibboleth-Wiki]] erklärt.
===== Linux mit Apache Webserver =====
==== Installation ====
=== Debian 12 ===
root@idp:~# apt install apache2
==== Apache-Module aktivieren ====
root@idp:~# a2enmod ssl headers proxy proxy_ajp
Abschließend muss der Web Server neu gestartet werden
root@idp:~# systemctl restart apache2
==== VHost-Konfiguration ====
Eine Anleitung zur Erstellung einer korrekten Zertifikatskette findet sich [[de:certificates#die_ssl-zertifikatskette_auf_ihrem_webserver|hier]].
Im Mozilla-Wiki finden Sie Empfehlungen für eine [[https://wiki.mozilla.org/Security/Server_Side_TLS|sichere SSL-Konfiguration]]. Wir empfehlen Ihnen, mittels der Seite SSLLabs Ihren fertigen Webserver zu testen.
################################################
#
# Bitte im Folgenden 'IDP-IP-ADRESSE' und ggf. 'IDP-IPv6-ADRESSE'
# jeweils durch die entsprechende IP und 'idp.uni-beispiel.de' durch
# den FQDN Ihres IdPs ersetzen!
#
################################################
#
# SingleSignOnService auf Port 443
#
ServerName idp.uni-beispiel.de
SSLEngine on
# Die Zertifikatsdatei enthält die vollständige Kette, vgl.
# http://httpd.apache.org/docs/current/mod/mod_ssl.html#sslcertificatechainfile
SSLCertificateFile /etc/ssl/localcerts/idp.uni-beispiel.crt.pem
SSLCertificateKeyFile /etc/ssl/private/idp.uni-beispiel.key.pem
AddDefaultCharset UTF-8
Require all granted
ProxyPass ajp://localhost:8009/idp
# "SAMEORIGIN" vermeidet etwaige Fehlermeldungen
# im Browser beim Logout über mehrere SPs,
# da hierbei mit iframes gearbeitet wird
Header always append X-FRAME-OPTIONS "SAMEORIGIN"
# Support für favicon.ico, robots.txt und ggfs. Info-Seiten
DocumentRoot /opt/shibboleth-idp/htdocs
Require all granted
################################################
#
# ArtifactResolutionService und AttributeService
#
# Port 8443 sollte an anderer Stelle angeschaltet werden (Listen-Direktive).
ServerName idp.uni-beispiel.de
SSLEngine on
# Die Zertifikatsdatei enthält die vollständige Kette, vgl.
# http://httpd.apache.org/docs/current/mod/mod_ssl.html#sslcertificatechainfile
# ACHTUNG: Wenn Sie für die SAML-Kommunikation ein anderes, länger laufendes Zertifikat
# als für den Webserver verwenden, müssen Sie hier dieses SAML-Zertifikat eintragen.
# Siehe unten bei "Backchannel Requests".
SSLCertificateFile /etc/ssl/localcerts/idp.uni-beispiel.crt.pem
SSLCertificateKeyFile /etc/ssl/private/idp.uni-beispiel.key.pem
# Diese drei SSL-Optionen sind zwingend notwendig
# damit SP-Abfragen auf diesen Port funktionieren!
# Details siehe Shibboleth-Wiki
SSLVerifyClient optional_no_ca
SSLVerifyDepth 10
SSLOptions +StdEnvVars +ExportCertData
Require all granted
ProxyPass ajp://localhost:8009/idp
Laden Sie nach den Änderungen die Konfiguration des Webservers neu:
root@idp:~# service apache2 reload
Lassen Sie beim Reload des Apache den Apache-Error-Log in einem zweiten Fenster mitlaufen um etwaige Fehler oder Warnings sehen zu können:
root@idp:~# tail -f /var/log/apache2/error_log
===== Windows mit Apache Webserver =====
Beispiel für eine Minimal-Konfiguration unter Windows (bereitgestellt von Thomas Glatzer, Uni Mainz):
ServerRoot "C:/Program Files/Apache/Apache24"
#
# Dynamic Shared Object (DSO) Support
#
LoadModule authn_core_module modules/mod_authn_core.so
LoadModule authz_core_module modules/mod_authz_core.so
LoadModule headers_module modules/mod_headers.so
LoadModule reqtimeout_module modules/mod_reqtimeout.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule mime_module modules/mod_mime.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule ssl_module modules/mod_ssl.so
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
# 'Main' server configuration
ServerAdmin glatzert@uni-mainz.de
ServerName shib.uni-mainz.de
# Deny access to the entirety of your server's filesystem. You must
# explicitly permit access to web content directories in other
# blocks below.
AllowOverride none
Require all denied
DocumentRoot "c:/inetpub/shib.uni-mainz.de"
Options None
AllowOverride None
Require all granted
Require all denied
ErrorLog "C:/inetpub/logs/apache/error.log"
TransferLog "C:/inetpub/logs/apache/access.log"
LogLevel warn
TypesConfig conf/mime.types
AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz
Include conf/extra/httpd-ssl.conf
Include conf/extra/shib-sp.conf
Include conf/extra/shib-idp.conf
AddType application/x-x509-ca-cert .crt
AddType application/x-pkcs7-crl .crl
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
# SSLProtocol HIER INFORMIEREN SIE SICH BITTE ÜBER EINE STATE-OF-THE-ART-KONFIGURATION
# SSLCipherSuite HIER INFORMIEREN SIE SICH BITTE ÜBER EINE STATE-OF-THE-ART-KONFIGURATION
# Nützliche Quelle: https://wiki.mozilla.org/Security/Server_Side_TLS
SSLHonorCipherOrder On
SSLUseStapling off
SSLStaplingCache "shmcb:c:/inetpub/logs/apache/ssl_stapling(512000)"
SSLStaplingReturnResponderErrors off
SSLSessionCache "shmcb:c:/inetpub/logs/apache/ssl_scache(512000)"
SSLSessionCacheTimeout 300
SSLCertificateFile "C:/inetpub/shibboleth/idp/credentials/shib.uni-mainz.de.crt"
SSLCertificateKeyFile "C:/inetpub/shibboleth/idp/credentials/shib.uni-mainz.de.key"
################################################
#
# SingleSignOnService
#
Listen 443
DocumentRoot "C:/inetpub/shib.uni-mainz.de"
ServerAdmin glatzert@uni-mainz.de
SSLEngine on
Header add Strict-Transport-Security "max-age=15768000"
Require all granted
ProxyPass /idp/ http://localhost:8080/idp/
################################################
#
# ArtifactResolutionService und AttributeService
#
Listen 8443
DocumentRoot "C:/inetpub/shib.uni-mainz.de"
ServerAdmin glatzert@uni-mainz.de
SSLEngine on
Header add Strict-Transport-Security "max-age=15768000"
Require all granted
ProxyPass /idp/ http://localhost:8080/idp/
# https://wiki.shibboleth.net/confluence/display/SHIB2/NativeSPApacheConfig
LoadModule mod_shib C:/inetpub/shibboleth/sp/lib64/shibboleth/mod_shib_24.so
AuthType None
Require all granted
AuthType shibboleth
ShibRequestSetting requireSession 1
Require shibboleth
===== Besonderheiten bei Backchannel Requests =====
Der Backchannel auf Port 8443 für die Server-to-Server-Kommunikation ist für eine funktionierende IdP-Konfiguration heutzutage nicht mehr zwingend nötig. Die obige Webserver-Konfiguration zeigt den Standardfall, in dem auf Port 8443 dasselbe Zertifikat verwendet wird wie auf Port 443. Diese Webserver-Konfiguration kann bei manchen Service Providern zu Problemen führen, wenn für die SAML-Kommunikation beim IdP ein abweichendes Zertifikat verwendet wird (getestet nur mit Shibboleth SP):
Wenn ein Shibboleth Service Provider eine [[https://shibboleth.atlassian.net/wiki/spaces/SP3/pages/2065335187/ExplicitKeyTrustEngine|explizite Key Trust Engine]] gesetzt hat, dann holt er das IdP-Zertifikat, dem er vertraut, direkt aus den IdP-Metadaten. Dort findet er das Zertifikat, dass für die SAML-Kommunikation mit dem IdP verwendet werden soll. Wenn nun das Webserver- und das SAML-Zertifkat nicht identisch sind, sondern wenn z.B. für die SAML-Kommunikation ein selbstsigniertes Zertifikat verwendet wird, kommt es bei der Zertifikatsvalidierung zu einem Fehler, wenn
* eine Attribute Query auf Port 8443 gestellt wird oder
* ein Single Logout Request via SOAP auf Port 8443 gestellt wird.
Stellt derselbe SP die beiden Anfragen an Port 443, so ignoriert er das fehlende Vertrauen und baut eine Verbindung zum IdP auf, obwohl das Zertifikat am Webserver dem in den Metadaten publizierten Zertifikat nicht entspricht.
Um sicherzustellen, dass ein Shibboleth SP mit gesetzter Key Trust Engine auch die genannten Backchannel-Requests absetzen kann, können Sie am Backchannel das Zertifikat einsetzen, das für die SAML-Kommunikation in den Metadaten publiziert ist.
ServerName idp.uni-beispiel.de
SSLEngine on
SSLCertificateFile /etc/ssl/localcerts/idp.uni-beispiel.crt.pem
SSLCertificateKeyFile /etc/ssl/private/idp.uni-beispiel.key.pem
# REST WIE OBEN
################################################
# Hier muss der Port im Servername genannt werden,
# damit das abweichende Zertifikat genutzt wird.
ServerName idp.uni-beispiel.de:8443
SSLEngine on
SSLCertificateFile /etc/ssl/localcerts/idp.saml-cert.crt.pem
SSLCertificateKeyFile /etc/ssl/private/idp.saml-cert.key.pem
# REST WIE OBEN
===== Testen der Verbindung Apache --> Tomcat =====
Liest der Apache seine Config ohne Fehler ein, testen Sie bitte als nächstes die Weiterleitung von Apache auf den Tomcat indem Sie folgende URL aufrufen:
https://HOSTNAME/idp/
Funktioniert die Weiterleitung, dann bekommen Sie eine Fehlermeldung "HTTP Status 404 - /idp/" oder (je nach Tomcat-Version) eine weiße Seite vom Tomcat zu sehen, da das IdP-Servlet im Tomcat noch nicht aktiv ist. Die Weiterleitung ist damit aber erfolgreich getestet!
Kommt eine Apache-Fehlermeldung, dann stimmt die Apache-Konfiguration noch nicht. Bitte dann nochmal obige Punkte sorgfältig durchgehen.
Anmerkungen:
* Bitte stellen Sie sicher dass die Apache-SSL-Konfiguration aktuellen Sicherheitsstandards entspricht! Details dazu übersteigen den Rahmen diese Anleitung. Hilfreiche Seiten:
* [[https://ssl-config.mozilla.org/]]
* [[https://www.dfn-cert.de/]]
* [[https://blog.pki.dfn.de/]]
* [[https://www.ssllabs.com/ssltest/]]
{{tag>idp4 tutorial apache webserver included-in-ansible}}