Нужна помощь в устранении неполадок при ошибке веб-сервера Https - SSL Handshake не удалось


9

Я следовал этому руководству: http://hints.macworld.com/article.php?story=20041129143420344

Вот мое определение виртуального хоста

<VirtualHost *:443>
    SSLEngine on
    SSLProxyEngine On
    RequestHeader set Front-End-Https "On"
    CacheDisable *
    SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
    DocumentRoot "/Users/me/projects/myproject/public"
    ServerName ssl.mydomain.com
    ServerAlias *.ssl.mydomain.com
    SSLCertificateKeyFile "/private/etc/apache2/certs/webserver.nopass.key"
    SSLCertificateFile "/private/etc/apache2/certs/newcert.pem"
    SSLCACertificateFile "/private/etc/apache2/certs/demoCA/cacert.pem"
    SSLCARevocationPath "/private/etc/apache2/certs/demoCA/crl"
    ErrorLog "/Users/me/Desktop/ssl.log"

    ProxyPass / https://localhost:3002/
    ProxyPassReverse / https://localhost:3002
    ProxyPreserveHost on    
</VirtualHost>

И когда я пытаюсь подключиться к sevre viov веб-браузеру, я получаю эту ошибку:

[Thu Feb 02 16:50:40 2012] [error] (502)Unknown error: 502: proxy: pass request body failed to 127.0.0.1:3002 (localhost)
[Thu Feb 02 16:50:40 2012] [error] [client 96.11.81.39] proxy: Error during SSL Handshake with remote server returned by /session/new
[Thu Feb 02 16:50:40 2012] [error] proxy: pass request body failed to 127.0.0.1:3002 (localhost) from 96.11.81.39 ()

как мне отладить / исправить это?

Ответы:


12

Чтобы добавить ответ vbartoni, кажется, что от Apache 2.4 и выше, есть разные значения по умолчанию и новая директива.

Я использую Apache 2.4.6, и мне пришлось добавить следующие директивы, чтобы заставить его работать:

SSLProxyEngine on
SSLProxyVerify none 
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off

1
Это делает работу - только со всеми этими директивами его не будет жаловаться.
Майкл Беклинг

@ MichaelBöckling Спасибо, что поддержал меня. Я хочу особо указать, что в документации говорится, что она SSLProxyCheckPeerNameзаменяет собой, SSLProxyCheckPeerCNно она не будет работать, если вы не укажете все директивы.
сдавал

3

Не беспокойтесь по поводу HTTPS между вашим интерфейсом и вашим внутренним сервером, нет смысла включать SSL для localhostсоединения.

Чтобы уточнить, используйте ProxyPass / http://localhost:3002/вместоProxyPass / https://localhost:3002/


В качестве альтернативы, если вы действительно хотите подключить свой обратный прокси-сервер к внутреннему серверу также с использованием SSL (в основном это полезно, когда этот сервер находится не там, где находится обратный прокси-сервер Apache Httpd), в дополнение к этому https://backend-server-addressиспользуйте SSLProxy*директивы для настройки Сертификаты CA, как указано во введении к mod_proxyдокументации . В частности, вам нужно будет настроить SSLProxyCACertificateFileи убедиться, что сертификат внутреннего сервера выдан на правильное имя хоста, как это видит Apache Httpd (т.е. localhostв вашем случае).


Если вы не подключаетесь к своему внутреннему серверу по протоколу SSL, он может не определить, действительно ли вы используете SSL, и настроить его на принудительное использование SSL (отсюда и бесконечные перенаправления). Возможно, вы захотите взглянуть на механизмы, аналогичные тем, что делает Jetty со своей forwardedопцией (чтобы иметь возможность сообщить фону, что он находится за прокси-сервером). Rails может интерпретировать X-Forwarded-Protoпо умолчанию. В этом случае добавьте это в конфигурацию Apache (на виртуальном хосте SSL):

RequestHeader set X-Forwarded-Proto 'https'

Например, здесь обсуждается похожая проблема .


SSLProxy упоминается только один раз по этой ссылке. Нет примеров того, как его использовать. Я изменил заголовок запроса, чтобы установить X-Forwarded-Proto 'https' ... но он все еще не работает / я получаю ту же ошибку. Переход на localhost: 3002 также выдает ту же ошибку
NullVoxPopuli

Существуют веские причины для подключения к https с помощью localhost: пример socket.io в бэкэнде HTTPS. Это будет из-за ошибок со смешанным контентом.
Florestan06

3

У меня была похожая проблема (те же журналы ошибок), за исключением того, что прокси-сервер переадресовывал трафик https на другой хост.
Поскольку я был ленив, а узлы находятся в моей собственной изолированной сети, эти директивы решили проблему:

SSLProxyVerify none
SSLProxyCheckPeerCN off


1

Если внутренний сервер использует устаревший самозаверяющий сертификат, необходим еще один параметр (если нет доступа к внутреннему серверу):

SSLProxyCheckPeerExpire off

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.