java webservice异常处理_web-services – java webservice客户端中的握手异常
时间: 2024-03-02 15:41:36 浏览: 16
在 Java WebService 客户端中,可能会遇到“握手异常”(handshake exception),这通常是由于 SSL 证书不受信任或证书过期等原因导致的。
解决方法如下:
1. 导入服务器的 SSL 证书
在 Java WebService 客户端中,可以使用 keytool 工具将服务器的 SSL 证书导入到客户端的信任库中。具体步骤如下:
1)使用浏览器访问 WebService 服务器,如 https://example.com/Service?wsdl。
2)在浏览器中点击锁图标,查看证书信息。
3)将证书保存到本地,如 example.cer。
4)使用 keytool 工具将证书导入到客户端的信任库中:
```
keytool -import -alias example -file example.cer -keystore cacerts
```
其中,cacerts 是 Java 安装目录下 jre/lib/security 目录中的一个文件,用于保存信任的证书。
2. 关闭 SSL 验证
在测试环境中,可以通过关闭 SSL 验证来解决“握手异常”问题。具体步骤如下:
1)创建一个 TrustManager,用于跳过 SSL 验证:
```
TrustManager[] trustAllCerts = new TrustManager[] {
new X509TrustManager() {
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
return null;
}
public void checkClientTrusted(X509Certificate[] certs, String authType) {
}
public void checkServerTrusted(X509Certificate[] certs, String authType) {
}
}
};
```
2)创建一个 SSLContext,并使用上面创建的 TrustManager:
```
SSLContext sc = SSLContext.getInstance("SSL");
sc.init(null, trustAllCerts, new java.security.SecureRandom());
```
3)将 SSLContext 设置到 HttpsURLConnection 中:
```
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
```
注意:在生产环境中,不建议关闭 SSL 验证。
总结:
以上两种方法都可以解决“握手异常”问题,具体选择哪种方法,要根据实际情况来决定。在生产环境中,建议使用第一种方法,即导入服务器的 SSL 证书。在测试环境中,可以使用第二种方法,即关闭 SSL 验证。