当前位置: 首页 > 知识库问答 >
问题:

TLS握手失败。HTTPS向HA代理请求超文本传输协议,然后再次加密将请求转发到ssl服务器

冯浩旷
2023-03-14

需要帮助。我有一个https请求,需要拦截它,读取值并将相同的ssl请求转发到目标。我随身携带所有必需的crtCA。我知道Haproxy ACL不适用于L4层,但我正试图找到一种解决方法来解密消息、读取消息、再次加密并转发。读取消息的原因是为了使用ACL,我需要读取carious请求中的路径差异,并相应地将请求路由到不同的服务器。我正在尝试截获客户端对服务器的请求,默认情况下,请求是SSL,服务器需要SSL请求

SSL crt:使用新的crt密钥对创建了一个新用户,并使用服务器的证书签名请求对服务器中的CA进行身份验证

该场景是,我有一个传入的SSL请求,我正在使用服务器证书将其捕获到haproxy的前端,当将该请求转发到测试Web服务器时,我可以看到它已从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-键myuser。键-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:00parasilo-27 ha代理[21562]::34672[12/Aug/2021:14:45:36.927]server/1: SSL握手失败2021-08-12T14:45:37 02:00localhostha代理[21562]::34674[12/Aug/2021:14:45:37.438]server/1: SSL握手失败

共有1个答案

宇文飞翮
2023-03-14

总结评论中分析的内容,如所问。也许有一天它会对某些人有用
Haproxy的配置结果是正确的,但生成的证书具有错误的扩展密钥用法(X509v3扩展)。用于列出扩展密钥用法的命令:

openssl x509 -in /path/to/cert.pem -noout -ext extendedKeyUsage

通常,在internet上购买时,它会显示X509v3扩展密钥用法:TLS Web服务器身份验证、TLS Web客户端身份验证。原始海报使用自签名、自生成的证书,其在haproxy前端使用的证书只有TLS Web客户端身份验证,如果使用此扩展,前端需要TLS Web服务器身份验证
导致错误消息的原因:

Error: kubectl get po: Unable to connect to the server: x509: certificate specifies an incompatible key usage

结果是,代理记录了SSL握手失败,但没有更多细节,这是它的习惯。

TLS Web服务器身份验证添加到haproxy前端部分的证书和TLS Web客户端身份验证添加到haproxy后端部分的证书后,原始海报报告成功。

 类似资料:
  • 问题内容: 每次我尝试做: 我收到此消息: 我尝试了一切: 更新我的要求 更新我的SSL 但没有任何变化。 我正在使用Python 2.7.6,无法更改此设置。 问题答案: 我最终解决了问题,将Ubuntu版本从14.04更新为14.10,问题已解决。 但是在旧版本的ubuntu和python中,我安装了这些lib,它似乎解决了所有问题 如果您没有安装pip2.7,则可以改用pip

  • 我必须向一些没有任何参数的API发送GET请求,所以我编写了代码: 当API url是HTTP时,它可以工作,但不适用于HTTPS。它说: 太阳安全验证器。ValidatorException:PKIX路径生成失败:sun。安全供应商。certpath。SunCertPathBuilderException:找不到请求目标的有效证书路径;嵌套的异常是javax。网ssl。例外:太阳。安全验证器。V

  • 我正在使用GWT和Spring controller来管理http流量。有些请求可能需要很长时间,但我希望在超过给定时间时终止请求。 我如何配置超时Spring。我也使用Apache Tomcat 7.0。我试图在tomcat上inrease最大线程,但有一段时间tomcat工作缓慢,因为请求线程不会死。

  • 我有以下伪代码 我想要的是,我循环遍历一个对象数组,每个对象都获得相关的用户和产品,然后订阅用户和产品。我怎么能那样做?

  • 我已经设置了一个ec2实例,其中一个java web应用程序运行在tomcat服务器上,另一个aws应用程序负载平衡器将端口80和443定向到ec2实例上的端口8080。 我已更改服务器。tomcat上的xml配置如下 现在我可以连接到“sub.mydomain.com”和“https://sub.mydomain.com”。但是如何将所有“http://sub.mydomain.com”请求重定

  • 我有专有的基于http的API要从JMeter测试。不幸的是,API的一些endpoint希望http DELETE方法带有请求体(我知道它的API设计有问题,使用DELETE with request body,但我无法更改该API,需要对其进行测试)。 如何从JMeter测试它?似乎标准的HttpRequest采样器在没有任何警告的情况下默默忽略了我的身体有效载荷。(当我在《邮递员》中尝试它时