`

使用JUnit测试通过 HttpClient(https协议)访问支付宝接口时不能自动获得证书的解决办法

    博客分类:
  • java
阅读更多

最近在做一个通过 HttpClient 访问支付宝接口的东东,由于支付宝那边提供的是 https 的协议,所以在实现的过程中碰到了 N 多问题,现在拿出其中几个和大家一起分享。

    再这之前还碰到一个 JUnit 环境配置的问题,稍后会写一份文档和大家一起分享。

    下面正式开始进入作孽一样的调试过程,苦哉苦哉 …… 如果取经九九八十一难一样

    第一难: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: No trusted certificate found

       Baidu,google 先,网上有很多资料不过按照上面的步骤还是解决不了我的问题,不过这些资料对我以后的理解还是有很大帮助的,至少让我知道 HttpClient  ( https )是无法自动获得证书的 ,整整搞了快 1 天还是搞不定。由于我机器同时装了 Jdk1.4 和 Jdk1.5 这个版本, Eclipse 是用 Jdk1.5 的,所以我索性将 Jdk1.4 和 Jdk1.5 一股脑儿统统删除,重新装 Jdk1.5 和重新配置 Eclipse 环境,这下再运行,哈哈!!!上面的 Exception 不见了,有出现了其它一个错误,下面来看第二难(莫明奇妙,还需要继续找资料为啥会好的)。

       第二难: sun.security.validator.ValidatorException : PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException : unable to find valid certification path to requested target

    郁闷,这个问题网络上还找不到很类似的情况,不过当时想肯定和 CA 证书是有关系的,最后发现这个结论还是有用的 ,进入解决 第二难的步骤:

1.     访问 https://www.aplipay3.net

2.     IE 自动弹出安全警报界面,点击“查看证书”

3.     在证书界面,点击“详细信息”,“复制到文件”

4.     在证书导出向导界面,点击“ DER 编码二进制 X.509”

5.     导出文件为 alipay.cer

6.     将 alipay.cer 拷贝到 D:\Program Files\Java\jre1.5.0\lib\security ,而不是 D:\Program Files\Java\jdk1.5.0\jre\lib\security (这个可能和 Eclipse 的环境设置也有关系)

7.     然后用 KeyTool 工具将 alipay.cer 导入 D:\Program Files\Java\jre1.5.0\lib\security\ 目录下的 cacert 文件 ( 注意而不是 D:\Program Files\Java\jdk1.5.0\jre\lib\security 目录下的 , 这个可能和 Eclipse 的环境有关 )

8.     再一次执行程序,哈哈哈哈哈哈,搞定,终于得到了支付宝返回给我的可爱的 XML 数据流

 

由于以前对 Java 安全方面没有怎么接触过,还需对这方面继续补补课,嘿嘿: - )

分享到:
评论
1 楼 lippeng 2014-11-04  
楼主,你好!

这篇中提到的一个话题,是我现在非常关心的,我自己还没搞明白,想向您请教!

至少让我知道 HttpClient  ( https )是无法自动获得证书的


我最近几天一直在想办法通过httpClient先获得证书,再建立SSL/TLS连接,却一直没找到办法!

看到您这句话,看上去是在说:这是做不到的!能告诉我原因是什么吗?

我觉得浏览器能做到,我用HttpClient应该也能做到,只是会麻烦一点。。。所以,这么长时间以来,一直在尝试。。。

非常期待您的回答,谢谢

相关推荐

Global site tag (gtag.js) - Google Analytics