当前位置:   article > 正文

java使用安全证书进行接口联调_java 携带证书调用接口

java 携带证书调用接口

java使用安全证书进行接口联调

证书导入

使用证书文件生成 .cer后缀的证书

如果对方只给到你 .p12后缀的证书, 没有给到你 .cer后缀的格式的证书,那么你就要使用 .p12后缀的生成 .cer后缀的证书,在这里,我以 xca工具为例

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jT6ZmsDY-1597924163711)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20200820163742079.png)]

1、点击File,选择New DataBase,新建一个文件夹用来存放生成的cer证书文件(待会要用,所以要记住路径)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-i9fH848n-1597924163714)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20200820164158305.png)]

2、设置密码

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-25qYBXWh-1597924163716)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20200820164450094.png)]

3、点击 import,选择PKCS#12,找到对方提供的 .p12格式的证书文件,需要输入证书的密码,然后点击import all

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CDbKQK0m-1597924163718)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20200820164744335.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AgJJGG1Y-1597924163720)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20200820165153146.png)]

在这里插入图片描述

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JVjyjzVN-1597924163725)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20200820165912987.png)]

4、到这里证书就引进过来了

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6EDOFwPD-1597924163726)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20200820170046873.png)]

5、选择证书,点击Export,然后选择DER (*.cer),最后点击ok

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LfzOsRJL-1597924163727)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20200820170332475.png)]

注意:这里的格式要选择cer格式的,不然等会导入jdk会报错;到这里生成证书完毕。

查看生成的cer文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JjLiwpde-1597924163728)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20200820171053754.png)]

将cer格式证书导入的jdk的证书库中

如果对方提供了 .cer格式的证书,那么上面的步骤可以略过,直接从这里开始

jdk版本不同证书库位置会有差异,重要的是在jkd中找到cacerts文件位置,这里我的jdk是1.8版本

找到自己的cacerts路径

比如我的是: D:\JAVA-Software\jdk1.8.0_221\jre\lib\security

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yllogBYi-1597924163730)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20200820171619282.png)]

如果你是第一次导入证书也没关系

在上述地址栏:D:\JAVA-Software\jdk1.8.0_221\jre\lib\security ,输出cmd,执行如下命令:

# 这里如果没有cacerts文件也这样写,到时候会生成这个文件
keytool -import -file D:\chip\cbip0020_ca.cer -keystore D:\JAVA-Software\jdk1.8.0_221\jre\lib\security\cacerts
# -file : 刚生成的cer证书的全路径
# -keystore : jdk的cacerts证书库文件全路径
  • 1
  • 2
  • 3
  • 4

输入命令行后会提示要输入jdk证书库密码,默认密码是changeit,有改动的请输入自己的密码

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4yhf71C4-1597924163731)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20200820173455251.png)]

成功后会提示成功是否保存,输入y完成导入;报错的话一般就是证书格式不对或者路径哪里写错了,自行检查

ok,至此,证书已成功导入jdk,那么就下来就行进行代码验证了

接口测试

自己工作中的实例,测试ok

package com.pihao.main;

import org.apache.commons.codec.digest.DigestUtils;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.URL;
import java.security.KeyStore;
import java.security.SecureRandom;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.KeyManager;
import javax.net.ssl.KeyManagerFactory;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.TrustManagerFactory;

/*  
 * @author: pihao  
 * @date:  创建时间    2020年8月20日 下午2:09:21   
 */
public class CustomTest2 {
	private final static ObjectMapper mapper = new ObjectMapper();
	
	public static void main(String[] args) throws Exception {
		
		JSONObject body = getObj();
		
        String TEST_URL ="https://xxxxxx/url/p/custom/createorder"; //接口访问地址,https

        KeyStore clientStore = KeyStore.getInstance("PKCS12");
        //这里填写p12格式证书全路径,后面是证书密码
        clientStore.load(new FileInputStream("D:\\chip\\cbip0020.p12"), "IKaFtXqq".toCharArray());
        KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
        //证书密码
        kmf.init(clientStore, "IKaFtXqq".toCharArray());
        KeyManager[] kms = kmf.getKeyManagers();
        KeyStore trustStore = KeyStore.getInstance("JKS");
        //填写自己的jdk证书库全路径,默认密码是changeit,有修改过的填自己的密码
        trustStore.load(new FileInputStream("D:\\JAVA-Software\\jdk1.8.0_221\\jre\\lib\\security\\cacerts"), "changeit".toCharArray());
        TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
        tmf.init(trustStore);
        TrustManager[] tms = tmf.getTrustManagers();
        SSLContext sslContext = null;
        sslContext = SSLContext.getInstance("TLS");
        sslContext.init(kms, tms, new SecureRandom());

        HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory());

        URL url = new URL(TEST_URL);
        HttpsURLConnection con = (HttpsURLConnection) url.openConnection();
        
        //加密内容
        String content = body + "26e27a4ab1eb4007b1bc1e0d609f2d7e"; 
		System.out.println("加密内容是: "+content);
        String secrate = DigestUtils.sha256Hex(content);
        System.out.println("加密结果是: "+secrate);

