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

Предоставление доступа HTTP через обратный прокси к внутреннему сайту HTTPS

Я пытаюсь настроить обратный прокси-сервер HTTP для внутреннего HTTPS-сервера. В качестве примечания, да, я знаю, что отбрасываю всю безопасность. Исходный сервер HTTPS не имеет для нас особого значения, и продукт, на котором он работает, не позволяет отключать HTTPS или каким-либо образом перенастраивать встроенный веб-сервер.

Я пробовал использовать Nginx, но, похоже, большинство людей используют Apache, поэтому я сейчас пытаюсь именно это.

Это моя текущая конфигурация виртуального хоста:

<VirtualHost 0.0.0.0:10443>
    ServerName server.domain.com

    SSLProxyEngine on
    #UnknownSSLDirectives
    #SSLProxyMachineCertificateFile /etc/apache2/selfsignedcert.pem
    SSLProxyCACertificateFile /etc/apache2/selfsignedcert.pem

    ProxyRequests Off
    ProxyPass / https://internalserver.internaldomain.com:2941/
    ProxyPassReverse / https://internalserver.internaldomain.com:2941/

    <Proxy>
        Order Deny,Allow
        Allow from all
    </Proxy>

    RequestHeader unset Authorization

    ErrorLog /var/log/apache2/internalserver-error.log
    CustomLog /var/log/apache2/internalserver-access.log common

</VirtualHost>

Когда я пытаюсь открыть http://server.domain.com:10443/ Я получаю сообщение об ошибке «401 неавторизовано».

В других вопросах ServerFault я видел ссылки на UnknownSSLDirectives, но Apache жалуется, что такой опции не существует. И использовать SSLProxyMachineCertificateFile вместо SSLProxyCACertificateFile, но Apache жалуется, что в этом случае настройка SSL не завершена.

Я застрял. Как я могу отладить это или добиться прогресса? Спасибо!

По состоянию на 2018 год не рекомендуется использовать Apache или stunnel для этой задачи. Я бы рекомендовал haproxy за его ясность и скорость.

Что касается Apache 2.2, вы ошиблись с <Proxy>. В сценарии обратного прокси доступ к ProxyPass контролируется <Location> блок, а не с <Proxy>.

В <Proxy> относится только к вперед прокси, и вы делаете обеспечить регресс прокси. Это в руководстве.

У меня нет ответа, но вот несколько предложений по устранению проблемы.

Я бы попробовал пойти с «обратным завершением SSL», используя stunnel в клиентском режиме (http://www.thegoldfish.org/2010/01/stunnel-in-client-mode/) и попробуйте подключиться к http напрямую через stunnel на высоком порте (через curl / lynx / туннелирование высокого порта через ssh). На данный момент я имею дело только с ssl-клиентом, а не с настройками прокси Apache.

Когда у меня это заработало, я попытался настроить простой незашифрованный HTTP-прокси в Apache для порта stunnel. У меня работает расшифровка, а незашифрованный http-прокси в Apache - это известная и хорошо документированная установка. Кроме того, я могу использовать сниффер (например, tcpdump) для прослушивания связи между Apache и незашифрованным сокетом stunnel.

Только после того, как это сработает, я попытаюсь выяснить, как удалить посредника stunnel и заставить Apache говорить по https.

Боковое примечание: я бы ожидал некоторых проблем с аутентификацией, если серверная служба устанавливает флаг безопасности для файлов cookie, а браузер считает, что он находится на незашифрованном http. Некоторые другие заголовки и перенаправления также могут создавать проблемы. В любом случае отлаживайте службу с помощью curl -v перед использованием браузера и используйте веб-инспектор (например, Firebug) для проверки заголовков запросов / ответов и файлов cookie.