情况:
我希望它能正常工作:请求来自客户端并通过 443 端口(ssl)到达 haproxy,然后必须到达 80 端口上的后端。
我有中间 CA (ca1) 颁发的服务器证书、ca1 证书和客户端证书。但我没有找到从 Windows 认证机构向 haproxy 服务器 (ubuntu) 请求正确服务器证书的解决方案。可能是模板的原因。我从 Windows 机器服务器证书请求并将其复制到 haproxy。
问题是 HAProxy 日志有此错误“无法验证 SSL 客户端 CA 链”
配置haproxy:
前端 https_frontend
绑定 192.168.14.167:443 ssl crt /etc/haproxy/cert/request/server.pem ca 文件 /etc/haproxy/cert/request/ca1-certificate.pem 验证可选 crt-ignore-err 全部 no-sslv3
模式 http
日志/dev/log local7
选项 httplog
使用后端 web_server_1,如果 { ssl_fc_has_crt }
默认后端 web_server_2
后端 web_server_1
模式 http
选项 httplog
服务器 w7 192.168.11.109:80 检查
后端 web_server_2
模式 http
选项 httplog
服务器 xp 192.168.13.205:80 检查
这个计划行不通。
附加信息:从 winXP 登录,我在其中运行 opennssl
C:\OpenSSL-Win32\bin>openssl s_client-connect haproxy2:443-cert client.pem-CAfile ca1-certificate.pem-state-showcerts
316:错误:14094418:SSL 例程:SSL3_READ_BYTES:tlsv1 警报未知 ca:.\ssl\s3_pkt.c:1275:SSL 警报编号 48
316:错误:140790E5:SSL 例程:SSL23_WRITE:ssl 握手失败:.\ssl\s23_lib.c:184:... cer 信息...验证返回代码:20(无法获取本地颁发者证书)
(如果我的英语不好请见谅)我已经阅读了很多关于它的帖子,但没有找到解决方案。
答案1
文件 server.pem 和 client.pem 应该包含 3 个部分,如下所示:
-----BEGIN RSA PRIVATE KEY-----
<lots of base64 encoded data>
-----END RSA PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
<lots of base64 encoded data>
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
<lots of base64 encoded data>
-----END CERTIFICATE-----
私钥可能不是 RSA,但它应该是第一个。第一个证书是签名的服务器证书。第二个证书应该是 CA 证书。您可以使用文本编辑器复制和粘贴每个部分。要检查您的证书,请运行此命令。
$ openssl verify -CAfile ca1-certificate.pem server.pem
server.pem: OK