记录一次解决SSL protocol_version 以及handshake_failure 问题

在对接接口时遇到SSL protocol_version错误,通过设置SSLContext为TLSv1.2解决了问题,但随后出现handshake_failure错误。分析发现可能因密码套件不兼容导致,通过列出并对比JDK1.7与对方服务器支持的密码套件,发现JDK1.7不支持某些套件。为避免全项目升级风险,选择仅让DUBBO服务使用JDK1.8启动,修改启动脚本成功解决问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在写一个平平无奇的对接接口时候 突然报一个protocol_version问题,原来以为很简单的加一个

SSLContext ctx = SSLContexts.custom().useProtocol("TLSv1.2").build();

就可以了

 

可是加了过后  protocol_version 错误没有了 又出现了handshake_failure 错误 在网上查了很久,查到可能是密码套件不支持导致握手失败 于是写了一个查询所有的密码套件的方法

public static void main(String[] args) {
   SSLServerSocketFactory ssf =(SSLServerSocketFactory)SSLServerSocketFactory.getDefault();
   TreeMap<String,Boolean> ciphers = new TreeMap<String,Boolean>();
   for(String cipher:ssf.getSupportedCipherSuites())
      ciphers.put(cipher,Boolean.FALSE);
   String[] defaultCipherSuites = ssf.getDefaultCipherSuites();
   for(String str:defaultCipherSuites){
      System.out.println("defaultCipherSuites=="+str);
   }
   for(String cipher:defaultCipherSuites)
      ciphers.put(cipher,Boolean.TRUE);

   System.out.println("Default Cipher");
   for(Entry< String,Boolean> cipher:ciphers.entrySet()){
      System.out.printf("%-5s%s%n",(cipher.getValue()?'*':""),cipher.getKey());
   }
}

后面又用  curl -v https://***/tender/setInfo

查到对方的密码套件为

再一对比 JDK1.7果然没有

但是由于是旧项目各个模块一直都是用1.7 全部升级到1.8 会有风险 于是指定该DUBBO服务单独用JDK1.8启动

修改启动脚本新增以下内容

JAVA_HOME=/data/wh/jdk1.8.0_231
JAVA=$JAVA_HOME/bin/java
nohup $JAVA $JAVA_OPTS $JAVA_MEM_OPTS $JAVA_DEBUG_OPTS $JAVA_JMX_OPTS -classpath $CONF_DIR:$LIB_JARS com.alibaba.dubbo.container.Main > $STDOUT_FILE 2>&1 &

成功! 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值