我有一個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
<<代理將無法讀取「主機」標題>>。這是我的理解,更新的Apache的SNI實現允許這樣的事情。 – NicoEpp
SNI功能(https://wiki.apache.org/httpd/NameBasedSSLVHostsWithSNI)是SSL協議的擴展,如果您針對的是大量受衆,則無法使用該功能,因爲許多舊應用程序尚不兼容。我給出的URL顯示了兼容的瀏覽器,顯然它太近了。 (例如:「Internet Explorer 7.0或更高版本(在Vista上,而不是XP上)」) – Fabien
我的應用程序僅適用於特定區域的用戶。此外,所有較新的瀏覽器都實施了多年的SNI。我如何在Apache中激活SNI? – NicoEpp