这两天搭建完博客之后,想着丰富一下博客内容,于是乎想到转载网上牛人博客,之前也有过类似需求,说干就干,不一会就搭建好了环境,准备动手大干一场。
阮一峰老师的网络日志博文质量上乘,准备借鉴一下(当然大家在转载他人博文时需要遵守博主转载要求),然而事情总是没有那么顺利,
在输入: https://www.ruanyifeng.com/xxxx/xxxx 网址后,出现了尴尬的问题:
毕竟干过几年Java ,这一看就知道是 https 协议的问题,并且是传输层加密问题,转载事业不容停歇,怎么办呢,既然是https问题,那我们就访问 http, 嘿嘿,果然有效果。
这种投机取巧的技巧并没有正真解决问题,作为大龄青年,必须正面硬刚,上网搜索了大量资料,了解了 HTTPS 与 HTTP 的区别以及运行机制,基本了解了问题产生的原因以及相应的解决方案,这里直接给出处理方案,我这里使用的是 apache http 工具,需要修改
SSLConnectionSocketFactory 创建逻辑,如下所示:
private SSLConnectionSocketFactory buildSSLConnectionSocketFactory() {
try {
/// 这里添加 TLS 支持的加密协议 "SSLv3", "TLSv1", "TLSv1.1", "TLSv1.2"
return new SSLConnectionSocketFactory(createIgnoreVerifySSL(), new String[]{"SSLv3", "TLSv1", "TLSv1.1", "TLSv1.2"}, null, new DefaultHostnameVerifier());
} catch (KeyManagementException e) {
logger.error("ssl connection fail", e);
} catch (NoSuchAlgorithmException e) {
logger.error("ssl connection fail", e);
}
return SSLConnectionSocketFactory.getSocketFactory();
}
产生上面问题的主要原因是 Oracle Java JDK 在版本迭代的时候考虑到安全问题,会禁用一些加密协议,具体可以在 $JAVA_HOME/jre/lib/security/java.security 中的 jdk.tls.disabledAlgorithms 查看禁用的协议,你可以修改,但是不建议,毕竟JDK 发布方也是经过深思熟虑的。当然我直接注释了该内容。
联系方式
技术更新换代速度很快,我们无法在有限时间掌握全部知识,但我们可以在他人的基础上进行快速学习,学习也是枯燥无味的,加入我们学习牛人经验:
点击:加群讨论