如何调试/修复我的 apache SSL 设置?

如何调试/修复我的 apache SSL 设置?

目标:设置一个可以接收来自域的 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>

当我尝试通过 Web 浏览器连接到服务器时,出现以下错误:

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

我该如何调试/修复这个问题?

编辑:网络浏览器错误:(此错误发生在远程机器上(相对于服务器))

我输入的网址是https://ssl.mydomain.com 在此处输入图片描述

编辑2:Rails 向我抛出的错误:

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。

答案1

您正在将端口 80(清除 http)和 443(加密 https)转发到同一个端口 3002。这将不起作用。

我没有完全理解您的配置,但 SSL 握手中的错误解释了发生了什么。从这个错误中我可以看出,您正在建立一个到 https(端口 443)的明文连接(http),这显然会失败。

如果你尝试访问类似这样的 URL,你也会得到类似的错误http://服务器:443/并且此端口 443 已为 https 开放。

答案2

(只是复制我自己从 SO 上的重复回答

不必担心从本地主机到本地主机的前端和后端服务器之间的 HTTPS。

编辑:澄清一下,使用ProxyPass / http://localhost:3002/而不是ProxyPass / https://localhost:3002/


或者,如果您确实希望使用 SSL 将反向代理连接到后端服务器(当该服务器不在 Apache Httpd 反向代理所在位置时非常有用),除了 之外https://backend-server-address,还可以使用SSLProxy*指令来设置 CA 证书,如中所述mod_proxy文档介绍

答案3

我从未见过 ProxyPass 用于此用途;如果有人连接到 http,为什么不直接使用 .htaccess 规则强制重定向到 https?

类似这样(如果您没有其他 htaccess 规则):

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

你说你使用的是 rails 吗?如果应用程序已经有 .htaccess 文件,则需要根据现有规则对其进行修改。如果你发布当前的 .htaccess 文件,我们可以查看一下。

相关内容