Unrecognized SSL message, plaintext connection?https请求遇到异常分析

时间:2021-08-01 19:37:43

先简单介绍一下场景。

服务架构为:haproxy+keepalive + esb+应用。

在esb层实现 https双向认证。这样就需要 haproxy 使用 tcp 模式进行转发。


配置好 haproxy 后,用restclient模拟客户端发送https请求时 客户端报错:

“Unrecognized SSL message, plaintext connection?”


客户端对同一端口(https的端口)使用http协议发送消息时,服务端(esb)日志报错:

“Unrecognized SSL message, plaintext connection?”


网上搜到一篇文章解释这个问题:http://blog.csdn.net/dtlscsl/article/details/50462721

产生该问题的原因是:

客户端产生“Unrecognized SSL message, plaintext connection?”的异常 是因为对方提供的不是https服务的端口;

服务端产生该异常,是因为客户端以 http协议访问 服务端的https服务。


带着这个思路,查了下 haproxy的配置,发现

defaults
        log     global
        mode    http
        option  httplog
        option  dontlognull
        retries 3
        option redispatch

默认的方式为http的!


而esb的服务没有配置传输方式!

listen  ESB_https 0.0.0.0:8243
        mode tcp
        log global
        option tcplog

        balance roundrobin
        server  ESB_https_126  172.16.0.126:8243 weight 1 maxconn 10000 check inter 3600s
        server  ESB_https_36   172.16.0.36:8243 weight 1 maxconn 10000 check inter 3600s

加上红字的3句,解决了这个问题。