开发者社区> 时序> 正文

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自己的机制处理证书验证问题。

 

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

相关文章
openssl生成自签的证书并且使用nginx配置https证书
使用openssl生成自签的证书并且使用nginx配置https证书
125 0
配置 HDFS-配置 https 证书以及 ssl 配置文件|学习笔记
快速学习配置 HDFS-配置 https 证书以及 ssl 配置文件
214 0
记一次Flutter简单粗暴处理HTTPS证书检验方法
记一次Flutter简单粗暴处理HTTPS证书检验方法
187 0
Windows和Linux 导入java https调用接口时的受信任证书
Windows和Linux 导入java https调用接口时的受信任证书
158 0
RestTemplate调用https接口跳过证书验证
RestTemplate调用https接口跳过证书验证
182 0
【图解Http 学习摘要】五、HTTPS 中的加密、证书介绍,不一直使用 HTTPS 的原因
【图解Http 学习摘要】五、HTTPS 中的加密、证书介绍,不一直使用 HTTPS 的原因
39 0
Fiddler 抓包https配置 提示creation of the root certificate was not successful 证书安装不成功
Fiddler 抓包https配置 提示creation of the root certificate was not successful 证书安装不成功
88 0
Chrome 谷歌浏览器清除HTTPS证书缓存
Chrome 谷歌浏览器清除HTTPS证书缓存
161 0
详细讲解https证书openssl公钥私钥以及ssh公钥私钥的生成以及使用
详细讲解https证书openssl公钥私钥以及ssh公钥私钥的生成以及使用
394 0
+关注
时序
科幻影迷,书虫,硬核玩家,译者 互联网分布式系统稳定性建设,容量规划,压测,监控,容灾多活系统。 SRE, DevOps 微信公众号:麦芽面包
文章
问答
视频
文章排行榜
最热
最新
相关电子书
更多
阿里巴巴HTTP 2.0实践及无线通信协议的演进之路
立即下载
CDN助力企业网站进入HTTPS时代
立即下载
低代码开发师(初级)实战教程
立即下载