在写一个平平无奇的对接接口时候 突然报一个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 &
成功!