我正在尝试使用apache建立代理设置,从而一直安全地支持SSL:
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始终使用该特定证书连接到代理?
答案 0 :(得分:4)
通过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>