Назад | Перейти на главную страницу

Удаленный прокси-сервер Apache для несоответствия SNI обратного прокси

Возникла проблема с нашей настройкой Apache-2.2 и обратного прокси-сервера, на который проксируется другое устройство.

поток: Apache A -> proxy.abc.net -> Apache B

Ошибка, которую мы получаем на Apache B:

Имя хоста proxy.abc.net, предоставленное через SNI, и имя хоста backend.abc.net, предоставленное через HTTP, отличаются

Текущая конфигурация

    <VirtualHost frontend.abc.com:80>

    ServerName frontend.abc.com

    SSLEngine on
    SSLOptions +StrictRequire
    SSLProtocol -all +TLSv1
    SSLHonorCipherOrder On
    SSLCipherSuite RC4-SHA:HIGH:!ADH:!MD5
    SSLCertificateFile conf/certs/cert.cer
    SSLProxyCACertificateFile certs/proxy.cer
    SSLCertificateKeyFile conf/certs/cert.pem
    SSLCertificateChainFile conf/certs/chain.cer


    DocumentRoot /foo/bar

    SSLProxyEngine On
    ProxyRequests Off
    ProxyPreserveHost off
    ProxyErrorOverride On
    SetEnv proxy-sendchunked 1

    ProxyRemote "*"  https://proxy.abc.net:8080
    ProxyPass  /foo  https://backend.abc.net:8888/foo  disablereuse=on

</Virtual Host>

Добавление

SSLProxyProtocol SSLv3

работает, поскольку не выполняет проверку SNI, но SSLv3 не является вариантом, который мы обязаны использовать TLSv1 или выше.

В Apache 2.2 эта проверка жестко запрограммирована (сравнивает имя хоста SNI и имя хоста).

Apache 2.4 смягчает это условие и дает сбой, только если:

        * The request does not select the virtual host that was
        * selected by the SNI and its SSL parameters are different

https://svn.apache.org/viewvc/httpd/httpd/branches/2.4.x/modules/ssl/ssl_engine_kernel.c?view=annotate#l335

так что ответ - перейти на 2.4.