开发者社区> 时序> 正文

Axis 1 https(SSL) client 证书验证错误ValidatorException workaround

简介: Axis 1.x 编写的client在测试https的webservice的时候, 由于client 代码建立SSL连接的时候没有对truststore进行设置,在与https部署的webservice 连接会在运行时报出:  javax.
+关注继续查看

Axis 1.x 编写的client在测试https的webservice的时候, 由于client 代码建立SSL连接的时候没有对truststore进行设置,在与https部署的webservice 连接会在运行时报出:

 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

 

这是由于Axis的client用默认的SocketFactory,会对server端的证书进行验证,我们的测试server是自签名的,client检测到后自动断开连接,握手失败。

网上很多解决方案是用sun的keytool生成clientTrustStore和serverTrustStrore并把证书导进去,这些方法都稍显繁琐,我们这种client测试类没必要做一些程序之外的工作,所以综合了一个解决方案,想到这个办法。此方法的灵感来自于axis文档里的dirty solution。

 

核心思想是自己做一个不对证书做任何检查的SocketFactory,并用这个socket factory来替换Axis本身用的SocketFactory, 为了方便,MySocketFactory直接继承Axis的父类JSSESocketFactory 。并且重写父类方法

 protected void initFactory() throws IOException

 initFactory方法的内容,很簡單,就是让checkServerTrusted/checkClientTrusted什么都不返回,然后最后一行将这个SslSocketFactory赋给我们自定义类里的sslFactory变量。


// Create a trust manager that does not validate certificate chains TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() { public X509Certificate[] getAcceptedIssuers() { return null; } public void checkClientTrusted(X509Certificate[] certs, String authType) { // Trust always } public void checkServerTrusted(X509Certificate[] certs, String authType) { // Trust always } } }; // Install the all-trusting trust manager SSLContext sc = SSLContext.getInstance("SSL"); // Create empty HostnameVerifier HostnameVerifier hv = new HostnameVerifier() { public boolean verify(String arg0, SSLSession arg1) { return true; } }; sc.init(null, trustAllCerts, new java.security.SecureRandom());
  sslFactory = sc.getSocketFactory;

Axis client测试类中用

AxisProperties.setProperty("axis.socketSecureFactory","my.test.MySocketFactory")来指定Axis类库要调用的SocketFactory,就是之前被我们改写的不对server certificate做任何验证的Factory。

 

这个解决方式绝对简单,不需要跟其他方式一样用sun的keytool建立导入一些本地证书,并利用了Axis自己的机制处理证书验证问题。

 

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
HTTPS证书该怎么选择?JoySSL教你如何分辨适合自己的HTTPS证书!
随着钓鱼网站、数据泄露等网络安全问题的频繁发生,越来越多的网站选择安装HTTPS证书;HTTPS证书即SSL证书,类型比较多。如果您是第一次进行HTTPS加密,为您的项目和预算选择正确的SSL证书可能会有些不知所措,请不要担心。JoySSL将向您介绍SSL证书可以保护哪些内容,以便您确切知道要为您的网站购买哪种证书!
27 0
应用域名改造-https证书部分
应用域名改造-https证书部分
17 0
openssl生成自签的证书并且使用nginx配置https证书
使用openssl生成自签的证书并且使用nginx配置https证书
257 0
配置 HDFS-配置 https 证书以及 ssl 配置文件|学习笔记
快速学习配置 HDFS-配置 https 证书以及 ssl 配置文件
344 0
记一次Flutter简单粗暴处理HTTPS证书检验方法
记一次Flutter简单粗暴处理HTTPS证书检验方法
300 0
Windows和Linux 导入java https调用接口时的受信任证书
Windows和Linux 导入java https调用接口时的受信任证书
202 0
RestTemplate调用https接口跳过证书验证
RestTemplate调用https接口跳过证书验证
253 0
【图解Http 学习摘要】五、HTTPS 中的加密、证书介绍,不一直使用 HTTPS 的原因
【图解Http 学习摘要】五、HTTPS 中的加密、证书介绍,不一直使用 HTTPS 的原因
68 0
Fiddler 抓包https配置 提示creation of the root certificate was not successful 证书安装不成功
Fiddler 抓包https配置 提示creation of the root certificate was not successful 证书安装不成功
120 0
Chrome 谷歌浏览器清除HTTPS证书缓存
Chrome 谷歌浏览器清除HTTPS证书缓存
221 0
详细讲解https证书openssl公钥私钥以及ssh公钥私钥的生成以及使用
详细讲解https证书openssl公钥私钥以及ssh公钥私钥的生成以及使用
493 0
Nginx 配置 HTTPS 证书
Nginx 配置 HTTPS 证书
132 0
Https证书-浏览器是如何验证的?
1、CRL证书吊销列表,一般这个都是下载离线到自己电脑里,CA要不定期的更新这个文件。 2、ocsp在线的验证证书的有效性,一般来说CA这个服务的速度和性能不怎么好,抓包好像没发现调用这个ocsp不知道浏览器是个什么机制,不过firefox可以设置是否调用ocsp。
44 0
一日一技:HTTPS 证书和中间人攻击的原理
一日一技:HTTPS 证书和中间人攻击的原理
369 0
+关注
时序
科幻影迷,书虫,硬核玩家,译者 互联网分布式系统稳定性建设,容量规划,压测,监控,容灾多活系统。 SRE, DevOps 微信公众号:麦芽面包
文章
问答
视频
相关电子书
更多
CDN助力企业网站进入HTTPS时代
立即下载
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载