admin管理员组文章数量:1565795
一、问题的发现
问题是前段时间发现和处理,现在再来回顾和总结。那段时间,线上偶尔预警Remote host closed connection during handshake这个报错,次数大概是一天3-10次左右,频率不高。一开始没有多少关注,但心想既然出现了,总要查个究竟。
这个功能请求了一个第三方接口,使用https协议。
二、尝试处理
自己对https协议理解不深,出现这个问题,先是百度,后是谷歌,反正查的都查了。网上分析的原因无非是两种:
①、ssl版本问题
②、ssl证书验证问题
③、jdk1.8加密套件问题,相关配置是crypto.policy
其中,说ssl版本问题的说法最多,这三种问题的处理方法对应的是,升级ssl版本,生产代码默认使用的是tls 1.0,所以能升级看看;另一种是去掉ssl证书验证,就是对所有证书全部信任。相关代码如下:
X509TrustManager xtm = new X509TrustManager() {
@Override
public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {}
@Override
public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {}
@Override
public X509Certificate[] getAcceptedIssuers() {
return null;
}
};
SSLContext ctx = SSLContext.getInstance("TLSv1.0");
ctx.init(null, new TrustManager[]{xtm}, null);
SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(ctx, NoopHostnameVerifier.INSTANCE);
很明显,当信心满满的上线后,发现,问题依然存在。对前两种没有起效,只能看看修改Java\jre\lib\security\java.security文件的
crypto.policy=unlimited
具体的分析和原理,请看参考资料1.这里不做多分析
很明显,第三种尝试,也不能解决问题。没办法了,只能抓包了。为什么最后是抓包,就像那句“源码面前,了无秘密”,所有数据交互,都可以通过抓包看到。
三、预备知识
抓包分析之前,我们必须对ssl有所了解,虽然不用很深入,但是基本原理是要了解的,所以就是问题驱动学习,让我学习了一下ssl。ssl和tls的区别:tls是在ssl的基础上发展的,两者会有些区别,其中最重要的是tls在安全性和内容上做了增强和改进。而https协议,是在tcp和http协议间,嵌入了tls协议,做加密内容。
SSL/TLS协议运行机制的概述
(1)客户端先发起clienthello,同时还会发送随机数
(2)服务端回复serverhello,同时还会发送证书和随机数
(3)客户端还会发送一个随机数,如果客户端要求验证证书的可靠性,还会发送CertificateVerify等
(4)服务端的最后回复
这里证书包含了公钥,公钥用来加密随机数,而不是加密交互的内容,真正用来加密内容的是三个随机数组合而成的密码,双方使用这个密码加密解密
了解这个握手流程,是为了看懂抓捕的报文,还想深入了解tls的,可以参考资料3
四、抓包分析
抓包分析的结果是,客户端收到服务器发送的证书后,回复ACK,此时服务器却结束了连接,发送FIN给客户端。由此可见,问题是出在服务端,也就是第三方,而不是自己这边。
另外,我还把这个异常的报文和正常的报文做了比较,发现两者的协议版本、证书、加密套件等都是一样,也就更加确定和排除了上面分析的原因
五、解决方案
很明显,只能让接口提供方排查,最后发现是对方服务器故障(具体原因不得而知),后面移除了有问题的服务器,问题就解决了。
所以,出现这种问题,除了可能是上面讲的原因外,还有可能是对方服务器的问题。
参考
- https://blog.csdn/kevin_mails/article/details/82143490
- http://www.ruanyifeng/blog/2014/02/ssl_tls.html
- https://blog.csdn/mrpre/category_9270159.html
本文标签: 时报RemoteSSLTLSConnection
版权声明:本文标题:SSLTLS握手时报Remote host closed connection during handshake 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/dongtai/1726225001a1061404.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论