我有一个可通过公共IP访问的Windows服务器,其中一些Apache虚拟主机配置为通过代理传递到具有web应用程序和服务的各种内部服务器(Apache充当反向代理)。在一台内部服务器上,我想使用letsencrypt配置HTTPS。
我设法在内部服务器上获得了一个有效的证书和服务器配置,但问题是我的反向代理(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>在10.3.1.83 (Ubuntu/ Nginx )上,使用letsencrypt中的certbot,我生成了有效的证书,并将Nginx配置为提供HTTPS和证书。
当我从局域网内部访问Ubuntu/Nginx服务器时,一切工作正常。使用Chrome DevTools,我可以验证它的服务器是否具有正确的LetsEncrypt证书。
从外部(Internet)访问相应的子域会返回内部服务器错误页,并且在日志中Apache会告诉我以下信息:
AH00961: HTTPS: failed to enable ssl support for 10.3.1.83:443 (10.3.1.83)编辑:最后我找到了一些答案:似乎在Apache中没有实现SNI代理,只有"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
发布于 2017-06-23 21:35:29
我认为您必须通过在代理上设置加密来加密从反向代理到客户端的流量。
如果有什么不同的话,您的内部and服务器和代理也可以共享SSL通信,通过在interna NO (但编辑过的).l服务器上设置SSL。
但是您不能为所有服务器使用一个证书(或者这意味着您在多个服务器上使用相同的私钥/公共证书...)。
为什么会这样呢?因为如果客户端和后端服务器之间的通信是加密的,那么代理将无法读取HTTP请求的"Host“报头和其他有用的报头,因此将无法中继甚至理解请求...
因此,除非您复制证书,否则我的答案是...不是的。:-)
你的证书集中在你的代理上,这并不是那么糟糕...从安全性的角度来看,这有点冒险(风险集中),但从管理的角度来看,这更容易(集中精力)。
编辑:如果你想接触到包括过时的浏览器或开发库在内的大量受众,答案是否定的,这是我假设的(在其他情况下,答案是肯定的,请参阅下面的对话)。
https://stackoverflow.com/questions/44680362
复制相似问题