        con.setRequestMethod("POST");
        con.setRequestProperty("datadigest", secrate); 	 //签名
        con.setRequestProperty("partnercode", "123456");  //partnercode
        con.setRequestProperty("Content-Type", "application/json;charset=utf-8");
        con.setInstanceFollowRedirects(false);
        con.setDoOutput(true);
        con.setDoInput(true);
        con.connect();


        OutputStreamWriter out = new OutputStreamWriter(con.getOutputStream(), "utf-8");
        out.write(body.toString());
        out.flush();
        out.close();

        System.out.println("接口调用返回: " + con.getResponseMessage());
        InputStream inputStream = con.getInputStream();
        System.out.println(inputStreamToString(inputStream));
        inputStream.close();
        con.disconnect();
	}

	
	

	public static String inputStreamToString(InputStream is) throws IOException {
		BufferedReader reader = new BufferedReader(new InputStreamReader(is, "UTF-8"));
		String line = reader.readLine();
		StringBuilder builder = new StringBuilder();
		while (line != null) {
			builder.append(line);
			line = reader.readLine();
		}
		return builder.toString();
	}
	
	
    //设置请求报文
	public static JSONObject getObj(){
		JSONObject json = new JSONObject();
		json.put("orderSource", "1");//订单来源
		json.put("productCode", "11111");// 渠道编码
		json.put("orderId", "TEST202008200002");//订单号
		json.put("mailCode", "");//邮件条码
		json.put("volume", 100.0);//邮件体积(立方厘米)
		json.put("length", 10.0);//长度 (cm)
		json.put("width", 10.0);//宽度 (cm)
		json.put("height", 10.0);//高度 (cm)
		json.put("mailWeight", 500);//邮件总重量 (g)
		json.put("mailValue",100.0);//邮件总价值
		json.put("valueType", "USD");//货币
		json.put("batteryFlag", 0);//是否带电 (1 带电,0 不带电)
		json.put("innerType", "3");// 内件类型(1 礼品,2 文件,3 商品货样,5 其他)
		json.put("remark", "商品描述");
		
		JSONObject senderJson = new JSONObject();//寄送人节点信息
		senderJson.put("name", "zhangsan");// 姓名
		senderJson.put("company", "company");// 姓名
		senderJson.put("postCode", "xxxxxx");//邮编
		senderJson.put("phone", "15083609300");//电话
		senderJson.put("mobile", "15083609200");//移动电话
		senderJson.put("email", "123@qq.com");//邮件
		senderJson.put("idType", "");//
		senderJson.put("idNO", "");//
		senderJson.put("countryCode", "CN");//国家简码
		senderJson.put("province", "sheng xxx");//省
		senderJson.put("city", "city xxx");//城市
		senderJson.put("address", "address xxx");// 详细地址
		senderJson.put("duty", "");// 税则号
		
		json.put("sender", senderJson);
		
		JSONObject receiverJson = new JSONObject();//收件人节点信息
		receiverJson.put("name", "lisi");// 姓名
		receiverJson.put("company", "company");// 姓名
		receiverJson.put("postCode", "338000");//邮编
		receiverJson.put("phone", "15083609301");//电话
		receiverJson.put("mobile", "15083609201");//移动电话
		receiverJson.put("email", "123@qq.com");//邮件
		receiverJson.put("idType", "");//
		receiverJson.put("idNO", "");//
		receiverJson.put("countryCode", "US");//国家简码
		receiverJson.put("province", "abc");//省
		receiverJson.put("city", "xx");//城市
		receiverJson.put("address", "jiujinshan");// 详细地址
		receiverJson.put("duty", "");// 税则号
		
		json.put("receiver", receiverJson);
		
		
		JSONArray cargoArray = new JSONArray();//订单内件节点信息,list
		for (int i = 0; i < 1; i++) {
			JSONObject cargoJson = new JSONObject();
			cargoJson.put("innerName", "防疫口罩");//商品中文名称
			cargoJson.put("innerNameEn", "defended_mask");//商品英文名称
			cargoJson.put("innerQty", 2);//商品数量
			cargoJson.put("innerWeight", 400);//商品重量(g)
			cargoJson.put("innerPrice", 89.9);//报关价格
			cargoJson.put("sku", "111000202004230099");//商品 sku 编号
			cargoJson.put("original", "CN");
			cargoJson.put("customsCode", ""); 
			cargoJson.put("innerIngredient", "");
			
			cargoArray.add(cargoJson);
		}
		json.put("cargo", cargoArray);
		
		return json;
	}
	
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156
  • 157
  • 158
  • 159
  • 160
  • 161
  • 162
  • 163
  • 164
  • 165
  • 166
  • 167
  • 168
  • 169
  • 170
  • 171
  • 172
  • 173
  • 174
  • 175

接口可以调通,响应是成功的!!!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/732708
推荐阅读
相关标签
  

闽ICP备14008679号