首页 > 编程语言 >java学习之HttpClient忽略安全证书(SSLContext)

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

时间:2024-09-11 16:16:15浏览次数:10  
标签:SSLContext java security X509Certificate import net public HttpClient

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());
}
}

标签:SSLContext,java,security,X509Certificate,import,net,public,HttpClient
From: https://www.cnblogs.com/michaelShao/p/18408386

相关文章

  • 中级 Java 软件工程师会遇到的事情
      计算机编程设计是一种工程学科。工程是依靠科学和时间实践才能有的经验。工程偏向的是 工程师的动手能力。科学是引导方向。C语言程序开发语言是一种软件思想知识普及的划时 代的变革。大学中学习过程序设计的学生,对于assembly  汇编,Basical  程序设计等都是十 分......
  • 第五章,java超市会员管理系统(后端)
    高级编程第五章,java超市会员管理系统(后端)一,项目概述本项目旨在开发一个超市会员管理系统,帮助超市管理会员信息、积分、优惠活动等。系统将提供用户友好的界面,方便超市员工进行日常操作。二,功能需求积分积累积分兑换查询剩余积分开卡(送100积分)退出系统三,实现分......
  • 模式-单例模式-java
    目录前言单例模式单例模式的几种实现方式饿汉式饿汉式-静态变量写法饿汉式-静态代码块写法懒汉式懒汉式-经典写法懒汉式-同步方法(不推荐)懒汉式-双重检查锁(推荐)懒汉式-静态内部类(推荐)存在的问题枚举(天然适合)总结前言最近看EffectiveJava看到了一点关于单例模式的内容,结合自己所......
  • 《JavaEE进阶》----14.<SpringMVC配置文件实践之【验证码项目】>
    本篇博客介绍的是Google的开源项目Kaptcha来实现的验证码。这种是最简单的验证码。也是很常见的一种验证码。可以去看项目结果展示。就可以明白这个项目了。前言:随着安全性的要求越来越高、很多项目都使用了验证码。如今验证码的形式也是有许许多多、更复杂的图形验证码......
  • Java语言程序设计基础篇_编程练习题*18.10 (字符串中某个指定字符出现的次数)
    目录题目:*18.10(字符串中某个指定字符出现的次数)习题思路代码示例 输出结果题目:*18.10(字符串中某个指定字符出现的次数)  编写一个递归方法,使用下面的方法头给出一个指定字符在字符串中出现的次数。publicstaticintcount(Stringstr,chara) 例如,coun......
  • Java小白一文讲清Java中集合相关的知识点(八)
    HashMap底层机制及源码剖析HashMap底层维护了Node类型的数组table,默认为null当创建对象时,将加载因子初始化为0.75;当添加key-value时,通过key的哈希值得到在table的索引,然后判断该索引处是否有元素,如果没有元素直接添加,如果该索引处有元素,继续判断该元素的key是否和......
  • Java中的线程优先级与调度:如何有效管理线程的执行顺序
    Java中的线程优先级与调度:如何有效管理线程的执行顺序大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!在Java中,线程的优先级和调度策略对于高效管理线程执行顺序至关重要。通过合理地设置线程优先级和调度策略,可以有效地优化应用的性能和响应时间。本......
  • 如何在Java服务中使用Circuit Breaker模式:Hystrix与Resilience4j的比较
    如何在Java服务中使用CircuitBreaker模式:Hystrix与Resilience4j的比较大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!在分布式系统中,服务调用的稳定性和可靠性至关重要。CircuitBreaker(熔断器)模式可以有效地防止服务故障的蔓延,保护系统的稳定性。本......
  • Java服务端中的数据验证:使用Bean Validation与Spring Validator的最佳实践
    Java服务端中的数据验证:使用BeanValidation与SpringValidator的最佳实践大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!在Java服务端开发中,数据验证是确保应用数据准确性和可靠性的关键步骤。本文将探讨BeanValidation和SpringValidator这两种数......
  • Java的class与String互相转换,自定义密码策略
    目的客户要求密码校验方式,用自己的认证方式。提供一种方案,在不出补丁的情况下,解决这个问题。原理1、本地写一个类,用客户想要的方案,实现密码校验的接口,编译成class类。2、然后把这个class类,先转换成二进制,再转换成16进制的字符串。3、将字符串写到客户的数据库里。4、重启服务,在......