美文网首页
ssl shakehand failed握手失败

ssl shakehand failed握手失败

作者: 给代码点颜色 | 来源:发表于2020-12-08 18:43 被阅读0次

    环境

    • JDK1.8.0_271
    • springboot 2.2.6.RELEASE
    • web3sdk 2.5.0

    情况介绍

    项目是通过连接bcos链,获取节点信息并上传到另一https服务接口。

    项目启动的时候会先从https服务接口获取token,然后连接bcos链获取链信息,通过token上传https服务。

    问题

    项目启动的时候,先打印获取到token信息,然后通过web3sdk连接bcos链。这个时候问题出现了,ssl shakehand failed并且没有任何异常信息。

    握手失败定位过程

    debug

    没有找到什么有用的问题

    打印握手信息

    加上启动参数-Dssl.debug=true -Djavax.net.debug=all即可打印握手信息,发现在客户端发送ClientHello包之后,发现连接关闭了javax.net.ssl.SSLException: closing inbound before receiving peer's close_notify

    Wireshark抓包

    image.png

    抓了包之后以为是SNI问题,最后排除了这个情况。因为我直接用的是IP,不需要SNI配合(自己理解的,具体还需要查资料确认)。

    问题的本质

    回归到问题的本质上,调用bcos是一个单独的jar,在这个jar单独写测试用例,发现连接成功...

    然后在项目中写测试用例,又握手失败...

    仔细查log发现获取token使用的是Spring注解@PostConstruct,这玩意在类创建后就开始执行,而不是项目启动成功之后。

    神奇的事情发生了,调整为项目启动成功之后再获取token(implements ApplicationRunner或CommandLineRunner),这就成了...

    ......

    其他问题

    PKIX path validation failed: java.security.cert.CertPathValidatorException: Algorithm constraints check failed on disabled algorithm: secp256k1

    这个问题是因为我的jdk版本禁用了secp256k1这个加密方式,处理办法如下。

    1. 找到本地jdk安装目录,打开jre/lib/security/java.security文件
    2. 找到文件中secp256k1(跟在jdk.disabled.namedCurves = 后面),删除就行了。

    相关文章

      网友评论

          本文标题:ssl shakehand failed握手失败

          本文链接:https://www.haomeiwen.com/subject/xkjqgktx.html