A-A+
WebService的HTTPS访问——解决PKIX错误
最近都在与Java打交道,将原来的项目用Java重构了一遍,所以之前的问题又再次浮出水面,在Axis2的WebService客户端生成完毕后,访问目标服务时报错,错误为“unable to find valid certification path to requested target”,说白了就是证书问题。
首先,需要从目标站点导出证书,以火狐为例,按以下步骤操作:
其次,导入公钥:
- keytool -import -file d:\Server.cer -keystore "%JAVA_HOME%\jre\lib\security\cacerts" -alias server
将上面命令中的"d:\Server.cer"替换为第一步导出的证书的完整路径,比如"d:\bladelogicrds.crt"。在这里需要注意的是:
1.有的资料中说导入到jre下,说的比较模糊,其实决定导入到哪里,是由你最终使用的WEB服务器所加载的JDK决定的,比如我的Tomcat就是使用JAVA_HOME所指向的JDK,所以我需要导入至此。最好细心检查一下,避免配置了半天却还是报错。
2.也许在实验配置时,搞错了秘钥库密码,或者在“%JAVA_HOME%\jre\lib\security”下已经存在了“cacerts”这个文件,你可以直接删了旧的,再使用命令导入,这时会生成一个新的。
使用如下命令可以查看是否导入成功:
"server"就是个别名,与导入命令中的"-alias server"中的相对应。如下图所示:
至此,配置完毕,可以再次运行程序进行验证了。解决这个错误还有一种方法,使用编码的方式将证书添加到请求对象中,这种方法因为时间关系,没有试验。
注:keytool为java自带的工具,可以在bin文件夹中找到。