双向认证的webservice调用用例
时间: 2023-08-24 12:06:49 浏览: 57
以下是一个使用双向认证的webservice调用的例子:
```java
import java.io.FileInputStream;
import java.security.KeyStore;
import javax.net.ssl.KeyManagerFactory;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManagerFactory;
import javax.xml.namespace.QName;
import javax.xml.ws.Service;
import com.server.HelloWorld;
public class WebServiceClient {
public static void main(String[] args) {
try {
// 客户端证书库信息
String clientKeystorePath = "client.keystore";
String clientKeystorePassword = "password";
// 服务器证书信息
String serverCertificatePath = "server.cer";
// 加载客户端证书库
KeyStore clientKeyStore = KeyStore.getInstance("JKS");
clientKeyStore.load(new FileInputStream(clientKeystorePath), clientKeystorePassword.toCharArray());
// 加载服务器证书
KeyStore serverKeyStore = KeyStore.getInstance("JKS");
serverKeyStore.load(new FileInputStream(serverCertificatePath), null);
// 创建SSL上下文
SSLContext sslContext = SSLContext.getInstance("TLS");
// 客户端证书库信息
KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
keyManagerFactory.init(clientKeyStore, clientKeystorePassword.toCharArray());
// 服务器证书信息
TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
trustManagerFactory.init(serverKeyStore);
// 初始化SSL上下文
sslContext.init(keyManagerFactory.getKeyManagers(), trustManagerFactory.getTrustManagers(), null);
// 创建webservice客户端
Service service = Service.create(new QName("server.com", "HelloWorldImplService"));
service.addPort(new QName("server.com", "HelloWorldImplPort"), javax.xml.ws.soap.SOAPBinding.SOAP11HTTP_BINDING, "https://localhost:8080/webservice");
// 获取webservice接口
HelloWorld helloWorld = service.getPort(HelloWorld.class);
// 设置SSL上下文
((javax.xml.ws.BindingProvider) helloWorld).getRequestContext().put("com.sun.xml.internal.ws.transport.https.client.SSLSocketFactory", sslContext.getSocketFactory());
// 调用webservice
String response = helloWorld.sayHi("World");
System.out.println(response);
} catch (Exception e) {
e.printStackTrace();
}
}
}
```
在上述代码中,首先我们需要加载客户端证书库和服务器证书。然后,我们创建一个SSL上下文,并使用加载的证书初始化它。接下来,我们使用SSL上下文设置webservice客户端的安全上下文,并通过客户端接口调用webservice的方法。最后,我们打印出来自webservice的响应。
请确保将`client.keystore`和`server.cer`替换为实际的证书路径和密码,并将`https://localhost:8080/webservice`替换为实际的webservice地址。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *3* [CXF+Spring+Tomcat开发webservice接口,并添加SSL双向认证](https://blog.csdn.net/weixin_33919950/article/details/92084625)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"]
- *2* [调用https双向认证的webservice](https://blog.csdn.net/fengcheqidong/article/details/43410597)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]