java学习之HttpClient忽略安全证书(SSLContext)

news/2024/11/16 5:36:11/文章来源:https://www.cnblogs.com/michaelShao/p/18408386

1.我们在写https请求时候,经常会遇见安全证书(SSL)验证失败的情况,如下图。

 上图异常就是因为SSL验证失败导致的,常规的做法是忽略证书认证。方法如下:

第一步:需要重写认证的证书类 X509ExtendedTrustManager。

第二步:创建SSLContext对象。

第三步:将SSLContext对象设置到HttpClient中。

下面是完整的代码示例,亲测有效.

package org.example;

import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLEngine;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509ExtendedTrustManager;
import java.io.IOException;
import java.net.Socket;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;


public class Main {

private static final TrustManager DUMMY_TRUST_MANAGER = new X509ExtendedTrustManager() {
@Override
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
return new java.security.cert.X509Certificate[0];
}
@Override
public void checkServerTrusted(java.security.cert.X509Certificate[] chain, String authType) throws CertificateException {
}
@Override
public void checkClientTrusted(X509Certificate[] x509Certificates, String s, Socket socket) throws CertificateException {
}
@Override
public void checkServerTrusted(X509Certificate[] x509Certificates, String s, Socket socket) throws CertificateException {
}
@Override
public void checkClientTrusted(X509Certificate[] x509Certificates, String s, SSLEngine sslEngine) throws CertificateException {

}
@Override
public void checkServerTrusted(X509Certificate[] x509Certificates, String s, SSLEngine sslEngine) throws CertificateException {

}
@Override
public void checkClientTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {

}
};

public static void main(String[] args) throws IOException, URISyntaxException, InterruptedException, NoSuchAlgorithmException, KeyManagementException {
String url = "https://api.medusa.dev.sbisec.internal/mock/bulk/users/restrictions?code=DW001,DW002&fromDate=20240101";
/** 创建SSLContext*/
SSLContext sslContext = SSLContext.getInstance("SSL");
sslContext.init(null, new TrustManager[]{DUMMY_TRUST_MANAGER}, new SecureRandom());
/** 将HSSLContext设置到HttpClient*/
HttpClient client = HttpClient.newBuilder().sslContext(sslContext).build();
HttpRequest request = HttpRequest.newBuilder()
.header("accept", "text/csv")
.header("X-API-KEY", "bYLhk7gqDb3RmT9Ahchen1ucqyhes5jpac8lA5Lf")
.uri(new URI(url)).build();

HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/795516.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

redmine配置邮件通知

redmine的邮件通知配置文件就在redmine的config文件夹里面 1:我们先到安装路径下面的config,找到configuration.yml,默认是没有的,我们要把模板文件复制一份出来 执行命令:cp configuration.yml.example configuration.yml 2:要先开通邮箱的SMTP服务,我的是126邮箱,开…

Jenkins 编译 .NET 6 WPF

最近公司需求要将产品编译自动化,干了那么多年客户端开发一直都是小作坊作业最近换了一个比较正规的互联网公司一切都需要标准化流程化了,自动化也必不可少!然后我就了解到了Jenkins这玩意,找了两天资料感觉还挺简单的写篇文章收录下。 因为签名UKey只要windows驱动 ,所以…

JMeter 介绍与安装

简介 Apache JMeter 是一个开源的 Java 应用程序,用于进行性能测试和负载测试。 它可以模拟多种协议的负载,被广泛用于测试 Web 应用程序、Web 服务、数据库和其他网络服务的性能。 JMeter 的优点纯 Java 程序,跨平台性强:Windows、Mac、Linux 开源免费。 高可扩展性:支持…

如何使用zabbix内置 key 配置windows服务监控

原作者:乐维社区 原出处:乐维社区 原文章链接:https://forum.lwops.cn/article/618 windows的服务管理工具中有许多不同类型的服务,包括系统、应用程序、驱动程序、自定义服务等。在监控这些windows服务的时候,我们可以直接使用内置的函数key去进行监控。Zabbix的内置key(…

DBeaver clickhouse 时区不对 时间少了8小时

现象: 确认过clickhouse时区配置是正确的(时区配置参考: https://blog.csdn.net/vkingnew/article/details/107227037) 然而 通过DBeaver连接后查询当前时间却慢了8小时,通过命令行连接clickhouse 查看时间又是准确的 命令行查询DBeaver查询原因:是DBeaver配置问题 解决方法:添…

面试-JS基础知识-作用域和闭包、this

函数作为返回值function create(){const a = 100return function (){console.log(a) //a在这里是自由变量,向上寻找} }const fn = create() const a = 200 fn() //100函数作为参数function print(fn){const a = 13fn() } const a = 100 function fn(){console.log(a) } print(…

WPF创建不规则窗体时WebBrowser控件不显示的问题

最近有小伙伴需要在不规则窗体上放置WebBrowser控件,因为设置了WindowStyle="None" 和 AllowsTransparency="True"。 导致WebBrowser控件不显示。界面如下所示:1 <Window x:Class="WebBrowserDemo.MainWindow" 3 xmlns="h…

MUR2060CT-ASEMI快恢复二极管MUR2060CT

MUR2060CT-ASEMI快恢复二极管MUR2060CT编辑:ll MUR2060CT-ASEMI快恢复二极管MUR2060CT 型号:MUR2060CT 品牌:ASEMI 封装:TO-220AB 安装方式:插件 批号:最新 恢复时间:35ns 最大平均正向电流(IF):20A 最大循环峰值反向电压(VRRM):600V 最大正向电压(VF):0.95V~1…

多维度解析:为什么 Traefik 是云原生首选网关?

Hello folks,我是 Luga,今天我们来聊一下云原生生态领域相关的技术 - 云原生网关 Traefik 。 根据 Traefik Labs 团队对于 Traefik 在云原生生态中的定位:云原生反向代理和负载均衡器及网关解决方案。 — 01 — 从生态拥抱视角看:Traefik 的发展前景 从云原生生态视角来看,…

Adafactor Adaptive Learning Rates with Sublinear Memory Cost

目录概符号说明AdafactorFactored Second Moment EstimationNo MomentumOut-of-Date Second Moment Estimator算法代码Shazeer N. and Stern M. Adafactor: Adaptive learning rates with sublinear memory cost. ICML, 2018.概 本文介绍了一种 memory-efficient 的优化器: Ada…

Oracle 19c OCP 认证考试 082 题库(第19题)- 2024年修正版

【优技教育】Oracle 19c OCP 082题库(Q 19题)- 2024年修正版 考试科目:1Z0-082 考试题量:90 通过分数:60% 考试时间:150min 本文为(CUUG 原创)整理并解析,转发请注明出处,禁止抄袭及未经注明出处的转载。 原文地址:http://www.cuug.com.cn/ocp/082kaoshitiku/3822886061…