Java如何使用SSLContext请求https链接

 更新时间:2024年01月23日 10:14:13   作者:大魔王King  
这篇文章主要介绍了Java如何使用SSLContext请求https链接问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

使用SSLContext请求https链接

先了解几个关键类

  • SSLContext 安全套接字协议的实现核心类
  • SSLSocket 扩展自Socket用户客户端
  • SSLSocketFactory 工厂类
  • SSLServerSocket 扩展自ServerSocket用于服务端
  • SSLServerSocketFactory SSLServerSocket的工厂
  • KeyStore 密钥证书
  • KeyManager 密钥管理器
  • TrustManager 信任管理器
  • X590TrustedManager TrustManager的子接口,管理X509证书,验证远程链接

核心代码

如下:

    //首先自己实现信任管理器类,创建一个X509TrustManager对象
    X509TrustManager x509m = new X509TrustManager() {  
    	//返回受信任的X509证书数组
        @Override  
        public X509Certificate[] getAcceptedIssuers() {  
            return null;  
        }  
        //检查服务器的证书,若不信任该证书抛出异常,可以不检查默认都信任
        @Override  
        public void checkServerTrusted(X509Certificate[] chain,  
                String authType) throws CertificateException {  
        }  
   	    //检查客户端证书,若不信任该证书抛出异常,咱们自己就是客户端不用检查
        @Override  
        public void checkClientTrusted(X509Certificate[] chain,  
                String authType) throws CertificateException {  
        }  
    };  
    // 获取一个SSLContext实例,核心对象  
    SSLContext s = SSLContext.getInstance("SSL");  
    // 初始化SSLContext.init(可以导入的证书,信任管理器,SecureRandom) 三个参数都可为null,没有证书填写null就行
    s.init(null, new TrustManager[] { x509m },   new java.security.SecureRandom());
    //获取SSLSocket 用于通信
    SSLSocketFactory factory = s.getSocketFactory();
    SSLSocket s = (SSLSocket) factory.createSocket("localhost", port);
    //获取输入输出流
    OutputStream output = s.getOutputStream(); 
    InputStream input = s.getInputStream(); 
    //发送数据
    DataOutputStream out = new DataOutputStream(output);
    out.writeBytes("测试发送数据");
    out.flush();
    out.close();
    //接收数据
    Reader reader = new InputStreamReader(input, "UTF-8");
    BufferedReader bufferedReader = new BufferedReader(reader);
    String str = null;
    StringBuffer sb = new StringBuffer();
    while ((str = bufferedReader.readLine()) != null) {
        sb.append(str);
    }
    reader.close();
    System.out.println(sb.toString()); //打印返回的数据
    

这就是Java最原始的使用SSLContext创建SSLSocket发送https请求。

如果使用框架如okhttp httpclient 底层已经实现https请求,CA机构颁发的证书或者权威机构颁发的证书都是直接信任的 直接使用即可不需要再重写任何代码,网上的好多文章说的都有点问题,我已经亲测可用,对于自己生成的证书的https服务才需要另外配置SSLContext这套代码。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java JVM的基本概念、结构、生命周期详解

    Java JVM的基本概念、结构、生命周期详解

    这篇文章主要介绍了Java JVM的基本概念、结构、生命周期使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-05-05
  • Spring Cloud Stream分区分组原理图解

    Spring Cloud Stream分区分组原理图解

    这篇文章主要介绍了Spring Cloud Stream的分区和分组,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • Java实现滑块拼图验证码

    Java实现滑块拼图验证码

    这篇文章主要为大家详细介绍了Java实现滑块拼图验证码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-07-07
  • JavaSpring boot配置JDK和MAVEN开发环境详解

    JavaSpring boot配置JDK和MAVEN开发环境详解

    本文介绍了在Windows系统上配置JDK、Maven、IntelliJ IDEA的详细步骤,首先安装JDK并配置环境变量,然后下载并解压Maven,配置环境变量和Maven仓库,最后安装并配置IntelliJ IDEA,设置项目SDK和Maven配置
    2026-04-04
  • Java实现Floyd算法的示例代码

    Java实现Floyd算法的示例代码

    Floyd算法又称为插点法,是一种利用动态规划的思想寻找给定的加权图中多源点之间最短路径的算法。本文将用Java语言实现Floyd算法,需要的可以参考一下
    2022-07-07
  • Mybatis以main方法形式调用dao层执行代码实例

    Mybatis以main方法形式调用dao层执行代码实例

    这篇文章主要介绍了Mybatis以main方法形式调用dao层执行代码实例,MyBatis 是一款优秀的持久层框架,MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作,需要的朋友可以参考下
    2023-08-08
  • MyBatis typeAliases元素标签(含注解方式)及其属性、设置方式

    MyBatis typeAliases元素标签(含注解方式)及其属性、设置方式

    这篇文章主要介绍了MyBatis typeAliases元素标签(含注解方式)及其属性、设置方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • 图解Java经典算法归并排序的原理与实现

    图解Java经典算法归并排序的原理与实现

    归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。本文将通过动图详解归并排序的原理及实现,需要的可以参考一下
    2022-09-09
  • SpringBoot整合Kafka实现高可用消息队列集群详解

    SpringBoot整合Kafka实现高可用消息队列集群详解

    Apache Kafka是一个分布式流处理平台,这篇文章主要介绍了SpringBoot如何整合Kafka实现高可用消息队列集群,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下
    2026-01-01
  • elasticsearch构造Client实现java客户端调用接口示例分析

    elasticsearch构造Client实现java客户端调用接口示例分析

    这篇文章主要为大家介绍了elasticsearch构造Client实现java客户端调用接口示例分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-04-04

最新评论