<- 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 10/11 === root@idp:~# apt install apache2 === RHEL 6/CentOS 7 === root@idp:~# yum -y install httpd mod_ssl === SLES 11/12, OpenSUSE Leap 15.1 === Apache wird als Proxy vor Tomcat via AJP verwendet. In ''/etc/sysconfig/apache2'' muss bei APACHE_MODULES proxy //vor// proxy_ajp stehen. Außerdem muss ''APACHE_SERVER_FLAGS="SSL"'' gesetzt sein. ==== 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 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}}