我在 SUSE 10 上使用带有 mod_ssl 的 Apache 2.2。
我的问题:我想将客户端(仅支持 http)连接到服务器(仅支持 HTTPS)。因此,我想部署 Apache 作为代理,将 HTTP 消息转换为 HTTPS 消息。我将在 Apache 本身上安装服务器证书。注意:这里的客户端和服务器不是普通的浏览器和 Web 服务器。这些是基于 SOAP 的 Web 服务,使用自定义端口(不使用端口 80 或 443)
我预期的部署如下:客户端---------->Apache(代理)----------->HTTPS 服务器
我的问题是:1) 使用 Apache 可以实现这种部署吗?2) Apache 中需要什么配置?3) 需要 Apache 的某个特定模块吗?
我已经尝试了大多数网站建议的“RewriteEngine”和“RewriteRule”。我从 Apache 服务器收到以下错误“302 Found”错误代码。
答案1
你确实可以Client ---> Apache(proxy) ---> HTTPS Server
。
但是,您需要将 Apache Httpd 配置为撤销代理。(普通的 HTTP 代理用于CONNECT
处理 HTTPS 请求:这要求客户端能够自己使用 HTTPS,因为它只是中继连接)。为此,您需要使用mod_proxy
对于此(和mod_proxy_http
),请使用SSLProxy*
指令,如mod_proxy
文档中所述。(带有和 SSL 的反向代理服务器mod_proxy
通常反过来使用。)
缺点是设置起来可能相当繁琐。据推测,此 HTTPS 服务器仅使用 HTTPS 的原因在于:您希望将代理设置得尽可能靠近客户端,以避免向其他人暴露此网站的非 HTTP 变体。
话虽如此,正如@Zoredache在评论中所说,像这样的工具stunnel
可能更适合这种情况。您可以更轻松地在客户端的机器上进行设置。如果配置为正确验证证书,这可以为您提供与客户端中直接使用HTTPS类似的安全级别。(不过,您至少需要保护客户端机器本身。)
我想到一点,一些 HTTPS 特定的信息可能会被以不同的方式处理,特别是安全 cookie,浏览器不会将其发送到服务器(因为它不会通过 HTTPS 连接):这对于基于 SOAP 的 Web 服务来说可能不是问题。