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

Как отладить / исправить настройку SSL для apache?

Цель: настроить сервер, который может получать запросы https и http от домена и перенаправлять их в приложение rails, работающее на сервере. Приложение rails работает на localhost: 3002, и все попытки подключиться к серверу выполняются с другого компьютера в Интернете.

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

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

NameVirtualHost *:80
<VirtualHost *:80>
    DocumentRoot "/Users/me/projects/myproject/public"
    ServerName ssl.mydomain.com
    ServerAlias *.ssl.mydomain.com
    ProxyPass / http://localhost:3002/ # the rails app forwards all http requests to https
</VirtualHost>

<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/
    ProxyPreserveHost on    
</VirtualHost>

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

[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 ()

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

РЕДАКТИРОВАТЬ: ошибка веб-браузера: (Эта ошибка произошла на удаленном компьютере (относительно сервера))

URL, который я ввел, был https://ssl.mydomain.com

РЕДАКТИРОВАТЬ 2: ошибка, которую мне бросают рельсы:

Filter chain halted as [:ensure_proper_protocol] rendered_or_redirected.
Completed in 0ms (DB: 0) | 302 Found [http://ssl.devtinderbox.com/]
[2012-02-03 10:20:45] ERROR bad Request-Line `?p\001\003\001\000W\000\000\000\020\000\0009\000\0008\000\0005\000\000\026\000\000\023\000\000'.

не уверен, важно ли это, поскольку я думаю, что подтверждение SSL должно быть успешным, прежде чем rails узнают, что делать.

Я использую Mac OS X Lion.

(Просто копирую мой собственный ответ из дубликата на SO.)

Не беспокойтесь о HTTPS между вашим интерфейсом и внутренним сервером от localhost до localhost.

РЕДАКТИРОВАТЬ: чтобы уточнить, используйте ProxyPass / http://localhost:3002/ вместо того ProxyPass / https://localhost:3002/


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

Вы перенаправляете оба порта 80 (чистый http) и 443 (зашифрованный https) на один и тот же порт 3002. Это НЕ будет работать.

Я не полностью понял вашу конфигурацию, но ошибка в подтверждении SSL объясняет, что происходит. По этой ошибке я могу сказать, что вы устанавливаете соединение с открытым текстом (http) с https (порт 443), которое явно не работает.

Вы получите аналогичную ошибку, если попытаетесь получить доступ к URL-адресу, например http: // сервер: 443 / и этот порт 443 открыт для https.

Я никогда не видел, чтобы для этого использовался ProxyPass; почему бы вам просто не использовать правило .htaccess для принудительного перенаправления на https, если кто-то подключается к http?

Примерно так (если у вас нет других правил htaccess):

RewriteEngine On 
RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://www.example.com/$1 [R,L]

Вы сказали, что используете рельсы? Если в приложении уже есть файл .htaccess, вам необходимо изменить его в зависимости от существующих правил. Если вы разместите текущий файл .htaccess, мы сможем его просмотреть.