Я пытаюсь настроить шибболет, работающий в контейнере докеров за прокси.
В настоящее время я могу быть перенаправлен на страницу idp shibboleth, где я могу ввести свои данные для входа, и shibboleth аутентифицирует меня. Ошибка 404 при попытке перенаправить обратно на: https://my-service.org/Shibboleth.sso/SAML2/POST
Я не могу сказать, проблема ли это в Apache или в конфигурации shibboleth.
Есть сервер с апачем и докером. Apache здесь проксирует трафик на контейнеры Docker, работающие на том же сервере. У меня DNS указывает доменное имя на прокси. Назовем его "my-service.org". Конфигурация прокси-сервера Apache для my-service.org выглядит следующим образом:
<IfModule mod_ssl.c>
<VirtualHost *:80>
ServerName my-service.org
ServerAdmin [email protected]
DocumentRoot /var/www/html/my-service
Redirect permanent / https://my-service.org/
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
<VirtualHost _default_:443>
ServerName my-service.org
ServerAdmin [email protected]
DocumentRoot /var/www/html/my-service
ErrorLog ${APACHE_LOG_DIR}/docker-dev/my-service.log
CustomLog ${APACHE_LOG_DIR}/docker-dev/my-service_ssl_access.log combined
SSLEngine on
SSLCertificateFile /etc/ssl/certs/blah.crt
SSLCertificateKeyFile /etc/ssl/private/blah.key
SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:ECDHE-RSA-AES128-SHA:DHE-RSA-AES128-GCM-SHA256:AES256+EDH:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4
SSLProtocol All -SSLv2 -SSLv3
SSLCompression off
SSLHonorCipherOrder on
ProxyPreserveHost On
RequestHeader set X-Forwarded-Proto expr=%{REQUEST_SCHEME}
RequestHeader set X-Forwarded-SSL expr=%{HTTPS}
ProxyPass / http://127.0.0.1:8088/
ProxyPassReverse / http://127.0.0.1:8088/
</VirtualHost>
</IfModule>
Контейнер my-service основан на контейнере php:7-apache-buster и работает под управлением apache с shibd. Это часть стека docker-compose. Конфигурация apache контейнера:
<VirtualHost *:80>
ServerAdmin [email protected]
DocumentRoot /var/www/html/my-service
<Directory /var/www/html/my-service/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order deny,allow
Allow from all
</Directory>
<Location "/shibboleth_login.php">
AuthType shibboleth
ShibRequestSetting requireSession 1
ShibUseHeaders On
require valid-user
</Location>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Как я уже сказал все работает до момента перенаправления обратно с shibboleth idp на SP, где 404s. Журналы мало что мне говорят, но есть журнал ошибок, когда я загружаю конфигурацию Apache контейнеров:
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.17.0.6. Set the 'ServerName' directive globally to suppress this message
Не уверен, что это повлияет на ситуацию.
Одна вещь, которую я подумал, может повлиять, это тот факт, что у меня есть shibboleth для обработки SSL:
<Sessions lifetime="28800" timeout="3600" relayState="ss:mem"
checkAddress="false" handlerSSL="true" cookieProps="https">
Но моя конфигурация apache контейнера определяет только блок виртуального хоста HTTP. Как видите, прокси передает протокол контейнеру через заголовки X-Forwarded-Proto
и X-Forwarded-SSL
. Мне они нужны были для php-приложения my-service, но я не уверен, что они влияют на шибболет. Первоначальное взаимодействие с idp работает нормально, просто перенаправление назад не работает.