配置安全的SSL Apache反向代理

7

我正在尝试使用Apache建立反向代理设置,确保SSL全程安全支持:

Client   <-->   Proxy @ somehostname.com   <-->   Server @ 123.45.67.89

请注意,我的代理服务器有一个主机名,但远程服务器没有。使用letsencrypt设置客户端和代理之间的SSL连接正常工作。然而,我正在努力保护代理和远程服务器之间的连接。
由于远程服务器没有主机名,并且letsencrypt不为IP颁发证书,因此我的想法是生成自签名证书并将证书复制到代理以仅信任该证书。不幸的是,我不知道如何操作。
如果我只禁用这些证书检查,连接就会起作用,因为代理会相信每个证书。
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off

虽然加密功能可以正常工作,但据我了解,真实性会受到威胁,在握手期间容易遭受中间人攻击。这不是理想的情况。

相反,我已经指示Apache信任我的自签名证书:

SSLProxyCACertificateFile /path/to/cert.pem

然后尝试使用有效的证书进行强制执行

SSLProxyVerify require

尽管我明确列出了证书,并且 SSLProxyCACertificateFile 文档中也指出“这些用于远程服务器身份验证”,但似乎它并不信任它。

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

1个回答

6

事实证明,通过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>

嗨Felk,我遇到了同样的问题,我的配置与你相同:C <--> 反向代理 <--> 服务器(https),我理解为了在反向代理和服务器之间建立安全连接,我需要在反向代理中添加一个trustEntry,这可以通过SSLProxyCACertificateFile /path/to/custom_cert.pem来完成,对吗?谢谢... - Diego Ramos
1
是的。在“SSLProxyCACertificateFile”指令中指定证书基本上绕过了通常需要由预定义的证书颁发机构之一签发所有证书的限制。 - Felk
感谢您的回复Felk,我注意到我的服务器也在请求证书(双向SSL即客户端认证),在这种情况下,我是否需要在Web服务器上拥有一个密钥?这个密钥将被服务器接受(验证)吗?谢谢。 - Diego Ramos
1
如果你遇到了特定的问题,请打开一个新的问题。你可以在这里链接它并@我,我会看一下。 - Felk
好的,谢谢Felk。我会详细说明并回复你,祝你愉快 :) - Diego Ramos

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接