java 携带SSL证书 请求https 接口对接

文章目录

            • 1. 核心依赖
            • 2. 辅助依赖
            • 3.工具类

1. 核心依赖
        <!--JSON依赖--><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>2.0.7</version></dependency><!--httpClient Start--><!--httpClient 文件上传 Start--><!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload --><dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.4</version></dependency><!-- https://mvnrepository.com/artifact/commons-io/commons-io --><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.11.0</version></dependency><!--httpClient 文件上传 End--><!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpcore --><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpcore</artifactId><version>4.4.14</version></dependency><!-- https://mvnrepository.com/artifact/commons-httpclient/commons-httpclient --><dependency><groupId>commons-httpclient</groupId><artifactId>commons-httpclient</artifactId><version>3.1</version></dependency><!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpmime --><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpmime</artifactId><version>4.5.13</version></dependency><!--httpClient End-->
2. 辅助依赖
  <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--字符串处理--><dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>${commons-lang3.version}</version></dependency><!--JSON依赖--><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>2.0.7</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency>
3.工具类
package com.gblfy.https;import com.alibaba.fastjson.JSON;import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManager;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;/*** Https携带SSL证书工具类** @author gblfy* @date 2022-10-10*/
public class HttpsSSLUtils {public static void main(String[] args) throws Exception {Map map = new HashMap<>();map.put("value", "value");map.put("value2", "value2");String jsonMsg = JSON.toJSONString(map);System.out.println(JSON.toJSONString(map));//测试线写死,后期改用配置文件String keystoreFile = "/app/_.cbit.com.cn.jks";//jbossString keystorePass = "liantiaoceshi";String urlStr = "https://127.0.0.1/login_queryLkBySfmc.htm";String charsetName = "UTF-8";String result = sendHttpSSLJsonMsg(keystoreFile, keystorePass, urlStr, jsonMsg, charsetName);System.out.println("result:" + result);}/*** 发送https json 携带SSL证书请求** @param keystoreFile 证书文件* @param keystorePass 证书密码* @param urlStr       服务端地址* @param jsonMsg      json信息内容* @param charsetName  编码* @return ${ result 响应参数}*/public static String sendHttpSSLJsonMsg(String keystoreFile, String keystorePass, String urlStr, String jsonMsg, String charsetName) throws Exception {try {if ("".equals(charsetName)) {charsetName = "UTF-8";}//设置可通过ip地址访问https请求HttpsURLConnection.setDefaultHostnameVerifier(new NullHostNameVerifier());// 创建SSLContext对象,并使用我们指定的信任管理器初始化TrustManager[] tm = {new MyX509TrustManager(keystoreFile, keystorePass)};SSLContext sslContext = SSLContext.getInstance("TLS");sslContext.init(null, tm, new java.security.SecureRandom());// 从上述SSLContext对象中得到SSLSocketFactory对象SSLSocketFactory ssf = sslContext.getSocketFactory();URL url = new URL(urlStr);HttpsURLConnection con = (HttpsURLConnection) url.openConnection();con.setSSLSocketFactory(ssf);con.setRequestMethod("POST"); // 设置以POST方式提交数据con.setDoInput(true); // 打开输入流,以便从服务器获取数据con.setDoOutput(true);// 打开输出流,以便向服务器提交数据PrintWriter out = new PrintWriter(new OutputStreamWriter(con.getOutputStream(), charsetName));//设置发送参数out.print(jsonMsg);out.flush();out.close();//读取请求返回值InputStreamReader in = new InputStreamReader(con.getInputStream(), charsetName);BufferedReader bfreader = new BufferedReader(in);String result = "";String line = "";while ((line = bfreader.readLine()) != null) {result += line;}return result;} catch (Exception e) {e.printStackTrace();throw e;}}
}
package com.gblfy.https;import java.io.FileInputStream;
import java.security.KeyStore;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;import javax.net.ssl.TrustManager;
import javax.net.ssl.TrustManagerFactory;
import javax.net.ssl.X509TrustManager;/*** 信任管理器** @author gblfy* @date 2022-10-10*/
public class MyX509TrustManager implements X509TrustManager {X509TrustManager sunJSSEX509TrustManager;MyX509TrustManager(String keystoreFile, String pass) throws Exception {KeyStore ks = KeyStore.getInstance("JKS");ks.load(new FileInputStream(keystoreFile), pass.toCharArray());TrustManagerFactory tmf = TrustManagerFactory.getInstance("SunX509", "SunJSSE");tmf.init(ks);TrustManager tms[] = tmf.getTrustManagers();for (int i = 0; i < tms.length; i++) {if (tms[i] instanceof X509TrustManager) {sunJSSEX509TrustManager = (X509TrustManager) tms[i];return;}}throw new Exception("Couldn't initialize");}@Overridepublic void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {try {sunJSSEX509TrustManager.checkClientTrusted(chain, authType);} catch (CertificateException excep) {excep.printStackTrace();}}@Overridepublic void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {try {sunJSSEX509TrustManager.checkServerTrusted(chain, authType);} catch (CertificateException excep) {excep.printStackTrace();}}@Overridepublic X509Certificate[] getAcceptedIssuers() {return sunJSSEX509TrustManager.getAcceptedIssuers();}}
package com.gblfy.https;import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.SSLSession;/*** 预前检验** @author gblfy* @date 2022-10-10*/
public class NullHostNameVerifier implements HostnameVerifier {@Overridepublic boolean verify(String hostname, SSLSession session) {return true;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/515095.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

估值百亿独角兽爱学习教育集团:通过云原生实践与时间赛跑

简介&#xff1a; iiMedia Research&#xff08;艾媒咨询&#xff09;数据显示&#xff0c;在线教育市场规模保持逐年增长的态势&#xff0c;2019年在线教育市场规模已突破4000亿元。在疫情的助推下&#xff0c;在线教育加速渗透&#xff0c;市场空间有望进一步打开&#xff0c…

亚马逊云科技张文翊:引领企业可持续发展的绿色云端之旅

亚马逊全球副总裁、亚马逊云科技大中华区执行董事张文翊 “未来十年将是可持续发展决定性的十年&#xff0c;2030年的经济需求将与今天大不相同。”这是前不久亚马逊创始人杰夫贝索斯在他作为CEO最后一封致股东信中的一句话&#xff0c;我深以为然。 《巴黎协定》制定了一个全…

腾讯云~安装ActiveMQ

文章目录1. docker 构建2. 腾讯云防火墙策略3. 效果图1. docker 构建 docker pull webcenter/activemq mkdir /app/activemq/log -p docker run --nameactivemq \-itd \-p 8161:8161 \-p 61616:61616 \-e ACTIVEMQ_ADMIN_LOGINadmin \-e ACTIVEMQ_ADMIN_PASSWORD123456 \--res…

如何实现一个跨库连表SQL生成器?

简介&#xff1a; 用户只需在前端简单配置下指标&#xff0c;系统即可自动生成大宽表&#xff0c;让用户查询到他所需要的实时数据&#xff0c;数据源支持跨库并支持多种目标介质。这样的数据全局实时可视化如何实现&#xff1f;本文从需求分析开始&#xff0c;分享自动生成SQL…

mybatis的example.createCriteria()方法学习记录

文章目录一、mapper的crud方法:1. selectByPrimaryKey(id)2. selectByExample(example)3. selectCountByExample(example)4. updateByPrimaryKey(User user)5. updateByPrimaryKeySelective(User user) (建议使用)6. updateByExample(User user,Example example)7. updateByExa…

解密Arm Neoverse V1 和 Neoverse N2 平台 为下一代基础设施带来计算变革

在去年 9 月更新的产品路线图基础上&#xff0c;Arm 近日公开了Arm Neoverse™ V1 和 N2 平台的产品细节。为满足基础设施应用的各种需求&#xff0c;这两个平台的设计旨在解决当前正在运行的各种工作负载和应用问题&#xff0c;并分别带来 50%和 40%的性能提升。此外&#xff…

plsql 设置字体+工具栏图标大小调整

文章目录1. 字体设置2. 工具图标大小1. 字体设置 字体&#xff08;微软雅黑&#xff09;大小&#xff08;10号&#xff09;就可以 各种字体调整 2. 工具图标大小

云原生时代老牌IDC巨头谋求转型,世纪互联成立新品牌“互联科技(NEOLINK)”

编辑 | 宋慧 出品 | CSDN云计算 头图 | 世纪互联全新子品牌战略发布会现场图 4月28日&#xff0c;世纪互联举行2021新品牌战略发布会&#xff0c;正式发布全新子品牌“互联科技”&#xff08;NEOLINK&#xff09;。此次世纪互联整合集团内新零售及第一线事业群、成立新基建IDC…

中国开源持续燃烧,给开发者的两点思考

从“软件吞噬世界”再到“开源吞噬世界”&#xff0c;国际开源已步入 30 而立之年的进程中&#xff0c;越来越多开发者参与到开源中&#xff1a;据《2020 年 GitHub Octoverse 报告》显示&#xff0c;GitHub 上开发者数量达到 5600万&#xff0c;新增 6000 万个存储库以及 19 亿…

No binding operation info while invoking unknown method with params unknown 异常解决

浏览器中访问WebService&#xff0c;返回异常&#xff0c; 是由于访问地址缺少wsdl后缀

如何管理越来越多的 operator?OLM 给你答案

简介&#xff1a; OLM(Operator Lifecycle Manager) 作为 Operator Framework 的一部分&#xff0c;可以帮助用户进行 Operator 的自动安装&#xff0c;升级及其生命周期的管理。同时 OLM 自身也是以 Operator 的形式进行安装部署。本文我们将来了解一下 OLM 的基本架构和安装使…

兴趣标签体系告诉我,闲鱼的95后是这样的...

作者&#xff1a;闲鱼技术-兆晗 背景与挑战 — — "水果糖小椿 M39 暂挂" — — "列表科幻&#xff1f;" 不知大家能否读懂上面的对话&#xff0c;但在闲鱼&#xff0c;这样的对话每天都在发生。数据显示&#xff0c;闲鱼约30%的用户年龄不满25岁。了解这…

搭建Redis集群遇到的问题:Waiting for the cluster to join~~~

问题&#xff1a; 搭建Redis集群的过程中&#xff0c;执行到cluster create : … 的时候&#xff0c;发现程序发生阻塞&#xff0c;显示&#xff1a;Waiting for the cluster to join 的字样&#xff0c;然后就无休无尽的等待… 遇到这种情况大部分是因为集群总线的端口没有开…

英特尔助力完善AI人才培养,携手微软共促地球可持续发展

2021年4月22日&#xff0c;英特尔于第52个世界地球日期间举办了主题为“为企业寻良将&#xff0c;为人才筑舞台”的网络研讨会&#xff0c;旨在探讨高科技企业如何聚焦AI技术&#xff0c;赋能人才发展&#xff0c;为企业引荐人才&#xff0c;为人才提供机会&#xff0c;来共建美…

云原生除了K8S、微服务,还有...?

来源 | 无敌码农责编 | 寇雪芹头图 | 下载于视觉中国云原生(Cloud Native)是最近技术圈一个比较火的名词&#xff0c;相信大家或多或少都听说过。不过对于大多数普通研发朋友来说&#xff0c;"云原生"这个词多少可能还是有些陌生&#xff0c;以至于刚开始听到这个词时…

Service Mesh 在超大规模场景下的落地挑战

简介&#xff1a; 在实际落地方面&#xff0c;众多企业都在积极探索 Service Mesh 在大规模场景下的应用。 作者 | 至简&#xff0c;阿里云高级技术专家 随着微服务软件架构在互联网企业的广泛实践&#xff0c;新一代微服务软件架构技术悄然兴起&#xff0c; Service Mesh 便是…

一针一线皆关“云” 报喜鸟以匠心融合科技

简介&#xff1a; 为了持续增强品牌竞争力&#xff0c;更好地实现数据有效管理&#xff0c;在数据爆发式增长时能够弹性、及时扩容&#xff0c;作为行业领军者的报喜鸟决定融入云计算的大潮中&#xff0c;而将原有业务高效、平滑地迁移至云端就理所当然地成为整个环节中非常关键…

“一云多芯、三V一体” 麒麟信安云融合虚拟化方案助力信创轻松上云

“上云是常态&#xff0c;不上云是例外”。国际上IT架构已从“计算机网络”向“云端”演进&#xff0c;云计算技术的蓬勃发展为整个IT行业带来了巨大变革。据专家观点&#xff0c;到2023年&#xff0c;中国政府和大型企业上云率将超过60%&#xff0c;全栈自主可控云将成为政府和…

海量结构化数据解决方案-表格存储场景解读

简介&#xff1a; 数据是驱动业务创新的最核心的资产。不同类型的数据如非结构化数据&#xff08;视频、图片等&#xff09;、结构化数据&#xff08;订单、轨迹&#xff09;&#xff0c;面向不同业务的使用要求需要选择适合的存储引擎&#xff0c;能够真正发挥数据的价值。针对…

阿里巴巴大数据实践:OneData模型实施介绍

如何从具体的需求或项目转换为可实施的解决方案&#xff0c;如何进行需求分析、架构设计、详细模型设计等&#xff0c;则是模型实施过程中讨论的内容。本节先简单介绍业界常用的模型实施过程&#xff0c;然后重点讲解阿里巴巴OneData模型设计理论及实施过程。 1&#xff0e;业…