在代理和后端设置带有 SSL 和身份验证的 Apache 2.4 反向代理

在代理和后端设置带有 SSL 和身份验证的 Apache 2.4 反向代理

目标:客户端使用 OTP(AuthType basic)通过 apache 2.4 反向代理进行身份验证,然后转发到后端服务器(apache 2.2),在那里需要进一步的个人身份验证(Kerberos)。两个因素都成功后,客户端即可获得访问权限。

关于可能的解决方案,我假设我们可以忽略 otp / kerberos 身份验证对,并且可以更一般地讨论两个基本身份验证。

限制:必须使用代理上的 OTP 和后端上的 Kerberos 身份验证。后端上的当前 Apache 2.2 无法替换。子目录“sub”(见下文)无法更改。由于专有 otp 模块,必须使用 Apache 2.4 作为代理(无法用 nginx 或 squid 替换)。

迄今为止的准备/配置:

所有必要的代理模块均已到位(我们使用的是 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>

当前成就:

  • SSL 正常,没有握手或其他投诉(如前所述(请参阅 SSLProxy 类别中的“offs”)。
  • 使用 OTP 进行身份验证步骤 1 没问题(可以在 otp srv 上看到)
  • 弹出第二个身份验证对话框并要求输入后端凭证
  • 后端的 Kerberos 身份验证正常(仅当直接使用时,即没有代理请求)

问题:

  • 第二因素/后端的身份验证输入未到达后端,但停留在代理处,引发错误

    [: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。

进一步的日志信息:第一个(正)otp请求总是在后端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,但无济于事。

相关内容