jdk1.8 okhttp SSL peer shut down incorrectly Remote host

在爬取一个网站的时候,总是抛出这样的异常。网上绝大部解决办法是忽略ssl证书,因为一般在验证证书的时候会出现这个问题。但是我已经忽略证书。
环境:jdk1.8.0_221 okhttp

目前已知的可能照成该问题有3种情况
1.访问的网站证书错误,需要对证书进行忽略。
可参考:okhttp3.0忽略https证书
java 忽略SSL证书

2.访问的网站使用TLSv1.2协议,但是jdk1.7默认为TLSv1.1。因为协议版本导致的问题。
可参考:解决jdk1.7 不支持TLS1.2的问题

3.加密方式。在jdk1.8 或者1.7中,其实已经禁用了一部分加密算法,但是某些古老的网站,确实还在使用旧的算法,这个时候就需要手工对其放开。我遇到的其实就是此种情况。

如果chrome可以打开,先通过chrome查看连接的信息
jdk1.8 okhttp SSL peer shut down incorrectly Remote host_第1张图片

其中Cipher就是对应的加密算法,查看jdk1.8禁用算法列表
路径:/Library/Java/JavaVirtualMachines/jdk1.8.0_221.jdk/Contents/Home/jre/lib/security/java.security
搜索jdk.tls.disabledAlgorithms

jdk1.8 okhttp SSL peer shut down incorrectly Remote host_第2张图片
如果需要禁用某些算法也可以在其中加入,如果发现需要访问的算法,删除即可。

如果使用okhttp依旧存在问题,可参考:
okhttpERRServer chose TLSv1, but that protocol version is not enabled or not supported by the client

其他:
1.如果需要导入证书,可以把证书放到/Library/Java/JavaVirtualMachines/jdk1.8.0_221.jdk/Contents/Home/jre/lib/security/路径下。
2.排查此类问题,可以加入java参数打印连接的详细信息。

-Djavax.net.debug=all

你可能感兴趣的:(问题定位,趟过的坑)