java https pfx_使用HttpClient携带pfx证书调用HTTPS协议的WebService
调用第三方服务时,厂商提供了一个WSDL文件、调用的地址和一个后缀为pfx的证书文件,通过SOUPUI记载证书是可以正常调用WebService服务,那么如何将该服务转换为代码呢?
咨询了厂商的支持,厂商说直接发送报文即可。
观察SOUPUI的调用发现直接发送的SOUP报文,那么决定使用HttpClient进行服务调用,调用HTTPS好说、发送报文也好说,关键问题卡在了pfx证书上面。
百度了很多例子,说JAVA无法直接携带pfx的证书,那么就在pfx证书转换方面尝试了一些,最终没有转换成功。
继续观察SOUPUI的调用模式,SOUPUI可以在PERFERENCE的SSL中可以直接配置keystore和password,就可以携带证书,而且SOUPUI调用各种服务主要是使用HTTPClient完成的的,他可以实现,那就说明通过HTTPClient是可以直接携带pfx格式的证书的,基本思路确定,那就全力在这条路上继续折腾吧。
整理一下尴尬的情况:
资源:HTTPS协议、WebService服务、需要pfx证书认证;
目标:通过HttpClient构建SSL通道调用HTTPS的WebService接口,携带pfx证书信息,直接发送SOUP报文调用接口;
难点:pfx证书如何处理?
百度了好久,有相应的解决方案,但实验后均不行;后在bing的国际版中进行搜索,结果中stackoverflow中有了大收获。
该国际友人碰到了和我一样的问题,通过SOUPUI携带pfx证书调用Https的WebService服务没有问题,使用HttpClient模拟报文的时候无法携带证书,但是该哥们自行解决了该问题,而且还无私的把源代码整个贴在了论坛上,我用颤抖的双手复制粘贴了该代码,稍作修改执行发现问题解决。天哪,折腾了一个下午加晚上,终于算是解决了。
在此特意转发一下这位大神的佳作:
KeyStore clientStore = KeyStore.getInstance("PKCS12");
InputStream instream=Thread.currentThread().getContextClassLoader().getResourceAsStream(keystoreName);try{
clientStore.load(instream, keyStorePwd.toCharArray());
}finally{
instream.close();
}//Trust everybody
X509TrustManager tm = newX509TrustManager() {
@Overridepublic void checkClientTrusted(java.security.cert.X509Certificate[] arg0, String arg1) throwsCertificateException {}
@Overridepublic void checkServerTrusted(java.security.cert.X509Certificate[] arg0, String arg1) throwsCertificateException {}
@Overridepublic java.security.cert.X509Certificate[] getAcceptedIssuers() {return null;}
};
SSLContext sslCtx= SSLContext.getInstance("TLS");
KeyManagerFactory kmfactory=KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
kmfactory.init(clientStore, keyStorePwd!= null ? keyStorePwd.toCharArray() : null);
KeyManager[] keymanagers=kmfactory.getKeyManagers();
sslCtx.init(keymanagers,new TrustManager[]{tm}, null);
SSLConnectionSocketFactory sslConnectionFactory= newSSLConnectionSocketFactory(sslCtx);
Registry registry = RegistryBuilder.create().register("https", sslConnectionFactory).register("http", newPlainConnectionSocketFactory()).build();
PoolingHttpClientConnectionManager pcm= newPoolingHttpClientConnectionManager(registry);
HttpClientBuilder hcb=HttpClientBuilder.create();
hcb.setConnectionManager(pcm);
CloseableHttpClient httpClient= hcb.build();
java https pfx_使用HttpClient携带pfx证书调用HTTPS协议的WebService相关推荐
- php soapclient http认证,php soapClient证书调用https开头的webservice失败有关问题解决方案...
这几天做了服务器的php版本升级,由5.4升级到5.6.19,其他部分都没问题,结果发现https的webservice证书调用失败,报:failed to load external entity错 ...
- PHP curl携带CA证书访问https
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,true); curl_setopt($ch, CURLOPT_SSLCERT,dirname(__FILE__).'/c ...
- 【实测避坑】SAP PI/PO系统 配置证书调用https地址
博主内容在此链接原文上修改,避免初次配置https的时候踩到大坑,目前发现知乎,CSDN等相关文章中均未提及,博主踩坑花了2天时间才找到原因,未避免后续人员踩坑,在此文中特别补充. 在原文的基础上进行 ...
- 【SSL】调用HTTPS://服务遇到错误:unable to find valid certification path to requested target
前言 OkHttpClient 最近有个需求,需要调用一个https开头的URL服务. 服务方提供了一个demo,但,demo是调用http的服务. 网上找了一大圈,发现盖起来要这样要那样的.都不符合 ...
- 用pfx证书java双向认证_把CA证书生成的crt的证书和pem的私钥转换成java能够使用的keystore和pcks12的证书,实现https双向认证...
最近在做一个https双向认证的工作,领导先让我实现,我之前写了一篇文章,把tomcat的生成证书和配置的实现写了出来. 现在领导给了我服务器的CA证书的客户端证书和私钥,服务端信任证书,分别是crt ...
- android https通过载入pfx证书获取数据
直接给代码吧.研究了几天才搞定...... public static final String CLIENT_KET_PASSWORD = "Ku6OpqKDfN4=305790" ...
- Java 和 HTTP 的那些事(四) HTTPS 和 证书
Java 和 HTTP 的那些事(四) HTTPS 和 证书 说起 HTTP 的那些事,则不得不提 HTTPS ,而说起 HTTPS ,则不得不提数字证书.这篇博客将从 Java 的角度,学习 HTT ...
- Tomcat 8.5——配置阿里云免费SSL证书(PFX格式证书)[启用HTTPS协议]
基本概念 SSL证书:SSL证书是数字证书的一种,类似于驾驶证.护照和营业执照的电子副本.因为配置在服务器上,也称为SSL服务器证书. SSL 证书就是遵守 SSL协议,由受信任的数字证书颁发机构CA ...
- Https java信任_java访问非经过信任证书https的方法
由于项目需要,需要调用第三方的API接口,为了简单方便与快速开发,便采用了httpClient来进行调用. org.apache.httpcomponents httpclient 4.5.6 但在第 ...
- java访问未验证证书的HTTPS
用http进行连接的,客户端代码比较简单,直接使用URL类进行连接并获取输入流即可.https不需要客户端证书,并且服务器端的证书是已经受信任的也同http一样容易.当验证的证书每年的费用得好几 ...
最新文章
- gpio pin和pad的区别
- 一个AndroidStudio项目的目录
- Java反射在JVM的实现
- 深入浅出 Javascript 事件
- PowerEdge服务器生命周期控制器:Lifecycle Controller
- Python使用marshal模块操作二进制文件
- 技术沙龙|实力赋能开发者,助力企业从容应对数字化转型难题
- 【java笔记】StringBuilder类
- python基础之列表函数(10)
- Android手动创建活动并注册AndroidManifest.xml
- (1)ROS安装时Rosdep 报错解决教程
- HanLP-命名实体识别总结
- day06_雷神_面向对象初识
- Python数据分析与应用_从数据获取到可视化题库及答案
- matlab凯塞窗低通fir滤波器,基于Matlab的FIR滤波器设计与实现
- FZUOJ Problem 2178 礼品配送
- 交通灯的PLC控制设计
- CXF框架发布WebService服务的例子
- 自学Linux:8.特殊权限
- 计算机信息世界PPT,奇妙的信息世界课件.ppt
热门文章
- PAT1150 Travelling Salesman Problem
- java课程综合实训报告_Java ME综合实训报告
- BZOJ---4484:[Jsoi2015]最小表示【bitset】
- 金丹期前期:1.11、python语言进阶-网络
- 中国公开课《如何培养孩子的学习兴趣》2020 郑日昌 观后感
- 超越函数e^(-x^2)在(-∞, +∞)上的定积分的两种解法
- 2021-06-10
- 少有人知的 Python “重试机制“:tenacity
- python tenacity用装饰器方式重试用例,提高测试用例的健壮性
- IDEA全局查找快捷键