【发布时间】:2021-10-15 12:39:42
【问题描述】:
需要帮助!!! .我有一个 https 请求,需要拦截它、读取值并将相同的 ssl 请求转发到目的地。我有所有必需的crt、key、CA。我知道 Haproxy ACL 不适用于 L4 层,但我正在尝试找到一种解决方法来解密消息、阅读消息、再次加密并转发。读取消息的原因是使用ACL我需要读取carious请求中的路径差异并将请求相应地路由到不同的服务器。我正在尝试拦截客户端对服务器的请求,默认情况下请求是 SSL,服务器期待 SSL 请求
ssl crt:使用新的 crt-key 对创建了一个新用户,并使用服务器的证书签名请求对服务器中的 CA 进行身份验证
场景是我有一个传入的 SSL 请求,我使用服务器证书将其捕获到 haproxy 的前端,同时将该请求转发到测试网络服务器,我可以看到它已从 HTTPS 更改为 HTTP。现在当我尝试重新加密它时,原始目的地无法接受请求,因为它不是 SSL,我试图在后端添加证书但没有用。请检查我当前的 Haproxy 配置,如果可能,请提供帮助。我不是网络通信/加密/HaProxy 方面的专家。
frontend test
bind IP:6443 ssl crt <location>
option httplog
mode http
default_backend testback
backend testback
mode http
balance roundrobin
option http-check
server <host> IP:6443 check fall 3 rise 2 ssl verify required ca-file <loc> crt <loc>
要验证我的证书是否有效且正在连接: openssl s_client -connect :6443 -cert myuser.crt -key myuser.key -CAfile ca.crt 输出:
SSL handshake has read 1619 bytes and written 2239 bytes Verification: OK
所以我认为证书没有问题,使用 Ha 代理进行连接时会出现问题
错误: 无法连接到服务器:x509:证书指定了不兼容的密钥用法
Ha 代理错误: 2021-08-12T14:45:36.930478+02:00 parasilo-27 haproxy[21562]::34672 [12/Aug/2021:14:45:36.927] server/1: SSL 握手失败 2021-08-12T14:45:37+02:00 localhost haproxy[21562]::34674 [12/Aug/2021:14:45:37.438] server/1: SSL 握手失败
【问题讨论】:
-
几件事:1. 如果该层是 HTTP 并配置为
mode http,haproxy ACL 可以与 L7 一起使用,您可以这样做。 2. config 看起来没问题。 3.添加一些来自haproxy的日志,一些你提出的请求和你得到的错误,这样更容易找出实际问题 -
嗨@tbielaszewski,谢谢你的回复。我说错了,我的意思是 ACL 不适用于 L4 (TCP),我现在已经编辑了那部分。在测试了一段时间后,我在一些文档中看到了它。 3) 连接将转发到实际的后端服务器。但服务器无法识别此请求。但是在使用 Haproxy 的普通端口转发中,它可以完美运行。它在 Kubernetes 中工作,我正在尝试在 Kubectl CLI 和 Kubeapi 服务器之间实现一个拦截器
-
嘿再次@tbielaszewski,我已经记录了错误并重新编辑了整个问题。请看一下。
-
certificate specifies an incompatible key usage表示 SSL 证书有问题。检查openssl x509 -in /path/to/cert.pem -noout -ext extendedKeyUsage是否显示类似X509v3 Extended Key Usage: TLS Web Server Authentication, TLS Web Client Authentication或您的客户可能需要的任何其他内容 - 这有时是任意的,需要研究软件文档或猜测。我不知道 kubernetes,所以我无法满足它的需求。您也可以尝试在密钥使用方面比较有效证书和无效证书。 -
嘿@tbielaszewski,谢谢你,我想这肯定给了我工作的机会。我确实得到了“X509v3 Extended Key Usage: TLS Web Client Authentication”。无论如何我们可以使它适合处理请求吗?我已经搜索了文档、git、stackoverflow 以及所有其他内容,但到目前为止还没有找到任何合适的答案。