Spring boot 请求Https 接口的SSL完美解决

代码界的吴彦祖 2021-09-10 09:45:19 ⋅ 1280 阅读
package com.common.utils;

import javax.annotation.Nullable;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import java.net.HttpURLConnection;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.X509Certificate;

public class HttpsUtils {

    /**
     * 设置单个连接的SSL 实例类型
     * @param connection 连接
     * @param instance 实例类型 TLSv1, TLSv2, SSL
     */
    public static void setSSLContext(HttpURLConnection connection, String instance) {
        if (connection instanceof HttpsURLConnection) {
            setSslContext((HttpsURLConnection) connection, instance);
        }
    }

    /**
     * 设置单个连接的SSL 实例类型
     * @param connection https 连接
     * @param instance 实例类型 TLSv1, TLSv2, SSL
     */
    public static void setSslContext(HttpsURLConnection connection, String instance) {
        try {
            connection.setSSLSocketFactory(buildSslFactory(instance));
        } catch (NoSuchAlgorithmException | KeyManagementException e) {
            e.printStackTrace();
        }
    }

    private static SSLSocketFactory buildSslFactory(String instance) throws NoSuchAlgorithmException, KeyManagementException {
        TrustManager[] trustAllCerts = new TrustManager[]{new X509TrustManager() {
            public X509Certificate[] getAcceptedIssuers() {
                return new X509Certificate[0];
            }

            public void checkClientTrusted(X509Certificate[] chain, String authType) {
            }

            public void checkServerTrusted(X509Certificate[] chain, String authType) {
            }
        }};
        javax.net.ssl.SSLContext sc = javax.net.ssl.SSLContext.getInstance(instance);
        sc.init(null, trustAllCerts, null);
        return sc.getSocketFactory();
    }

    /**
     * 设置全局默认SSL 实例类型
     * @param instance 实例类型
     * @throws NoSuchAlgorithmException
     * @throws KeyManagementException
     */
    public static void setDefaultTrustAllHttpsCertificates(@Nullable String instance) throws NoSuchAlgorithmException, KeyManagementException {
        instance = instance == null ? "SSL" : instance;
        HttpsURLConnection.setDefaultHostnameVerifier((str, session) -> true);
        TrustManager[] trustAllCerts = new TrustManager[]{new X509TrustManager() {
            public X509Certificate[] getAcceptedIssuers() {
                return new X509Certificate[0];
            }

            public void checkClientTrusted(X509Certificate[] chain, String authType) {
            }

            public void checkServerTrusted(X509Certificate[] chain, String authType) {
            }
        }};
        javax.net.ssl.SSLContext sc = javax.net.ssl.SSLContext.getInstance(instance);
        sc.init(null, trustAllCerts, null);
        javax.net.ssl.HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
    }
}

全部评论: 0

    我有话说:

    微服务架构实战篇(六):Spring boot2.x 集成阿里大鱼短信接口详解与Demo

    Spring boot2.x 集成阿里大鱼短信接口,发送短信验证码及短信接口详解。

    码云推荐:一个优秀分布式spring boot/Spring Cloud API限流框架,特别适合微服务架构

    一个优秀分布式spring boot/Spring Cloud API限流框架,特别适合微服务架构.

    架构实战篇(三)-Spring Boot架构搭建RESTful API案例

    之前分享了Spring Boot 整合Swagger 让API可视化和前后端分离架构 受到了大家一致好评 ,本节就接着上节代码做了详细查询代码补充和完善并搭建RESTful API架构案例。

    使用Spring Boot Actuator监控应用

    Actuator是Spring Boot提供对应用系统自省和监控集成功能,可以对应用系统进行配置查看

    架构实战篇(六):Spring Boot RestTemplate使用

    RestTemplate是Spring提供用于访问Rest服务客户端,RestTemplate提供了多种便捷访问远程Http服务方法,能够大大提高客户端编写效率。

    架构实战篇(十七):Spring Boot Assembly 整合 thymeleaf

    如何让服务器上 sprig boot 项目升级变方便快捷

    Spring Boot 2.4.0-RC1, 2.1.18, 2.2.11 和 2.3.5 发布

    ;Spring Boot 2.4 首个候选版本,更新亮点如...

    架构实战篇(十五):Spring Boot 解耦之事件驱动

    通过使用spring 事件来解决业务代码耦合

    Spring Boot 开发利器

    工欲善其事,必先利其器每次创建新项目都要找各种依赖包是不是很烦?今天给大家介绍下 Spring 官方提供 Online 项目脚手架

    微服务架构学习笔记:gRPC Spring Boot Starter 2.2.0 发布,及使用步骤

    gRPC Spring Boot Starter 项目是一个 gRPC Spring Boot 模块。内嵌一个 gRPC Server 对外提供服务,并支持 Spring Cloud 服务发现

    架构实战篇(二)-Spring Boot整合Swagger,让你API可视化

    你还在跟前端对接上花费很多时间而没有效果吗?你还在为写接口文档而烦恼吗?今天就教大家一个接口对接神器...

    Spring Boot 快速配置拦截器

    作者:边鹏_尛爺鑫原文链接:https://my.oschina.net/bianxin/blog/2876

    Spring Boot 2.1.0新特性 ,准备好了吗?!

    Spring Boot官方在10月30号正式发布了v2.1.0.RELEASE版本,由于本人最近比较忙,直到今天才着重抽空学习和了解这次升级一共带来了9大新特性,根据官方描述,正在逐渐支持 java

    架构实战篇(十四):Spring Boot 多缓存实战

    多场景下不同缓存策略解决方案

    架构实战篇(七):Spring Boot Data JPA 快速入门

    Spring Data JPA 是Spring Data 一个子项目,它通过提供基于JPARepository极大了减少了操作JPA代码。

    架构实战篇(一)-Spring Boot+MyBatis基础架构搭建

    Spring追求一定是简单点简单点,让java开发变得更加简单、容易。瞧瞧告诉你们直接copy就能用哦~~~

    挖一挖那些让公司网站瘫痪SQL“终结者”

    一条慢查询会造成什么后果?之前我一直觉得不就是返回数据会慢一些么,用户体验变差? 其实远远不止,我经历过几次线上事故,有一次就是由一条 SQL 慢查询导致。 那次是一条 SQL 查询耗时达到 2

    高并发下分布式事务解决方案-MQ消息事务+最终一致性

    分布式事务分布式事务就是指事务参与者、支持事务服务器、资源服务器以及事务管理器分别位于不同分布式系统不同节点之上