赞
踩
如果对方只给到你 .p12后缀的证书, 没有给到你 .cer后缀的格式的证书,那么你就要使用 .p12后缀的生成 .cer后缀的证书,在这里,我以 xca工具为例
1、点击File,选择New DataBase,新建一个文件夹用来存放生成的cer证书文件(待会要用,所以要记住路径)
2、设置密码
3、点击 import,选择PKCS#12,找到对方提供的 .p12格式的证书文件,需要输入证书的密码,然后点击import all
4、到这里证书就引进过来了
5、选择证书,点击Export,然后选择DER (*.cer),最后点击ok
注意:这里的格式要选择cer格式的,不然等会导入jdk会报错;到这里生成证书完毕。
查看生成的cer文件
如果对方提供了 .cer格式的证书,那么上面的步骤可以略过,直接从这里开始
jdk版本不同证书库位置会有差异,重要的是在jkd中找到cacerts文件位置,这里我的jdk是1.8版本
找到自己的cacerts路径
比如我的是: D:\JAVA-Software\jdk1.8.0_221\jre\lib\security
如果你是第一次导入证书也没关系
在上述地址栏: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证书库文件全路径
输入命令行后会提示要输入jdk证书库密码,默认密码是changeit,有改动的请输入自己的密码
成功后会提示成功是否保存,输入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; } }
接口可以调通,响应是成功的!!!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。