проблема с shibboleth SP в док-контейнере за прокси

Я пытаюсь настроить шибболет, работающий в контейнере докеров за прокси.

В настоящее время я могу быть перенаправлен на страницу 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 работает нормально, просто перенаправление назад не работает.


person ThriceGood    schedule 21.04.2020    source источник


Ответы (1)


Я понял, что мне нужно добавить атрибут ServerName следующим образом:

<VirtualHost *:80>
  ServerAdmin [email protected]
  DocumentRoot /var/www/html/my-service

  ServerName https://my-service.org:443
  UseCanonicalName On

  <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>
person ThriceGood    schedule 21.04.2020