2012-01-12 23 views
1

我有兩個應用程序(PHP和.NET)在同一臺機器上工作,但在不同的服務器上(一個在Apache上,一個在IIS上)。我也有PHP應用程序使用的SSL證書。我希望我的.NET應用程序能夠使用相同的域名並使用相同的證書。Apache和IIS共享相同的SSL證書

我應該如何配置我的服務器?

我將不勝感激任何幫助。

回答

3

HTTPS只驗證主機名檢查證書時(見RFC 2818 Section 3.1),而不是端口,所以你應該使用相同的證書兩個不同的應用沒有任何問題在同一主機上。

你可以有:

  • apache httpd的上https://www.example.com/(端口443,默認)
  • IIS上https://www.example.com:8443/(8443端口)

地方它會是一個問題是,如果你想要爲Apache Httpd和IIS使用相同的端口。在HTTPS的非標準端口上運行不同的服務器不一定是個好主意:它可能會導致問題,因爲某些防火牆(和某些代理服務器)不會讓您連接到另一個端口上的HTTPS,而不是443(或至少,端口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處結束,然後Apache會在內部向後面分派一些請求給IIS。

將Apache Tomcat(或Java容器)放在Apache Httpd後面可能會有更多關於此的文檔,但在將Tomcat替換爲IIS時,原則應該相同。

這裏是關於Apache的httpd一些文檔與碼頭:http://wiki.eclipse.org/Jetty/Howto/Configure_mod_proxy#Configuring_Apache_mod_proxy_with_Jetty

從阿帕奇的httpd的角度使用IIS代替碼頭觀點應該是非常相似的。如果某些IIS應用程序被配置爲需要此功能,則可能必須調整IIS配置,以使其假裝其傳入請求通過HTTPS傳遞(因爲它們將通過純HTTP進行傳輸)。

我認爲IIS也有反向代理功能,所以如果這種方法太棘手,你應該能夠扭轉角色。尋找使用IIS作爲HTTPS入口點並將Apache/PHP應用程序放在後面。

+0

這是一個驚人的真棒答案! – Oliver 2015-05-22 13:39:19

+0

IIS可充當Apache HTTPD,Apache Tomcat以及可能使用其應用程序請求路由(ARR)模塊的其他人的反向代理。可能有更好的選項來配置您的設置,但是如果您需要IIS來路由傳入的請求,ARR確實有效。當前的鏈接是http://www.iis.net/downloads/microsoft/application-request-routing。 – 2016-06-02 19:29:10

0

SSL主要註冊到完全合格的域名,例如www.mydomain.com

除非您有通配符SSL,否則除非您有IIS和appache提供完全相同的域名,例如www.mydomain.com,如果運行對所述域的請求時最終會發生衝突,這會很奇怪。

但是,在IIS上安裝SSL只需遵循以下指南。
IIS7 http://www.globalsign.com/support/install/install_iis7.php
IIS5 + 6小時ttp://www.globalsign.com/support/install/install_iis5.php

+0

我找到了在Apache上配置反向代理的解決方案,但在將請求重定向到同一臺機器上的IIS時出現了一些問題。反向代理應該適用於我的情況。 – cichaczem 2012-01-12 12:20:36