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

news/2024/9/30 5:29:20

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://my.dream.bet/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.ryyt.cn/news/59143.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

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配置问题 解决方法:添…

自注意力机制(self-attention)

自注意力机制self-attention红色框中的这四个向量是考虑了整个sequence后的输出,而且self-attention不仅可以使用一次,transformer中最重要的就是self-attention根据\(a^1\)找到和\(a^1\)相关的向量,比如如何计算\(a^1\)和\(a^4\)有多相关计算有很多不同的方法计算相关度\(\…

面试-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(…