java证书验证失败_Java 跳过 HTTPS 请求过程中证书验证问题
受益于谷歌和苹果对 HTTPS 的强制升级要求,服务已经全面升级了,安全性提高的同时也引起了新的问题。
由于 HTTPS 证书还是很贵的,所以各种测试环境上各种非法证书,通过浏览器访问的时候可以直接选择信任证书,但通过代码就不行了,会直接抛出证书不通过的异常:java.security.cert.CertificateException javax.net.ssl.SSLHandshakeException sun.security.validator.ValidatorException 。
这时候我们可以选择直接跳过验证,当然这会使 HTTPS 的安全性就失效了,所以生产环境尽量不要用。
先进行配置初始化:
private static SSLSocketFactory sslFactory;
private static HostnameVerifier nameVerifier;
static {
try {
SSLContext sslc = SSLContext.getInstance("TLS");
TrustManager[] trustManagerArray = {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 new X509Certificate[0];
}
}};
sslc.init(null, trustManagerArray, null);
sslFactory = sslc.getSocketFactory();
nameVerifier = new HostnameVerifier() {
@Override
public boolean verify(String s, SSLSession sslSession) {
return true;
}
};
} catch (Exception e) {
log.error("系统初始化失败", e);
}
}
一般正常的 url 链接代码可能是是这样的:
public static String get(String urlLocation) throws Exception {
HttpURLConnection conn = null;
InputStream is = null;
try {
URL url = new URL(urlLocation);
conn = (HttpURLConnection)url.openConnection();
conn.connect();
is = conn.getInputStream();
return IOUtils.toString(is, "UTF-8");
} finally {
IOUtils.closeQuietly(is);
if(conn != null) conn.disconnect();
}
}
只需要简单修改,在进行实际连接前进行网络协议判断然后进行设置就可以了:
conn = (HttpURLConnection)url.openConnection();
if(conn instanceof HttpsURLConnection) {
HttpsURLConnection https = (HttpsURLConnection) conn;
https.setSSLSocketFactory(sslFactory);
https.setHostnameVerifier(nameVerifier);
}
conn.connect();
到此结束,测试通过。
java证书验证失败_Java 跳过 HTTPS 请求过程中证书验证问题相关推荐
- python怎么爬虫https的内容_爬虫15 python 如何处理HTTPS请求访问 SSL证书验证
1 https和SSL之间是什么关系 https和SSL之间是什么关系:https就是在http上面加了一层ssl协议,在http站点上部署SSL数字证书就变成了https. 现在随处可见 https ...
- Http和https请求过程
一.HTTP请求过程 1.浏览器根据域名解析IP地址 什么是DNS? 域名系统(DNS)是因特网的电话簿.DNS将域名转换为IP地址,以便浏览器可以加载Internet资源. DNS查找: 1.首先搜 ...
- 请求过程中,需要证书认证,这种情况下如何处理
某些站点请求时候,会需要证书,没有通过认证直接访问, 请求返回结果一般包含 code 443 和 cert,要如何处理 1.请求过程中,添加证书,但这种方式不那么方便或者友好,一般不这么处理 2.请 ...
- 在Caffe的训练过程中打印验证集的预测结果
起因:Caffe里的GoogLeNet Inception V1只能输出对应于三个loss的accuracy,我想计算precision,recall和F1-measure.但是调用caffe的Pyt ...
- java登录密码验证失败_java – Spring Security:如果身份验证失败,则重定向到登录页面...
我们有两种登录方式. >用户名和密码由请求标头中的其他应用程序发送.检查IT,如果用户名和密码正确,则进入.[为此编写自定义过滤器] >如果请求标头中不存在用户名和密码,则会显示登录屏幕. ...
- tomcat配置https以及http强制跳转https(如何生成证书)
https介绍: HTTPS(全称:Hypertext Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版. ...
- java 删除文件失败_java中File的delete()方法删除文件失败的原因
一般来说 java file.delete失败 有以下几个原因 1.看看是否被别的进程引用,手工删除试试(删除不了就是被别的进程占用) 2.file是文件夹 并且不为空,有别的文件夹或文件, 3.极有 ...
- android https请求证书过滤白名单,Android处理https请求的证书问题
android中对部分站点发送https请求会报错,原因是该站点的证书时自定义的,而非官方的,android手机不信任其证书,为了解决这个问题,一般有两种解决方案 忽略证书验证 下载证书到本地,添加到 ...
- springboot 使用restTemplate 发送https请求 忽略ssl证书
最近在写接口的时候给对方回推数据,发送https请求的时候遇到这么个报错:javax.net.ssl.SSLHandshakeException: sun.security.validator.Val ...
最新文章
- 日本3D打印最贵牛肉!人工组装肌肉脂肪和血管,两天即完成,网友:赛博朋克的仿制肉...
- ninject 的 实现 的 理解
- 【数学】数列(jzoj 2752)
- Socket编程小结
- MySQL免安装版安装
- JDK 1.6环境变量的设置
- Lightroom Classic 教程,如何在 Lightroom 中使用边界变形保留完整视图?
- UVA - 10129 Play on Words(欧拉回路)
- 卷积神经网络CNN基本原理和相关基本概念
- 计算机是uefi启动 不能装win7,UEFI模式安装Win7系统方法_Win7 Uefi下安装详细教程
- 2010年国家公务员考试行测真题WORD完整版
- vue3 web项目引入高拍仪
- keras.models导入Sequential错误
- ApplicatioinRunner vs CommandLineRunner
- C语言手写爱心-还原最新热剧撩妹代码
- Win10照片应用的小bug——自动模糊图片(有过渡色)
- 利用AI+大数据的方式分析恶意样本(十三)
- java配置ehcache_配置和使用Ehcache
- php如何继续提升技术?一个php技术栈后端猿的知识储备仓库
- Java时间格式化工具类大全_二