访问两个带证书的https业务接口,证书总是冲突

浅水湛湛 2018-04-12 09:37:04
系统需要访问微信支付,需要用到证书,另外需要访问一个保险接口,也需要用到证书。 结果总是出现证书冲突。
第一个调用的就可以顺利通过。
如果第一个调用微信支付,微信支付可以通过,但是保险接口就不能用了,报找不到证书。
如果第一个调用保险接口,微信支付接口就报找不到证书。

访问微信支付接口的部分代码:
try {

// 代码如下:修改证书路径跟密码即可

KeyStore keyStore = KeyStore.getInstance("PKCS12");
String cert_path = magicHelper.getProperty("wx.CERT");
String password = magicHelper.getProperty("wx.PARTNER");

FileInputStream instream = new FileInputStream(new File(
cert_path == null ? "E://temp//zcb//apiclient_cert.p12"
: cert_path));

keyStore.load(instream, password.toCharArray());

instream.close();

SSLContext sslcontext = SSLContexts.custom()
.loadKeyMaterial(keyStore, password.toCharArray()).build();

SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(
sslcontext,
new String[] { "TLSv1" },
null,

SSLConnectionSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER);
访问保险接口的:
String chinaLifeKeyPath = magicHelper.getProperty("chinalifekey.path");
System.setProperty("javax.net.ssl.trustStore",
chinaLifeKeyPath+"server.jks");
System.setProperty("javax.net.ssl.trustStorePassword", "12345678");
// System.setProperty("javax.net.ssl.keyStore",
// "D:/temp/chezhan.jks");
System.setProperty("javax.net.ssl.keyStore",
chinaLifeKeyPath+"eshop_test.pfx");
System.setProperty("javax.net.ssl.keyStoreType", "PKCS12");
System.setProperty("javax.net.ssl.keyStorePassword", "123456");

System.setProperty("https.protocols", "TLSv1,SSLv3");
请各位大拿指导!
...全文
1124 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
码客567 2018-09-20
  • 打赏
  • 举报
回复
我也遇到过证书冲突的情况 但是最后还是没有办法解决 最后还是被迫自己封装了另一个接口调用的方式 采用http请求才解决的
不知道这种请款有没有彻底的比较好的解决办法
这样就可以采用已经封装好的jar依赖 而不是还要自己冲头到尾写一遍
qq_36580304 2018-09-14
  • 打赏
  • 举报
回复
然后再问一下您,我在调用微信支付统一下单API发送post请求时读取的apiclient_cert.p12证书文件,我加上您的这些代码跟之前没有差别。还是报错:sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
求解
qq_36580304 2018-09-14
  • 打赏
  • 举报
回复
我现在如果先调用微信支付的API,另一个接口就会报错。也像您这样清除了环境变量,但还是没用。求解大哥!!!
qq_36580304 2018-09-14
  • 打赏
  • 举报
回复
大哥,你这样解决了吗?我情况跟你一模一样!我是在访问第二个接口的时候清理了环境变量,可是微信支付后执行的话还是拿不到prepar_id
浅水湛湛 2018-04-12
  • 打赏
  • 举报
回复
在调用前,直接做一个环境变量的清理即可: //清理掉环境变量 System.out.println("清理掉环境变量"); System.clearProperty("javax.net.ssl.trustStore"); System.clearProperty("javax.net.ssl.trustStorePassword"); // System.setProperty("javax.net.ssl.keyStore", "D:/temp/chezhan.jks"); System.clearProperty("javax.net.ssl.keyStore"); System.clearProperty("javax.net.ssl.keyStoreType"); System.clearProperty("javax.net.ssl.keyStorePassword"); System.clearProperty("https.protocols");

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