我正在尝试使用 Apache 创建以下设置:
UserBrowser ----Client Certificate---> LoadBalancer (Apache 2.4)
then
LoadBalancer (Apache 2.4) ----LB Client Certificate ----> Apache 2.2 Web Server
因此,用户连接到负载均衡器并提供客户端证书 - 这可以正常工作。
然后,反向代理使负载均衡器连接到 Web 服务器,Web 服务器从负载均衡器请求证书,然后我收到以下错误:
Proxy client certificate callback: (0.0.0.0:443) entered
Proxy client certificate callback: (0.0.0.0:443) downstream server wanted client certificate but none are configured
[remote 0.0.0.1:443] SSL Proxy connect failed
[ssl:info] SSL Library Error: error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure (SSL alert number 40)
[ssl:info] [remote 0.0.0.1:443] Connection closed to child 0 with abortive shutdown (server 0.0.0.0:443)
[ssl:info] [remote 0.0.0.1:443] SSL handshake failed: sending 502
负载均衡器配置:
SSLProxyEngine on
ProxyRequests off
ProxyPreserveHost on
Proxytimeout 600
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off
SSLProxyMachineCertificateFile "/path/to/keyandcert.pem"
Web 服务器配置:
SSLVerifyClient require
如果我从 Web 服务器中删除 SSLVerifyClient,此方案将有效,然后流量将进行负载平衡。我需要在用户 - LB 之间和 LB - WS 之间进行客户端验证。
密钥 + 证书已使用 1024 位长模数生成
有人能洞察一下这里可能出了什么问题吗?
答案1
您的请求不明确。不过,我可以想象可能会出现以下情况:
- 您打算构建一个客户端证书身份验证方案。在这种情况下,客户端应该由平衡器进行身份验证,因为无法使用 HTTP 感知平衡器、平衡器上的 SSL 卸载并将客户端证书传递到后端。一旦通过身份验证(或未通过),平衡器应使用 HTTP 标头将结果报告给后端。
- 您打算创建一个简单的 SSL 卸载方案。在这种情况下,您不需要平衡器和后端之间的 HTTPS,因为它们通常使用受信任的传输相互通信。
无论哪种方式,您描述的方案都不完全符合上述任何一种情况。
PS 使用 nginx 作为平衡器,apache 早已不复存在。