【发布时间】:2012-02-08 16:51:03
【问题描述】:
我有两个应用程序(PHP 和 .NET)在同一台机器上工作,但在不同的服务器上(一个在 Apache 上,一个在 IIS 上)。我也有 PHP 应用程序使用的 SSL 证书。我希望我的 .NET 应用在相同的域名上工作并使用相同的证书。
我应该如何配置我的服务器?
我将不胜感激。
【问题讨论】:
标签: apache iis configuration ssl-certificate
我有两个应用程序(PHP 和 .NET)在同一台机器上工作,但在不同的服务器上(一个在 Apache 上,一个在 IIS 上)。我也有 PHP 应用程序使用的 SSL 证书。我希望我的 .NET 应用在相同的域名上工作并使用相同的证书。
我应该如何配置我的服务器?
我将不胜感激。
【问题讨论】:
标签: apache iis configuration ssl-certificate
HTTPS 仅在检查证书时验证主机名(请参阅RFC 2818 Section 3.1),而不是端口,因此在同一主机上为两个不同的应用程序使用相同的证书应该没有任何问题。
你可以:
https://www.example.com/(端口 443,默认)https://www.example.com:8443/(端口 8443)上的 IIS如果您想为 Apache Httpd 和 IIS 使用相同的端口,则会出现问题。在 HTTPS 的非标准端口上运行不同的服务器不一定是个好主意:这可能会导致问题,因为某些防火墙(和某些代理服务器)不允许您在 443 以外的端口上连接到 HTTPS(或至少, 8443 端口不会开放)。
对此的解决方案是使用 Apache Httpd 作为前端并将请求的“部分”(例如以 https://www.example.com/iis/ 开头的所有内容)转发到后端的 IIS。这可以使用反向代理来完成(参见 Apache Httpd 中的mod_proxy_http)。如果您的 IIS 服务器在同一台机器上,则重定向可以有效地转到localhost(在您为 IIS 选择的端口上,可能不是默认的 80)。在这种情况下,Apache Httpd 和 IIS 之间的连接不需要使用 SSL/TLS 来保护,所以你不需要为 IIS 设置证书(如果你真的想要,你可以,但它在localhost 连接)。来自用户的所有 SSL/TLS 连接都将在 Apache Httpd 结束,然后在内部将一些请求发送到后面的 IIS。
在将 Apache Tomcat(或 Java 容器)置于 Apache Httpd 之后时,通常会有更多关于此的文档,但在将 Tomcat 替换为 IIS 时,原则应该是相同的。
这里有一些关于 Apache Httpd with Jetty 的文档:http://wiki.eclipse.org/Jetty/Howto/Configure_mod_proxy#Configuring_Apache_mod_proxy_with_Jetty
从 Apache Httpd 的角度来看,使用 IIS 代替 Jetty 应该非常相似。如果您的某些 IIS 应用程序配置为要求这样做,您可能需要调整 IIS 配置,使其假装其传入请求通过 HTTPS(因为它们将通过普通 HTTP)。
我认为 IIS 也具有反向代理功能,所以如果这种方法太棘手,您应该能够反转角色。寻找使用 IIS 作为 HTTPS 入口点并将 Apache/PHP 应用程序放在后面。
【讨论】:
SSL 主要注册到完全限定的域名,例如www.mydomain.com
除非你有一个通配符 SSL,所以除非你有 IIS 和 appache 服务于完全相同的域,例如www.mydomain.com,这会很奇怪,因为在运行对所述域的请求时最终会发生冲突。
但在 IIS 上安装 SSL 只需按照以下指南操作即可。
IIS7 http://www.globalsign.com/support/install/install_iis7.php
IIS5+6http://www.globalsign.com/support/install/install_iis5.php
【讨论】: