我正在尝试使用始终安全支持 SSL 的 apache 建立反向代理设置:
Client <--> Proxy @ somehostname.com <--> Server @ 123.45.67.89
请注意,我的代理服务器有一个主机名,但远程服务器没有。客户端和代理之间的 SSL 设置与 letsencrypt 设置一起工作。但是,我正在努力保护代理和远程服务器之间的连接。
因为远程服务器没有主机名,而且 letsencrypt 不只为 IP 颁发证书,我的想法是生成一个自签名证书并将证书复制到代理,让它只信任那个.不幸的是,我不知道该怎么做。
如果我只是禁用这些证书检查,连接就可以正常工作,因为代理只信任每个证书:
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off
虽然加密可以正常工作,但据我所知,真实性会受到损害,而且我在握手期间会受到 MitM 攻击。这并不理想。
相反,我已经指示 Apache 信任我的自签名证书
SSLProxyCACertificateFile /path/to/cert.pem
然后尝试使用
强制执行有效证书SSLProxyVerify require
但尽管我明确列出了证书和 SSLProxyCACertificateFile
的文档说“这些用于远程服务器身份验证”,似乎不信任它。
有没有办法确保代理和远程服务器之间的连接是安全的,例如强制 Apache 始终使用该特定证书连接到代理?
最佳答案
事实证明,通过 SSLProxyCACertificateFile
添加证书不会跳过名称检查,这完全有道理。因此,为了使自定义证书起作用,它们仍然需要颁发给正确的名称,或者在我的例子中,IP。在我为该 IP 颁发新证书后,我的配置现在可以使用了。以下是相关部分:
<VirtualHost *:443>
ServerName somehostname.com
SSLProxyEngine On
SSLProxyVerify require
SSLProxyCACertificateFile /path/to/custom_cert.pem
SSLProxyCheckPeerCN on # or omit, default is on
SSLProxyCheckPeerName on # same
ProxyPass / https://123.45.67.89/
ProxyPassReverse / https://123.45.67.89/
</VirtualHost>
关于apache - 配置安全的 SSL Apache 反向代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42982154/