java 携带.crt证书 发送https请求

文章目录

          • 一、CURL 方式
            • 1. 普通参数
            • 2. json参数
            • 3. 跳过ssl证书校验
          • 二、安装证书
            • 1. windows
            • 2. linux
          • 三、java 请求
            • 3.1. form和json方法
            • 3.2. 跳过证书请求

一、CURL 方式
1. 普通参数
curl -d "grant_type=password&client_id=SmartRest&client_secret=594a27f3-4432-4d37-9196-2ba49de52758&username=user123&password=welcome123" https://xxxxxxx.xxx.in:8543/auth/realms/restapi/protocol/openid-connect/token --cacert ./ca_bundle.crt
2. json参数

http和https接口通用

curl -i -H 'content-type: application/json' -X POST -d '{"requestData":"123"}' https://192.168.0.106:5210/XXXX/openAccountApplicationInfoVerify 
3. 跳过ssl证书校验
curl -k -H "Content-Type: application/json" -X POST -d  '{"requestData":"123"}' https://192.168.0.106:5210/XXXX/openAccountApplicationInfoVerify 
二、安装证书

我需要在Java代码中发送同样的内容,我只有一个.crt文件,我没有密钥密码或任何东西。

1. windows
keytool -import -trustcacerts -file "_ca_bundle.crt" -alias "alias" -keystore  "C:\Program Files\Java\jdk1.8.0_131\jre\lib\security\cacerts"
2. linux

将_ca_bundle.crt证书文件上传服务器/app/jdk1.8/jre/lib/security/cacerts目录下面
cd /app/jdk1.8/jre/lib/security/cacerts
安装证书

