2017-06-21 177 views
0

我有一個Windows服務器可以通過公共IP訪問,其中一些Apache虛擬主機配置爲使用Web應用程序和服務(Apache充當反向代理)將代理傳遞給各種內部服務器。在我想使用letsencrypt配置HTTPS的內部服務器之一上。可能使用Apache作爲反向代理服務器從內部服務器提供SSL/TLS證書?

我設法在內部服務器上獲得工作證書和服務器配置,但問題是我的反向代理(Apache)不想隧道此HTTPS流量。

編輯:我知道使用證書配置反向代理會更容易,但是我們的加密還沒有Windows的自動化選項,並且每60天左右手動更改證書將非常繁瑣。

在Apache的2.4(Windows)中的虛擬主機配置是這樣的:

<VirtualHost *:443> 
    ServerName somesubdomain.mydomain.com 
    DocumentRoot "E:/Apache2/htdocs" 
    DirectoryIndex index.html 

    ProxyRequests Off 
    <Proxy *> 
     Order deny,allow 
     Allow from all 
    </Proxy> 

    ProxyPreserveHost On 

    ProxyPass/https://10.3.1.83/ 
    ProxyPassReverse/ https://10.3.1.83/ 
</VirtualHost> 
利用letsencrypt的certbot,我產生的有效證件和配置Nginx的服務

在10.3.1.83(Ubuntu的/ Nginx的) HTTPS加上證書。

當我從局域網內部訪問Ubuntu/Nginx服務器時,一切都起作用。使用Chrome DevTools,我可以驗證服務器是否有正確的LetsEncrypt證書。

訪問從外部(互聯網)相應的子域,它返回一個內部服務器錯誤頁面,並在日誌中的Apache告訴我下面的:

AH00961: HTTPS: failed to enable ssl support for 10.3.1.83:443 (10.3.1.83) 

編輯:最後,我找到了一些答案: 好像SNI proxing沒有在Apache中實現,只有「SNI虛擬主機」。人們可以使用HAProxy或其他項目。

Apache HTTPS reverse proxy with SNI without key on the proxy https://serverfault.com/questions/614806/apache-mod-proxy-with-https-without-key-material-using-sni https://serverfault.com/questions/625362/can-a-reverse-proxy-use-sni-with-ssl-pass-through/625364

回答

0

我認爲你必須從反向代理到客戶端通過設置在代理服務器上加密加密通訊。

如果有的話,您的內部網絡服務器和代理也可以通過在內部NO(但已編輯).l服務器上設置SSL來共享SSL通信。

但是你不能爲它們擁有一個證書(或者這意味着你在多個服務器上使用相同的私鑰/公共證書...)。

這是爲什麼?因爲如果流量在客戶端和後端服務器之間進行了加密,那麼代理將無法讀取「主機」頭和HTTP請求的其他有用標頭,因此將無法中繼甚至無法理解請求。

因此,除非您複製證書,否則我的答案是...... NO。 :-)

你的證書集中在你的代理上並不是什麼壞事......從安全角度來看,風險更大(風險集中),但從管理的角度來看更容易(集中精力) 。

編輯:如果您想要覆蓋包括過時的瀏覽器或我認爲的開發庫(在其他情況下,請參閱下面的對話)中的大量觀衆,答案爲否。

+0

<<代理將無法讀取「主機」標題>>。這是我的理解,更新的Apache的SNI實現允許這樣的事情。 – NicoEpp

+0

SNI功能(https://wiki.apache.org/httpd/NameBasedSSLVHostsWithSNI)是SSL協議的擴展,如果您針對的是大量受衆,則無法使用該功能,因爲許多舊應用程序尚不兼容。我給出的URL顯示了兼容的瀏覽器,顯然它太近了。 (例如:「Internet Explorer 7.0或更高版本(在Vista上,而不是XP上)」) – Fabien

+0

我的應用程序僅適用於特定區域的用戶。此外,所有較新的瀏覽器都實施了多年的SNI。我如何在Apache中激活SNI? – NicoEpp

相關問題