调用第三方服务时,厂商提供了一个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相关推荐

  1. php soapclient http认证,php soapClient证书调用https开头的webservice失败有关问题解决方案...

    这几天做了服务器的php版本升级,由5.4升级到5.6.19,其他部分都没问题,结果发现https的webservice证书调用失败,报:failed to load external entity错 ...

  2. PHP curl携带CA证书访问https

    curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,true); curl_setopt($ch, CURLOPT_SSLCERT,dirname(__FILE__).'/c ...

  3. 【实测避坑】SAP PI/PO系统 配置证书调用https地址

    博主内容在此链接原文上修改,避免初次配置https的时候踩到大坑,目前发现知乎,CSDN等相关文章中均未提及,博主踩坑花了2天时间才找到原因,未避免后续人员踩坑,在此文中特别补充. 在原文的基础上进行 ...

  4. 【SSL】调用HTTPS://服务遇到错误:unable to find valid certification path to requested target

    前言 OkHttpClient 最近有个需求,需要调用一个https开头的URL服务. 服务方提供了一个demo,但,demo是调用http的服务. 网上找了一大圈,发现盖起来要这样要那样的.都不符合 ...

  5. 用pfx证书java双向认证_把CA证书生成的crt的证书和pem的私钥转换成java能够使用的keystore和pcks12的证书,实现https双向认证...

    最近在做一个https双向认证的工作,领导先让我实现,我之前写了一篇文章,把tomcat的生成证书和配置的实现写了出来. 现在领导给了我服务器的CA证书的客户端证书和私钥,服务端信任证书,分别是crt ...

  6. android https通过载入pfx证书获取数据

    直接给代码吧.研究了几天才搞定...... public static final String CLIENT_KET_PASSWORD = "Ku6OpqKDfN4=305790" ...

  7. Java 和 HTTP 的那些事(四) HTTPS 和 证书

    Java 和 HTTP 的那些事(四) HTTPS 和 证书 说起 HTTP 的那些事,则不得不提 HTTPS ,而说起 HTTPS ,则不得不提数字证书.这篇博客将从 Java 的角度,学习 HTT ...

  8. Tomcat 8.5——配置阿里云免费SSL证书(PFX格式证书)[启用HTTPS协议]

    基本概念 SSL证书:SSL证书是数字证书的一种,类似于驾驶证.护照和营业执照的电子副本.因为配置在服务器上,也称为SSL服务器证书. SSL 证书就是遵守 SSL协议,由受信任的数字证书颁发机构CA ...

  9. Https java信任_java访问非经过信任证书https的方法

    由于项目需要,需要调用第三方的API接口,为了简单方便与快速开发,便采用了httpClient来进行调用. org.apache.httpcomponents httpclient 4.5.6 但在第 ...

  10. java访问未验证证书的HTTPS

     用http进行连接的,客户端代码比较简单,直接使用URL类进行连接并获取输入流即可.https不需要客户端证书,并且服务器端的证书是已经受信任的也同http一样容易.当验证的证书每年的费用得好几 ...

最新文章

  1. gpio pin和pad的区别
  2. 一个AndroidStudio项目的目录
  3. Java反射在JVM的实现
  4. 深入浅出 Javascript 事件
  5. PowerEdge服务器生命周期控制器:Lifecycle Controller
  6. Python使用marshal模块操作二进制文件
  7. 技术沙龙|实力赋能开发者,助力企业从容应对数字化转型难题
  8. 【java笔记】StringBuilder类
  9. python基础之列表函数(10)
  10. Android手动创建活动并注册AndroidManifest.xml
  11. (1)ROS安装时Rosdep 报错解决教程
  12. HanLP-命名实体识别总结
  13. day06_雷神_面向对象初识
  14. Python数据分析与应用_从数据获取到可视化题库及答案
  15. matlab凯塞窗低通fir滤波器,基于Matlab的FIR滤波器设计与实现
  16. FZUOJ Problem 2178 礼品配送
  17. 交通灯的PLC控制设计
  18. CXF框架发布WebService服务的例子
  19. 自学Linux:8.特殊权限
  20. 计算机信息世界PPT,奇妙的信息世界课件.ppt

热门文章

  1. PAT1150 Travelling Salesman Problem
  2. java课程综合实训报告_Java ME综合实训报告
  3. BZOJ---4484:[Jsoi2015]最小表示【bitset】
  4. 金丹期前期:1.11、python语言进阶-网络
  5. 中国公开课《如何培养孩子的学习兴趣》2020 郑日昌 观后感
  6. 超越函数e^(-x^2)在(-∞, +∞)上的定积分的两种解法
  7. 2021-06-10
  8. 少有人知的 Python “重试机制“:tenacity
  9. python tenacity用装饰器方式重试用例,提高测试用例的健壮性
  10. IDEA全局查找快捷键