当前位置: 首页 > news >正文

Java调用HTTPS接口,绕过SSL认证

1:说明

网络编程中,HTTPS(Hypertext Transfer Protocol Secure)是一种通过加密的方式在计算机网络上进行安全通信的协议。网络传输协议,跟http相比更安全,因为他加上了SSL/TLS协议来加密通信内容。

Java调用HTTPS,需要与客户端建立连接,但是建立连接的时候,需要进行SSL认证。有的时候为了方便调用,我们会绕过SSL认证。但是在特定环境中,绕过SSL认证是十分不安全的,不推荐这么做。SSL认证是确保通信安全的重要手段,绕过认证的话可能带来一系列的安全问题。

所以一般绕过SSL认证不在生产环境中使用。

2:绕过SSL认证

因为我本次调用HTTPS接口的目的是调用数据,存储在表中,不需要跨环境,只在本地执行,所以进行SSL认证稍有繁琐,所以我决定绕过SSL认证。

通过自定义SSL上下文的方式,绕过SSL认证的方式。通过自定义信任管理器,你可以在绕过证书验证的同时,实现自己的证书验证逻辑。这对于使用自签名证书或特定信任机制的情况很有用。

最后返回一个绕过SSL认证的 HttpClient对象。

import java.security.KeyManagementException;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.SSLContext;
import org.apache.http.conn.ssl.NoopHostnameVerifier;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.conn.ssl.TrustStrategy;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.ssl.SSLContextBuilder;// 创建自定义的 SSL 上下文,用于绕过证书验证public static CloseableHttpClient createSSLClientDefault() {try {SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, new TrustStrategy() {// 信任所有证书public boolean isTrusted(X509Certificate[] arg0, String arg1)throws CertificateException {return true;}}).build();// 创建主机名验证器,用于绕过主机名验证HostnameVerifier hostnameVerifier = NoopHostnameVerifier.INSTANCE;// 创建 SSL 连接套接字工厂,将自定义的 SSL 上下文和主机名验证器应用于 HTTPS 连接SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext, hostnameVerifier);// 创建自定义的 CloseableHttpClient 实例,将 SSL 连接套接字工厂应用于 HTTP 客户端return HttpClients.custom().setSSLSocketFactory(sslsf).build();} catch (KeyManagementException e) {e.printStackTrace();} catch (NoSuchAlgorithmException e) {e.printStackTrace();} catch (KeyStoreException e) {e.printStackTrace();}return HttpClients.createDefault();}

该方法的实现逻辑如下:

  1. 创建一个自定义的 SSL 上下文(SSLContext),用于绕过 SSL 证书验证。
  2. 在 SSL 上下文中加载信任材料(TrustMaterial),并使用自定义的 TrustStrategy 来信任所有证书。
  3. 创建一个主机名验证器(HostnameVerifier),用于绕过主机名验证。使用NoopHostnameVerifier(主机名验证器)意味着在SSL连接中不会对服务器的主机名进行验证。主机名验证器用于验证SSL证书中的主机名与服务器实际的主机名是否匹配。NoopHostnameVerifier是一个空实现的主机名验证器,它绕过了主机名验证,即使主机名不匹配,也会继续进行SSL连接。
  4. 创建一个 SSL 连接套接字工厂(SSLConnectionSocketFactory),将自定义的 SSL 上下文和主机名验证器应用于 HTTPS 连接。创建自定义的SSL连接。有四种实现方式(指定SSL/TLS协议版本、指定加密算法和密码套件、自定义信任管理器、自定义主机名验证器),其中通过SSLConnectionSocketFactory指定自定义的主机名验证器(HostnameVerifier),以控制主机名验证的行为。
  5. 创建一个自定义的 CloseableHttpClient 实例,使用上述的 SSL 连接套接字工厂。
  6. 如果在创建 SSL 上下文时发生异常,将打印异常堆栈跟踪信息。
  7. 如果在创建 SSL 上下文时发生异常或抛出的异常类型无法识别,将返回默认的 CloseableHttpClient 实例。

