BUG合集(一) javax.net.ssl.SSLHandshakeException问题

最近写爬虫遇到了这个问题
弄了快两天看了好多文章都解决不了… …
所以想把过程中找到的可能方法记录一下。

javax.net.ssl.SSLHandshakeException: No appropriate protocol 
(protocol is disabled or cipher suites are inappropriate) 	at sun.security.ssl.HandshakeContext.<init>
(HandshakeContext.java:171)

知识补充

SSL :
SSL(Secure Sockets Layer 安全套接层)协议,及其继任者TLS(Transport Layer Security传输层安全)协议。
是为网络通信提供安全及数据完整性的一种安全协议。
TLS与SSL在传输层对网络连接进行加密,用于保障网络数据传输安全,利用数据加密技术,确保数据在网络传输过程中不会被截取及窃听。
SSL协议已成为全球化标准,所有主要的浏览器和WEB服务器程序都支持SSL协议,可通过安装SSL证书激活SSL协议。

SSL 证书就是遵守 SSL协议的服务器数字证书,由受信任的证书颁发机构(CA机构),验证服务器身份后颁发,部署在服务器上,具有网站身份验证和加密传输双重功能。

上网搜索尝试了很多方法

可能原因:

jdk版本导致SSL调用权限上有问题

解决方案:

(1)下载网站的证书并添加到使用的jdk的相应文件中
参考博客:https://blog.csdn.net/qq_27471405/article/details/106485866
(2) 找到jdk 1.8安装目录,找到C:\Program Files\Java\jre里面的lib\security 下面有个java.security。找到disableAlgorithms后面对应的SSLv3,删除掉,重启项目就好了。(删掉SSLv3就是允许SSL调用)
BUG合集(一) javax.net.ssl.SSLHandshakeException问题_第1张图片
(3) url: jdbc:mysql://IP:3306/quote?useSSL=false 禁用掉SSL
(2)(3)方法来自https://jiannan.blog.csdn.net/article/details/80577688

我的解决过程

首先尝试了方法2,3。并没有什么效果。
然后尝试的方法1
我之前用的是jdk11,把证书保存到cacerts中后并没有解决问题
然后就下载了jdk8
项目改变jdk的方法可参考https://blog.csdn.net/qzw752890913/article/details/116031280
将证书弄到jdk1.8中再把项目jdk改成jdk1.8就行了

不过关于这个一场感觉还是有很多不明白的地方,加深理解后再进行继续完善。

有一点比较坑的是,我用webmagic爬的时候,没有报错没有异常,只是html显示不出来,我还以为是因为网站反爬太强… …
结果把ssl证书配置好后就能成功爬下来了。

你可能感兴趣的:(ssl,bug,java)