2017-06-21 175 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

相关问题