3:调用HTTPS接口

private static final String SERVICE_URL = "https://ip:port/api/v1/cipher/json/create";private static final String AUTHORIZATION_HEADER = "savhsdkfas==";public ReturnT<String> execute(String param) throws Exception {//发送httpPost请求//创建HttpClientHttpClient httpclient = Myutils.createSSLClientDefault();//发送接口地址HttpPost httppost = new HttpPost(SERVICE_URL);//设置请求体格式Content-Typehttppost.setHeader("Content-Type", "application/json");httppost.setHeader("Authorization", AUTHORIZATION_HEADER);//定义String请求Json参数体httppost.setEntity(new StringEntity(new String("{" +"\"keyCode\": \"" + keycode + "\"," +"\"algorithmParam\": \"SM4/ECB/PKCS7Padding\"," +"\"data\": {" +"\"SetlNewDTO\": \"" + this.convertDtoToBase64(accountPayDO) + "\"" +"}" +"}"), Charset.forName("UTF-8")));//发送请求并接收responseHttpResponse httpresponse = httpclient.execute(httppost);String result = EntityUtils.toString(httpresponse.getEntity(), "UTF-8");ObjectMapper objectMapper = new ObjectMapper();JsonNode responseJson = objectMapper.readTree(result);// 从JSON对象中获取键值对,根据出参格式获取出参数据JsonNode jsonNode = responseJson.get("data");JsonNode encData1 = jsonNode.get("encData");String encDate2 = encData1.toString();}

这段代码是一个使用Apache HttpClient库发送HTTP POST请求的示例。它发送一个带有JSON参数的POST请求,并从响应中提取特定的数据。

代码中的execute方法声明了抛出Exception异常,它接收一个String类型的参数param,但实际上没有使用到该参数。

首先,代码定义了服务的URL和授权头信息。

然后,通过调用Myutils.createSSLClientDefault()方法创建一个自定义的SSL HttpClient对象。就是上边绕过SSL对应的方法

接下来,创建一个HttpPost对象,并设置请求的URL和请求头信息。

然后,构造请求体的JSON参数,并设置到HttpPost对象中。

构造请求体的使用需要使用json格式参数,也可以直接使用 GJson json = new GJson(jsonStr);将非JSON数据转化为JSON格式,JSON格式的S他脸红,需要给每个参数加上引号,并且使用\转译。所以setEntity的时候需要带有JSON格式的字符串。

String jsonStr = "{\"name\":\"John\",\"age\":30,\"city\":\"New York\"}";GJson json = new GJson(jsonStr);

接着,通过调用HttpClient的execute方法发送HttpPost请求,并接收HttpResponse响应。

将响应的实体内容转换为字符串,并存储在result变量中。

使用Jackson库的ObjectMapper类解析result字符串为JsonNode对象。

从JsonNode对象中获取特定的数据,例如从"data"键中获取"encData"键的值。

最后,将获取到的"encData"值存储在encDate2变量中。

我的出参是这样的,所以按照自己的格式替换数据,便可以得到你想要的出参

{"code": "0","message": "success","data": {"encData": {"date": "wxpOGSdQD68Jp7fC4KV"}}
}

需要注意的是,代码中的URL、授权头信息、JSON参数等是示例数据,你需要根据实际情况进行修改和替换。

此代码片段只是一个简单的示例,实际使用时应该考虑异常处理、资源释放等更完善的逻辑。

 最高级的自律,从一点点到亿点点。

相关文章:

Java调用HTTPS接口,绕过SSL认证

1&#xff1a;说明 网络编程中&#xff0c;HTTPS&#xff08;Hypertext Transfer Protocol Secure&#xff09;是一种通过加密的方式在计算机网络上进行安全通信的协议。网络传输协议&#xff0c;跟http相比更安全&#xff0c;因为他加上了SSL/TLS协议来加密通信内容。 Java调…...

前端小技巧: TS实现数组转树,树转数组

将数组转为树 interface IArrayItem {id: number,name: string,parentId: number }interface ITreeNode {id: numbername: stringchildren?: ITreeNode[] }const arr [{id: 1, name: 部门A, parentId: 0},{id: 2, name: 部门B, parentId: 1},{id: 3, name: 部门C, parentId:…...

谷歌动态搜索广告被滥用引发恶意软件泛滥

研究人员发现了一种新方法&#xff0c;可以利用易受攻击的网站向搜索引擎用户发送恶意的、有针对性的广告&#xff0c;这种方法能够传播大量恶意软件&#xff0c;使受害者完全不知所措。 关键是“动态搜索广告”&#xff0c;谷歌利用网站登陆页面的内容将目标广告与搜索配对的…...

C语言实现 1.在一个二维数组中形成 n 阶矩阵,2.去掉靠边元素,生成新的 n-2 阶矩阵;3.求矩阵主对角线下元素之和:4.以方阵形式输出数组。

矩阵形式&#xff1a; 1 1 1 1 1 2 1 1 1 1 3 2 1 1 1 4 3 2 1 1 5 4 3 2 1 完整代码&#xff1a; /*编写以下函数 1&#xff0e;在一个二维数组中形成如以下形式的 n 阶矩阵&#xff1a; 1 1 1 1 1 2 1 1 1 1 3 2 1 1 1 4 3 2 1 1 5 4 3 2 1 2&#xff0e;去掉…...

我在Vscode学OpenCV 处理图像

既然我们是面向Python的OpenCV&#xff08;OpenCV for Python&#xff09;那我们就必须要熟悉Numpy这个库&#xff0c;尤其是其中的数组的库&#xff0c;Python是没有数组的&#xff0c;唯有借助他库才有所实现想要的目的。 # 老三样库--事先导入 import numpy as np import c…...

【python】路径管理+路径拼接问题

路径管理 问题相对路径问题绝对路径问题 解决os库pathlib库最终解决 问题 环境&#xff1a;python3.7.16 win10 相对路径问题 因为python的执行特殊性&#xff0c;使用相对路径时&#xff0c;在不同路径下用python指令会有不同的索引效果&#xff08;python的项目根目录根据执…...

C现代方法(第16章)笔记——结构、联合和枚举

文章目录 第16章 结构、联合和枚举16.1 结构变量16.1.1 结构变量的声明16.1.2 结构变量的初始化16.1.3 指示器(C99)16.1.4 对结构的操作 16.2 结构类型16.2.1 结构标记的声明16.2.2 结构类型的定义16.2.3 结构作为参数和返回值16.2.4 复合字面量(C99)16.2.5 匿名结构(C1X) 16.3…...

Python项目——识别指定物品

目录 1、百度EasyDL平台数据配置 1.1、训练图像上传 1.2、训练图像进行标注 1.3、训练模型 1.4、检验识别 1.5、申请发布 1.6、控制台权限配置 2、Python调用物体识别API 本项目是基于百度EasyDL平台制作的识别转盘内瓶子&#xff0c;且识别瓶子位置的一个项目。通过在…...

Spring-创建非懒加载的单例Bean源码

补充&#xff1a;关于扫描的逻辑 /*** Scan the class path for candidate components.* param basePackage the package to check for annotated classes* return a corresponding Set of autodetected bean definitions*/ public Set<BeanDefinition> findCandidateCo…...

Techlink TL24G06 网络变压器 10G 基座单端口变压器

功能特征&#xff1a; 1、符合IEEE 802.3标准。 2、符合RoHS。 3、工作温度范围&#xff1a;0C至70C。 4、储存温度范围&#xff1a;-20C至125C。...

Python操作PDF:PDF文件合并与PDF页面重排

处理大量的 PDF 文档是非常麻烦的事情&#xff0c;频繁地打开关闭文件会严重影响工作效率。对于一大堆内容相关的 PDF 文件&#xff0c;我们在处理时可以将这些 PDF 文件合并起来&#xff0c;作为单一文件处理&#xff0c;从而提高处理效率。同时&#xff0c;我们也可以选取不同…...

删除链表的倒数第n个节点(C++解法)

题目 给你一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表的头结点。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5], n 2 输出&#xff1a;[1,2,3,5]示例 2&#xff1a; 输入&#xff1a;head [1], n 1 输出&#xff1a;[]示例 3&#…...

Apache服务的搭建与配置(超详细版)

前言 Apache是一种常见的Web服务器软件&#xff0c;广泛用于Linux和其他UNIX操作系统上。它是自由软件&#xff0c;可以通过开放源代码的方式进行自由分发和修改。Apache提供了处理静态和动态内容的能力&#xff0c;而且还支持多种编程语言和脚本&#xff0c;如PHP、Python和P…...

设计模式大赏(一):桥接模式,组合模式

设计模式大赏&#xff08;一&#xff09;&#xff1a;桥接模式&#xff0c;组合模式 导言 本篇文章是设计模式大赏中的第一篇文章&#xff0c;这个系列的文章中我们主要将介绍一些常见的设计模式&#xff0c;主要是我在看Android源码中发现用到的一些设计模式。本篇文章将主要…...

数据通信——应用层(DHCP的原理与配置)

引言 假如我们的网络中有N台设备&#xff0c;它们都要设置IP地址&#xff0c;如果人工去一个个配置不仅不方便管理还很麻烦。因此我们用DHCP来自动分配地址。 一&#xff0c;系统的启动流程 不仅是计算机、很多网络设备的启动流程如下&#xff1a; 设备上电后&#xff0c;硬件…...

力扣151.反转字符串中的单词

原题链接&#xff1a;力扣151.反转字符串中的单词 全代码&#xff1a; 需要复刷 class Solution { public:void reverse(string& s, int start, int end){ //翻转&#xff0c;区间写法&#xff1a;左闭右闭 []for (int i start, j end; i < j; i, j--) {swap(s[i],…...

vim三种模式,文本操作(操作字符/光标,列出行号可视化块模式/多文件查看)

目录 vim--文本编辑器 功能 基本概念 命令/默认模式 插入模式 底行模式 文本操作 引入 移动光标位置 删除字符 -- x/dd 复制/粘贴字符 -- yw/yyp 替换文本 -- r / %s 底行模式 全局替换 -- /g 撤销操作 -- u / ctrlr 修改字符 -- cw 示例 跳行 -- ctrlg 底行…...

jquery控制easyui中combobox、textbox显示隐藏

//combobox下拉框 $("#下拉框id.combo").hide();//textbox输入框 $("#输入框id.textbox").hide(); 参考网址&#xff1a; https://blog.csdn.net/Coldmood/article/details/128279727...

Android拖放startDragAndDrop拖拽onDrawShadow静态添加xml布局View,Kotlin(4)

Android拖放startDragAndDrop拖拽onDrawShadow静态添加xml布局View&#xff0c;Kotlin&#xff08;4&#xff09; import android.content.ClipData import android.graphics.Canvas import android.graphics.Point import android.os.Bundle import android.util.Log import a…...

Servlet 初始化参数(web.xml和@WebServlet)

1、通过web.xml方式 <?xml version"1.0" encoding"UTF-8"?> <web-app xmlns"http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://xmlns.jcp.org/xm…...

CTSD算法超参数调优实战:从原理到应用,解决机器翻译重复与幻觉问题

1. 项目概述&#xff1a;当机器翻译开始“复读”&#xff0c;我们如何用CTSD算法精准调校&#xff1f;在机器翻译的实际部署和优化中&#xff0c;一个让工程师和研究者都颇为头疼的问题是&#xff1a;模型有时会像卡住的唱片一样&#xff0c;反复输出相同的词或短语。这种现象&…...

昇腾CANN ops-transformer RoPE 旋转位置编码:从复数旋转到 NTK 外推的完整实战

Transformer 的自注意力机制本身对位置不敏感——"猫坐在垫子上"和"垫子坐在猫上"的 attention score 一样&#xff0c;因为点积 QK^T 不区分 token 顺序。位置编码就是给每个 token 打上它在序列中的位置标签。 RoPE&#xff08;Rotary Position Embeddin…...

ATB:让 Transformer 推理快得像开了挂——昇腾算子加速库技术解析

Transformer 模型推理的瓶颈在哪里&#xff1f;KV Cache 管理、算子融合、分布式调度。ATB&#xff08;ascend-transformer-boost&#xff09;把这些问题一次性解决&#xff0c;让推理性能提升 2-3 倍。 上个月帮一个团队做推理优化&#xff0c;他们的 LLaMA-2 70B 模型在 NPU …...

Zotero Duplicates Merger:终极文献去重解决方案,告别重复文献困扰

Zotero Duplicates Merger&#xff1a;终极文献去重解决方案&#xff0c;告别重复文献困扰 【免费下载链接】ZoteroDuplicatesMerger A zotero plugin to automatically merge duplicate items 项目地址: https://gitcode.com/gh_mirrors/zo/ZoteroDuplicatesMerger 你是…...

Android HTTPS抓包原理与HTTPCanary证书配置全解

1. 这不是“绕过”&#xff0c;而是理解Android HTTPS抓包的底层逻辑HTTPCanary 是 Android 平台上少有的、真正能稳定抓取 HTTPS 流量的本地代理工具。但几乎所有新手在首次使用时都会卡在同一个地方&#xff1a;明明安装了 HTTPCanary 自带的证书&#xff0c;App 依然拒绝建立…...

VSCode R语言扩展:终极完整指南 - 从零构建专业数据分析环境

VSCode R语言扩展&#xff1a;终极完整指南 - 从零构建专业数据分析环境 【免费下载链接】vscode-R R Extension for Visual Studio Code 项目地址: https://gitcode.com/gh_mirrors/vs/vscode-R 想要在VSCode中高效进行R语言开发吗&#xff1f;vscode-R扩展为您提供了完…...

蓝奏云API终极指南:快速获取文件直链的完整解决方案

蓝奏云API终极指南&#xff1a;快速获取文件直链的完整解决方案 【免费下载链接】LanzouAPI 蓝奏云直链&#xff0c;蓝奏api&#xff0c;蓝奏解析&#xff0c;蓝奏云解析API&#xff0c;蓝奏云带密码解析 项目地址: https://gitcode.com/gh_mirrors/la/LanzouAPI 蓝奏云…...

低查重AI教材生成秘籍,借助AI工具轻松完成教材编写!

2026 年 AI 教材写作工具助力教材编写 在编写教材的过程中&#xff0c;如何满足多样化的需求呢&#xff1f;针对不同年龄段的学生&#xff0c;他们的认知水平差别很大&#xff0c;教材内容如果过于深奥或者过于简单&#xff0c;都会影响学习效果。而在课堂教学、自主学习等多种…...

CML估计器:基于条件矩约束与局部稳健性的因果推断新方法

1. 项目概述&#xff1a;从条件矩约束到局部稳健估计在实证研究的工具箱里&#xff0c;我们常常遇到一个核心难题&#xff1a;如何从一个充满内生性、遗漏变量和复杂交互的数据集中&#xff0c;干净地识别出我们关心的因果效应&#xff1f;传统的工具变量&#xff08;IV&#x…...

为内部工具快速添加 AI 能力,Taotoken 分钟级接入实践

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 为内部工具快速添加 AI 能力&#xff0c;Taotoken 分钟级接入实践 当你需要为一个现有的内部数据分析或报告生成工具添加智能摘要或…...