В настоящее время я перехожу на новый хост. В 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, которого было достаточно, чтобы отобразить сертификаты, которыми обмениваются в журналах.