Цель: клиент аутентифицируется против обратного прокси-сервера apache 2.4 с помощью OTP (AuthType basic), затем перенаправляется на внутренний сервер (apache 2.2), где требуется дополнительная индивидуальная аутентификация (Kerberos). Клиент получает доступ после успешного выполнения обоих факторов.
Что касается возможного решения, я предполагаю, что мы можем пренебречь парой аутентификации otp / kerberos и можем в более общем плане говорить о двух основных аутентификациях.
Ограничения: необходимо использовать как OTP на прокси, так и аутентификацию Kerberos на бэкэнде. Текущий Apache 2.2 на сервере не может быть заменен. Подкаталог "sub" (см. Ниже) не может быть изменен. В качестве прокси необходимо использовать Apache 2.4 (не может быть заменен на nginx или squid) из-за проприетарного модуля otp.
Подготовка / конфигурация на данный момент:
Все необходимые прокси-модули на месте (мы на SuSE 12.2)
/etc/apache2/loadmodules.conf:
LoadModule proxy_module
LoadModule proxy_http_module
LoadModule proxy_html_module
LoadModule xml2enc_module
и включен $ a2emod [module]
Конфигурация виртуального хоста в настоящее время выглядит так:
<VirtualHost myproxy.domain.com:443>
DocumentRoot "/srv/www/myproxy"
ServerName myproxy.domain.com:443
# requests must point to the subdir /sub
RewriteEngine on
RewriteRule ^/$ sub/ [R]
SSLEngine on
SSLCertificateFile /etc/apache2/ssl.crt/pubkey.pem
SSLCertificateKeyFile /etc/apache2/ssl.key/server.key
# no open forwarding proxy:
ProxyRequests off
# use SSL between proxy and backend in a loose fashion
# i.e. do not check cert validity etc.
SSLProxyEngine on
SSLProxyVerify none
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off
SSLProxyCheckPeerExpire off
# try to forward 2nd authentication to backend srv ?
SetEnv Proxy-Chain-Auth On
ProxyPass /sub https://mybackend.domain.com/sub/
ProxyPassReverse /sub https://mybackend.domain.com/sub/
ProxyPreserveHost On
<Proxy https://mybackend.domain.com/sub/>
AuthType basic
AuthName "OTP protected Login"
AuthBasicProvider someOTPprovider
Require valid-user
someValidationURL https://xyz/validate
</Proxy>
</VirtualHost>
Текущие достижения:
Проблема:
ввод аутентификации для 2-го фактора / бэкэнда не поступает на бэкэнд, но остается на прокси, выдает ошибку
[:error] [pid 12804] Rejecting authentication for user 'someuser'
[auth_basic:error] [pid 12804] [client ip:port] AH01617:
user someuser: authentication failure for "/sub/": Password Mismatch
и снова спрашивает первый фактор отп.
Дополнительная информация журнала: первый (положительный) запрос otp всегда выдает ошибку в backend apache error_log:
[error] [client ip] krb5_get_init_creds_password() failed: Looping
detected inside krb5_get_in_tkt
Далее я попробовал дополнительные параметры, например CacheDisable [url_to_backend]
или RequestHeader unset Authorization
но безрезультатно.