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

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

 

时间: 2024-10-11 05:55:11

Axis 1 https(SSL) client 证书验证错误ValidatorException workaround的相关文章

浅谈https\ssl\数字证书,互联网营销

在互联网安全通信方式上,目前用的最多的就是https配合ssl和数字证书来保证传输和认证安全了.本文追本溯源围绕这个模式谈一谈. 名词解释 首先解释一下上面的几个名词: https:在http(超文本传输协议)基础上提出的一种安全的http协议,因此可以称为安全的超文本传输协议.http协议直接放置在TCP协议之上,而https提出在http和TCP中间加上一层加密层.从发送端看,这一层负责把http的内容加密后送到下层的TCP,从接收方看,这一层负责将TCP送来的数据解密还原成http的内容.

轻松把玩HttpClient之配置ssl,采用绕过证书验证实现https

上篇文章说道httpclient不能直接访问https的资源,这次就来模拟一下环境,然后配置https测试一下.在前面的文章中,分享了一篇自己生成并在tomcat中配置ssl的文章<Tomcat配置SSL>,大家可以据此来在本地配置https.我已经配置好了,效果是这样滴: 可以看到已经信任该证书(显示浅绿色小锁),浏览器可以正常访问.现在我们用代码测试一下: public static void main(String[] args) throws ParseException, IOExc

怎么实现client通过证书验证去访问cloud serice上的服务

问题描述 怎么实现client通过证书验证去访问cloud serice上的服务 我想让我的客户端的程序通过证书去访问云服务上面的内容,是不是只需要在Azure上使用HTTPS就可以了? 我在MSDN也发帖子了:https://social.msdn.microsoft.com/Forums/zh-CN/2e09aa4b-0e20-42ed-a834-c90937cdf865/clientcloud-serice?forum=windowsazurezhchs 解决方案 先安装 windows

免费SSL安全证书Let&#039;s Encrypt申请及Nginx WEB站点部署HTTPS

如今,尤其是购物类.外贸类网站越来越多的需要将站点安装SSL证书,实现HTTPS网址格式,一来体现网站的数据安全性,二来主流需求且对于搜索引擎有一定的帮助(只是听说,应该不至于),不过对于中文类网站来说目前使用SSL安全证书还不是很普遍,不过后面肯定也会流行起来的. 毕竟互联网的资源是丰富的,老蒋在之前的博客文章中也有介绍过多个免费SSL安全证书资源,比如WoSign,StartSSL,UK2提供的Comodo PositiveSSL免费证书,这也包括在这篇文章需要分享的Let's Encryp

https证书/即SSL数字证书申请途径和流程

国际CA机构GlobalSign中国 数字证书颁发中心网站:http://cn.globalsign.com https证书即SSL数字证书,是广泛用 于网站通讯加密传输的解决方案,是提供通信保密的安全性协议,现已成为用来鉴别网站的真实身份,以及在浏览器与WEB服务器之间进行加密通讯的全球化标准. 常见的SSL数字证书分为以下几种类型,但申请流程大同小异,但一切工作均需在以上数字证书颁发中心的网站进行,建议先咨询该中心工作人员以确定是否有申请程序的更新步骤. DV域名型证书: 确认信息--发送

rabbitmq mqtt adapter 没办法做ssl证书验证

问题描述 rabbitmq mqtt adapter 没办法做ssl证书验证 rabbitmq mqtt adapter 没办法做ssl证书验证,客户端用证书一直连接不上,不知道哪位有这方面经验? 解决方案 rabbitmq3.5才支持证书验证,不过目前我还没配置成功 解决方案二: rabbitmq3.5才支持证书验证,不过目前我还没配置成功 解决方案三: rabbitmq3.5才支持证书验证,不过目前我还没配置成功 解决方案四: rabbitmq3.5才支持证书验证,不过目前我还没配置成功 解

https 证书错误-https链接导致证书错误的原因,多谢帮忙

问题描述 https链接导致证书错误的原因,多谢帮忙 很多https网站的第一次访问时,浏览器会提示证书错误,然后点击"继续",就能正常访问了. 网上查了下这个问题,说如果要解决这个证书错误的提示,需要在IE的设置里面导入证书(导入过程略复杂),然后就不会出现错误页面了. 请问要彻底解决这个证书错误的问题,是否真的要复杂地导入一遍证书? 还有,如果不导入证书,点击"继续"也可正常访问,请问这样的话,以后是否浏览器就算自动导入证书了?之后访问该网站是否会又突然出现证书

WCF https 证书验证

问题描述 在网上看了不少配置证书的帖子,IIS不是可以直接设置https访问,并且指定证书验证的么,为什么还要在配置文件中进行配置?另外查到资料年份都是比较早的,有最新资料的还望分享. 解决方案 解决方案二:这个...msdn里面应该有,具体你还是网上搜一下额解决方案三:WCF的托管方式有很多种,并不是只有IIS托管一种,所以要在配置文件中配置.

实战SSL For Free工具快速安装Let&#039;s Encrypt免费SSL安全证书

早在两年前,谷歌搜索引擎指南中就提出来如果网站是HTTPS网址(安装SSL安全证书)在一定条件因素中会对网站的权重和排名有一定的正面作用.随后两年我们国内的搜索引擎也陆续的开始基于网站是否加入SSL证书一番讨论,不过从用户体验以及实际的需求看,如果我们交互类网站采用HTTPS网址还是有必要的,至少给我们的感觉是值得信赖. 以前如果我们网站要使用SSL证书那得支付高额的费用购买证书,如今即便付费SSL也很便宜,甚至有很多免费SSL证书可以使用,在老蒋部落中有提到StartSSL.沃通.Let's