keytool -import -trustcacerts -file "_ca_bundle.crt" -alias "alias" -keystore  "/app/jdk1.8/jre/lib/security/cacerts"
三、java 请求
3.1. form和json方法
package com.gblfy.utils;import com.alibaba.fastjson.JSON;import javax.net.ssl.HttpsURLConnection;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;public class A {public static void main(String[] args) throws Exception {//formParam testString formUrl = "https://xxxx.xxx.xx:8543/auth/realms/restapi/protocol/openid-connect/token";String formParam = "grant_type=password&client_id=SmartRest&client_secret=594a27f3-4432-4d37-9196-2ba49de52758&username=user123&password=welcome123";jsonParamOrFormParamToHttpSSL(formUrl, formParam, "");//formParam testString jsonUrl = "https://xxxx.xxx.xx:8543/auth/realms/restapi/protocol/openid-connect/token";Map<String, Object> map = new HashMap<>();map.put("xml1", "xmlvalue1");map.put("xmlkey2", "xmlvalue2");jsonParamOrFormParamToHttpSSL(jsonUrl, JSON.toJSONString(map), "json");}public static String jsonParamOrFormParamToHttpSSL(String url, String reqParam, String paramType) {try {HttpsURLConnection con = (HttpsURLConnection) new URL(url).openConnection();if ("json".equals(paramType)) {con.setRequestProperty("Content-Type", "application/json;charset=UTF-8");} else {con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");}con.setDoOutput(true);DataOutputStream wr = new DataOutputStream(con.getOutputStream());wr.writeBytes(reqParam);wr.flush();wr.close();BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));String inputLine;StringBuffer response = new StringBuffer();while ((inputLine = in.readLine()) != null) {response.append(inputLine);}in.close();//print resultSystem.out.println("返回报文-----------------------" + response.toString());return response.toString();} catch (IOException e) {e.printStackTrace();}return null;}
}
3.2. 跳过证书请求
package com.gblfy.utils;import org.springframework.stereotype.Component;import javax.net.ssl.*;
import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;/*** 实现HTTPS协议POST请求JSON报文* <p>* 实现流程: 1.在hosts文件中配置域名和ip地址的映射关系 2.在程序中设置代理服务器 3.需要网络处配置发出权限* </p>** @author gblfy* @date 2020-06-25*/
@Component
public class HttpsApiUtil {private static class TrustAnyTrustManager implements X509TrustManager {// 该方法检查客户端的证书,若不信任该证书则抛出异常。由于我们不需要对客户端进行认证,因此我们只需要执行默认的信任管理器的这个方法。// JSSE中,默认的信任管理器类为TrustManager。@Overridepublic void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {}/** 该方法检查服务器的证书,若不信任该证书同样抛出异常。通过自己实现该方法,可以使之信任我们指定的任何证书。 在实现该方法时,也可以简单的不做任何处理,* 即一个空的函数体,由于不会抛出异常,它就会信任任何证书。(non-Javadoc)*/@Overridepublic void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {}// 返回受信任的X509证书数组。@Overridepublic X509Certificate[] getAcceptedIssuers() {return new X509Certificate[] {};}}private static class TrustAnyHostnameVerifier implements HostnameVerifier {@Overridepublic boolean verify(String hostname, SSLSession session) {return true;}}/*** post方式请求服务器(https协议)** @param url     求地址* @param content 参数* @param charset 编码* @return* @throws NoSuchAlgorithmException* @throws KeyManagementException* @throws IOException*/public static byte[] sendJsonToHttpsPost(String url, String content, String charset)throws NoSuchAlgorithmException, KeyManagementException, IOException {/** 类HttpsURLConnection似乎并没有提供方法设置信任管理器。其实,* HttpsURLConnection通过SSLSocket来建立与HTTPS的安全连接* ,SSLSocket对象是由SSLSocketFactory生成的。 HttpsURLConnection提供了方法setSSLSocketFactory* (SSLSocketFactory)设置它使用的SSLSocketFactory对象。* SSLSocketFactory通过SSLContext对象来获得,在初始化SSLContext对象时,可指定信任管理器对象。*/SSLContext sc = SSLContext.getInstance("SSL");sc.init(null, new TrustManager[] { new TrustAnyTrustManager() }, new java.security.SecureRandom());URL console = new URL(url);HttpsURLConnection conn = (HttpsURLConnection) console.openConnection();conn.setSSLSocketFactory(sc.getSocketFactory());conn.setHostnameVerifier(new TrustAnyHostnameVerifier());conn.setDoOutput(true);// 设置请求头conn.setRequestProperty("Content-Type", "application/json;charset=utf-8");conn.connect();// 设置连接超时时间 单位/毫秒 以需求为准
//        conn.setConnectTimeout(30000);DataOutputStream out = new DataOutputStream(conn.getOutputStream());out.write(content.getBytes(charset));// 刷新、关闭out.flush();out.close();InputStream is = conn.getInputStream();if (is != null) {ByteArrayOutputStream outStream = new ByteArrayOutputStream();byte[] buffer = new byte[1024];int len = 0;while ((len = is.read(buffer)) != -1) {outStream.write(buffer, 0, len);}is.close();return outStream.toByteArray();}return null;}//    /**
//     * fastjson 处理/解析报文
//     * com.alibaba.fastjson.JSON
//     *
//     * @param args
//     * @throws NoSuchAlgorithmException
//     * @throws KeyManagementException
//     * @throws IOException              //     * @throws JSONException
//     */
//    public static void main(String[] args) throws NoSuchAlgorithmException, KeyManagementException, IOException, JSONException {
//
//        System.out.println("服务端返回报文:" + new String(bytes));// String url = "https://127.0.0.1:8888/postToJson";// byte[] bytes = sendJsonToHttpsPost(url, "{\"name\":\"ly\"}", "utf-8");// System.out.println("服务端返回报文:"+new String(bytes));
//}//        //1. 模拟对象发送
//        User user = new User();
//        user.setUsername("gblfy");
//        user.setAge(28);
//        user.setPasswd("123456");
//        //2. 配置发送url
//        String url = "https://127.0.0.1:8888/postToJson";
//        //3.发送前将对象转json处理
//        String reqXml = JSON.toJSONString(user);
//        //4.向指定url发送json格式的https协议报文
//        byte[] bytes = sendJsonToHttpsPost(url, reqXml, "utf-8");
//        //5.对返回的报文解析
//        String resXml = new String(bytes);
//        JSONObject jsonObj = (JSONObject) JSON.parse(resXml);
//        //6.从解析的报文中获取指定的值
//        System.out.println("服务端返回报文:" + jsonObj.getString("username"));
//         System.out.println("服务端返回报文:" + jsonObj.getInt("age"));
//        System.out.println("服务端返回报文:" + jsonObj.getString("passwd"));}

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

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

相关文章

c3p0 服务启动获取连接超时_微服务架构中的熔断、降级

微服务架构中熔断和降级是保证服务高可用的一项重要功能点&#xff0c;微服务区别于一体化项目的最大区别也再于熔断和降级&#xff0c;很多微服务项目的开发人员对熔断的理解就是当服务不可用的时候&#xff0c;为了让整体服务可以正常运行&#xff0c;需要让后续的请求直接返…

重塑APM标杆,博睿数据战略升级助力企业数字化转型

&#xff08;博睿数据发布仪式&#xff09; 2021年5月26日&#xff0c;由博睿数据举办的“服务可达 达者为先博睿数据2021年战略升级发布巡展”北京站&#xff0c;在北京金茂威斯汀大饭店圆满举行&#xff01;本次战略升级发布巡展不仅揭开了“数据链DNA”的神秘面纱&#xff…

持续定义SaaS模式云数据仓库+数据银行

简介&#xff1a; 本文将介绍SaaS模式云数据仓库MaxCompute&#xff0c;如何助力数据银行SaaS模式云战略和一体化数据开放场景介绍。 一、云数据仓库 本章节介绍云数据仓库带来的价值及解决方案。 MaxCompute&#xff1a;SaaS模式企业级云数据仓库的应用场景包括广告场景-用…

2020-10-28

Kubernetes的门户-Ingress 目前Kubernetes&#xff08;K8s&#xff09;已经真正地占领了容器编排市场&#xff0c;是默认的云无关计算抽象&#xff0c;越来越多的企业开始将服务构建在K8s集群上。在K8s中&#xff0c;组件通过Service对外暴露服务&#xff0c;常见的包括NodePo…

centos 查找nginx_Linux下查看Nginx安装目录、版本号信息及当前运行的配置文件

Linux环境下&#xff0c;怎么确定Nginx是以那个config文件启动的&#xff1f;输入命令行&#xff1a; ps -ef | grep nginx摁回车&#xff0c;将出现如下图片&#xff1a;master process 后面的就是 nginx的目录。怎么查看服务器上安装的nginx版本号&#xff0c;主要是通过ngi…

530并行日:用超算更省心

科技兴&#xff0c;则民族兴&#xff1b;科技强&#xff0c;则国家强。 从“神舟”飞天、“蛟龙”入海、“天眼”遥看宇宙&#xff0c;到“嫦娥”奔月、“天问”探火、“量子”惊叹世界&#xff0c;这些世人瞩目的科技成就背后&#xff0c;是一代又一代的中国科技工作者前赴后继…

Flink SQL 1.11 on Zeppelin 平台化实践

简介&#xff1a; 鉴于有很多企业都无法配备专门的团队来解决 Flink SQL 平台化的问题&#xff0c;那么到底有没有一个开源的、开箱即用的、功能相对完善的组件呢&#xff1f;答案就是本文的主角——Apache Zeppelin。 作者&#xff1a;LittleMagic 大数据领域 SQL 化开发的风…

控件设置相对位置_惊人的Divi转换控件!

Divi的变换控件释放了许多新的设计可能你可以使用一系列新设计选项来执行惊人的设计&#xff0c;而到目前为止&#xff0c;只有在诸如Photoshop之类的图形设计程序中才可以这样操作。Divi引入了一项全新功能&#xff0c;该功能允许在Divi Builder中进行惊人的徒手设计&#xff…

第三代英特尔至强可扩展处理器,英特尔数据中心的“芯法宝”

作者 | 宋 慧 出品 | CSDN云计算 头图 | 付费下载于东方IC 距离英特尔发布第三代至强可扩展处理器Ice Lake的全系列产品&#xff0c;已经过去一个多月了。全新一代的至强处理器除了核数增加、性能提升与架构升级以外&#xff0c;还首次将SGX英特尔软件防护扩展技术&#xff08…

谈谈我对零售云在云原生总结与思考

简介&#xff1a; 云原生是零售云的最重要的技术底座&#xff0c;云原生是什么&#xff0c;会走向哪里&#xff0c;在零售2B交付的场景上该如何应用&#xff0c;怎么能够结合帮助建设零售云系列产品体系&#xff0c;值得我们的思考和探索&#xff0c;也将有效指导我们接下来几年…

oracle查看编码

select * from nls_database_parameters where parameter NLS_CHARACTERSET;

类选择器遍历赋值_利用反射实现配置表数据到类对象数据的转换

在游戏开发中&#xff0c;配置表是不可少的。通常我们将一个类&#xff0c;做成一个配置表&#xff0c;将配置表每列的索引都和类的字段名严格对应起来。先实例化一个类的对象&#xff0c;然后通过反射来遍历类中的字段&#xff0c;通过field.SetValue()给类的对象赋值。但是配…

人工智能如何提升大数据存储与管理效率?

简介&#xff1a; 通过使用AI数据存储&#xff0c;供应商和企业可以将存储管理提升到一个新的水平。而且&#xff0c;存储管理员可以找到他们目前正在努力管理的指标的解决方案。 随着大数据的大量来源以及企业可用数据量的增加&#xff0c;存储容量规划已成为存储管理员的问题…

wildfly10 (JBoss)如何部署SSL证书

文章目录1. 证书下载2. 证书配置2. 效果验证项目用的wildfly-10.1.0.Final。需要用到SSL证书&#xff0c;把部署过程记录下来&#xff0c;以供参考。1. 证书下载 本文的证书申请都来自阿里云。 1.首先把你的域名做好解析。 2.从阿里云上下载申请的SSL证书&#xff0c;类型选择…

奇点云集聚数据中台优势,加速企业数智化升级

作者 | 寇雪芹 出品 | CSDN云计算 头图 | 下载于视觉中国 近日&#xff0c;以“应云而生 原力觉醒”为主题的 StartDT Day 数据技术大会在杭州举办。会上&#xff0c;奇点云发布了最新的数据技术战略“跨平台、云原生、自主可控”、云原生数据中台 DataSimba R3.0、消费者数字…

2020-10-29

简介&#xff1a; 世上没有免费的午餐&#xff0c;微服务技术让 IT 系统变得更敏捷、更健壮、更高性能的同时&#xff0c;也带来了架构复杂度的提升。对于开发者而言&#xff0c;要想更好的驾驭微服务架构&#xff0c;需要解决持续集成、服务发现、应用通信、配置管理、流量防护…

状态码202_至少 10 个 HTTP 状态码

HTTP状态码&#xff08;英语&#xff1a;HTTP Status Code&#xff09;是用以表示网页服务器超文本传输协议响应状态的3位数字代码。HTTP状态码 HTTP状态码总的分为五类&#xff1a;1开头&#xff1a;信息状态码2开头&#xff1a;成功状态码3开头&#xff1a;重定向状态码4开头…

玩转 IntelliJ IDEA 2020

文章目录一、基础软件集成配置系列1. 常用快捷键2. IDEA 配置JDK项目应用 JDK3. IDEA 配置 Maven4. IDEA 配置 TOMCAT5. IDEA配置 Git6. IDEA配置的导入导出7. IDEA控制台输出乱码8. IDEA注释模板9. IDEA xml模板10. IDEA 高效开发11. SpringBoot 集成 MyBatisPlus 模板12. Spr…

CSDN 独家对话阿里云贾扬清、华先胜等大咖,剧透阿里云原生技术密码

新一轮科技革命和产业变革正重塑全球发展格局&#xff0c;以云计算为代表的新一代信息技术相互渗透&#xff0c;成为数字经济智能和创新发展新引擎。过去 12 年&#xff0c;人们对云计算的讨论从原来的“为什么上云”&#xff0c;到“为什么不上云”&#xff0c;再到如今探索“…

持续定义Saas模式云数据仓库+实时搜索

简介&#xff1a; 本文由阿里云计算平台事业部 MaxCompute 产品经理孟硕为大家带来《持续定义Saas模式云数据仓库实时搜索》的相关分享。以下是视频内容精华整理&#xff0c;主要包括以下三个部分&#xff1a;1.Why&#xff1a;概述与价值&#xff1b;2.What&#xff1a;应用场…