我可以通过公共IP访问Windows Server,其中一些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>
在使用letsencrypt的certbot的10.3.1.83(Ubuntu / Nginx)上,我生成了有效的证书并配置了Nginx以提供HTTPS和证书。
当我从局域网内部访问Ubuntu / Nginx服务器时,一切都可以正常运行。使用Chrome DevTools我可以验证它服务器是否是正确的LetsEncrypt证书。
从外部(Internet)访问相应的子域,它返回一个内部服务器错误页面,并在日志中告诉我以下内容:
AH00961: HTTPS: failed to enable ssl support for 10.3.1.83:443 (10.3.1.83)
编辑:最后我找到了一些答案: 似乎SNI代理没有在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 :(得分:0)
我认为您必须通过在代理服务器上设置加密来加密从反向代理到客户端的流量。
如果有的话,您的内部网络服务器和代理也可以通过在内部NO(但已编辑).l服务器上设置SSL来共享SSL通信。
但是你不能为他们提供一个证书(或者这意味着你在多个服务器上使用相同的私钥/公共证书......)。
为什么会这样?因为如果流量在客户端和后端服务器之间加密,那么代理将无法读取“主机”头和HTTP请求的其他有用头,因此无法中继甚至理解请求。
因此,除非您复制证书,否则我的答案是......不。 : - )
你的证书集中在你的代理上并不是那么糟糕......从证券的角度来看,风险更高(风险集中),但从行政角度来看,它更容易(集中精力)。
编辑:如果您想要覆盖大量的观众,包括过时的浏览器或我认为的开发库,答案是否定的(在其他情况下是肯定的,请参阅下面的对话)。