我有一台具有公网 IP 的服务器。Apache (2.4) 应该代理(DNS 别名为)frontend.example.com
的流量。service1.example.com
frontend.example.com
service1.example.com
192.168.56.0
是两者之间的私有局域网 ( ) 上的虚拟机。
现在,这对于 HTTP 来说很容易:
<VirtualHost *:80>
ServerName service1.example.com
ProxyPass / http://192.168.56.2/
ProxyPassReverse / http://192.168.56.2/
<Location "/">
Require all granted
</Location>
</VirtualHost>
我正在尝试对 HTTPS 做同样的事情:
<VirtualHost *:443>
ServerName service1.example.com
SSLEngine On
SSLProxyEngine On
ProxyRequests Off
SSLProxyCheckPeerCN off
SSLProxyCheckPeerExpire off
SSLInsecureRenegotiation on
SSLProxyVerify none
SSLVerifyClient none
SSLCertificateFile /etc/ssl/certs/example_com.crt
SSLCertificateKeyFile /etc/ssl/certs/example_com.key
ProxyPass / https://192.168.56.2/
ProxyPassReverse / https://192.168.56.2/
<Location "/">
Require all granted
</Location>
</VirtualHost>
尝试service1.example.com
通过 HTTPS 访问返回:与远程服务器 SSL 握手期间出错
我在这里并不关心安全。service1
需要HTTPS 连接到其某些服务,这就是为什么我不只是将 HTTPS 代理到 HTTP。我不想frontend.example.com
参与 SSL。我希望它说“嘿,我在 443 上有连接,我不处理它,我只是将它转发到这个内部 IP,它会处理它”。我只希望它传递请求。可以做到吗?
正如您在上面的 HTTPS 配置中看到的,我尝试尽可能地放松安全性(例如,SSLInsecureRenegotiation on
应该降低针对中间人攻击的壁垒,不是吗?)。但到目前为止,什么也没起作用。
答案1
显然我唯一遗漏的指令是SSLProxyCheckPeerName off
。现在它可以工作了。