繁体   English   中英

可以使用Apache作为反向代理从内部服务器提供SSL / TLS证书吗?

[英]Possible to serve SSL/TLS Certificate from internal server using Apache as Reverse Proxy?

我有一个可通过公共IP访问的Windows Server,其中的一些Apache虚拟主机配置为通过Web应用程序和服务代理传递给各种内部服务器(Apache充当反向代理)。 在其中一台内部服务器上,我想使用letencrypt配置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)

编辑:最终我找到了一些答案:似乎SNI proxing不在Apache中实现,只有“ SNI虚拟主机”。 但是,可以使用HAProxy或其他项目。

具有SNI的Apache HTTPS反向代理,代理上没有密钥 https://serverfault.com/questions/614806/apache-mod-proxy-with-https-without-key-material-using-sni https://serverfault.com/问题/ 625362 /可-A-反向代理使用-SNI-与-SSL-直通/ 625364

我认为您必须通过在代理上设置加密来加密从反向代理到客户端的流量。

如果有的话,您的内部Web服务器和代理也可以通过在内部NO(但已编辑).l服务器上设置SSL来共享SSL通信。

但是您不能为它们全部拥有一个证书(或者这意味着您在多个服务器上使用相同的私钥/公共证书...)。

为什么会这样? 因为如果在客户端和后端服务器之间对通信进行加密,则代理将无法读取HTTP请求的“主机”标头和其他有用的标头,因此将无法中继甚至无法理解请求。 。

因此,除非您重复证书,否则我的回答是……否。 :-)

您的证书集中在代理服务器上还不错...从安全性的角度来看,它的风险更大(风险集中),但是从管理的角度来看,它更容易(工作集中)。

编辑:如果您想吸引包括我认为的过时浏览器或开发库在内的广大受众,答案是否定的(在其他情况下为是,请参见下面的对话)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM