2007-12-09

web service 采用https 的问题

关键字: webservice ssl axis https
最近一个项目,接口包含了web service接口,想想很简单的(以前都没有使用ssl,没想到ssl会遇到一些麻烦),就是调用别人的web service,开始用了xfire来做,通过wsdl很快生成了代码,写好测试类,运行,错误出现了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 这样的异常,初步判断是ssl的问题。找了xfire的文档,发现,如果要使用https的连接,需要相应的处理。于是在代码前加入
ProtocolSocketFactory easy = new EasySSLProtocolSocketFactory();
		Protocol protocol = new Protocol("https", easy, 80);
		Protocol.registerProtocol("https", protocol);

再运行刚才的错误消失了,又出现了新的问题org.codehaus.xfire.fault.XFireFault: No Deserializer found to deserialize a 'urn:pronto.creditReserveAPI.ver1:ns2:in0' using encoding style 'null'.不知道什么原因,google的大半天也没有解决(用axis调通后怀疑xfire生成的问题,不知道那位大侠遇到过如此问题,不吝指教),最后没有办法,决定换axis试试,生成代码也很顺利,同样遇到https的问题,这次的解决办法是参考了http://wwwww.javaeye.com/blog/94854的文章(在此谢谢了,帮了个大忙)(从ie导出证书,并在程序设置System.setProperty("javax.net.ssl.trustStore","D:/test/urltest/crt");或者在运行java时加入参数:-Djavax.net.ssl.trustStore=D:/test/urltest/crt. ),配置了客户端证书,然后测试,终于测试顺利通过。后话,在axis中出现PKIX path building failed的错误的时候,不知道还有没有别的办法进行处理,有时间再研究这个问题了。btw:(O'Reilly 的java security 第2版,里面的接口已经过时了,但是原理讲的很清楚)
评论
snowolf 2008-07-03   回复
正好工作中要用到,今天花了半天终于解决了spring+axis的问题接下来就是安全ssl问题了,呵呵,先谢过!~
StevenYu 2007-12-12   回复
Rain哥是越来越强了
发表评论

您还没有登录,请登录后发表评论

rain.xie
搜索本博客
最近加入圈子
存档
最新评论