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

Обратный прокси-сервер Apache с SSL для замены DNS

В настоящее время я перехожу на новый хост. В apache существует около 20 доменов, настроенных как VHosts на основе имен.

Я читал о возможности обратного прокси-сервера Apache как об идее преодоления простоев DNS, поскольку не все домены находятся под моим прямым контролем, и я не уверен, насколько пунктуальны их владельцы при их обновлении.

Поскольку это проксирование конфиденциальных данных через Интернет, мне всегда нужен SSL.

Виртуальный хост на исходном сервере:

ServerAdmin a@b.com
ServerName abc.domain.com

SSLEngine On
SSLCertificateFile     /path/to/cert
SSLCertificateKeyFile  /path/to/key

SSLProxyEngine On
ProxyRequests Off
ProxyPreserveHost On
UseCanonicalName On
SSLProxyVerify require
SSLProxyCheckPeerName On

ProxyPass / https://1.2.3.4/
ProxyPassReverse / https://1.2.3.4/

Виртуальный хост на целевом сервере:

ServerAdmin a@b.com
ServerName abc.domain.com

SSLEngine On
SSLCertificateFile     /path/to/cert
SSLCertificateKeyFile  /path/to/key

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

Я продублировал сертификаты на старых и новых серверах - что, очевидно, мне все равно нужно сделать - поэтому / path / to / cert и ключ на обоих серверах приводят к одним и тем же данным.

Браузер показывает 500, в журнале ошибок на исходном сервере я вижу:

AH02039: Certificate Verification: Error (20): unable to get local issuer certificate

Я читал много материалов по этой теме, но все еще не понимаю, как мне это настроить.

Я считаю, что мне, возможно, следует использовать самоподписанный сертификат и CA для исходной-> целевой ветви, но как это следует настроить? Какие общие альтернативы имени / темы должны быть в сертификате?

Любая помощь приветствуется! Спасибо!

Я смог заставить это работать сам с самоподписанным ЦС и сертификатом.

На прокси-сервере должен быть SSLProxyCACertificateFile, указывающий на сгенерированный сертификат CA.

Удаленный сервер должен использовать самоподписанную цепочку для SSLCertificateFile вместе с файлом ключей для сертификата клиента в SSLCertificateKeyFile.

Поскольку у меня нет действительного общего имени / SAN в сертификате клиента, прокси-сервер также должен отключить SSLProxyCheckPeerName и SSLProxyCheckPeerCN, но оставить SSLProxyVerify установленным как require.

Эта конфигурация означает, что конечный пользователь -> прокси-сервер использует действительный сертификат, а прокси-сервер -> удаленный сервер использует ваш самоподписанный сертификат. Хотя мы не проверяем общие имена и т. Д., Прокси-сервер будет принимать только ответ, который проверяется на соответствие вашему самоподписанному ЦС.

Что помогло диагностировать это:

  • Перемещение VirtualHost на удаленном сервере на его собственный порт, чтобы я мог посетить его напрямую и проверить сертификат, который он обслуживает, и т. Д.

  • Увеличивая LogLevel для VirtualHost на прокси-сервере, я использовал LogLevel ssl: debug, которого было достаточно, чтобы отобразить сертификаты, которыми обмениваются в журналах.