首页 文章

配置安全SSL Apache代理

提问于
浏览
3

我正在尝试使用apache Build 代理设置,从而一直安全地支持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的文档说"These are used for Remote Server Authentication",但它似乎并不信任它 .

有没有办法确保代理和远程服务器之间的连接是安全的,例如通过强制Apache始终使用该特定证书连接到代理?

1 回答

  • 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>
    

相关问题