java调用OPENSSL生成双向SSL的WEB-SERVICE

上一篇提到在NGINX中配置了双向SSL的验证, 签名信息及公私钥对都是用OPENSSL生成. 并且用生成的CLIENT端证书放在浏览器上可正常调用,但WEB-SERVICE方式调用却没有试过. 平常WEB-SERVICE的双向SSL都是用KEYTOOL工具生成公私钥信息及签名信息,所以这次同样试一下用KEYTOOL来处理OPENSSL的证书.

很感谢这篇博文:http://wenku.baidu.com/view/a00daa2a3169a4517723a351.html 给我带来的灵感.

 

接着上一篇http://lvjun106.iteye.com/blog/1892533 , 我用OPENSSL生成了ca根证书的私钥ca.crt和客户端client.crt.

接着我用KEYTOOL工具把这两个私钥都同时导入到信任库中client.keystore

keytool -import -v -trustcacerts  -alias ca_root -file ca.crt -storepass 1111 -keystore client.keystore

keytool -import -v -alias ipclient_private_key -file client.crt -keypass 1111 -storepass 1111 -keystore client.keystore

接着,可以查看一下这个keystore 的详细信息keytool -list -v -keystore client.keystore

 

JAVA客户端调用SSL WEB SERVICE

System.setProperty("javax.net.ssl.keyStore", "F:/workspace/TemporaryProgram/cert/client02.p12");
		System.setProperty("javax.net.ssl.keyStorePassword","client02");
		System.setProperty("javax.net.ssl.keyStoreType","PKCS12");
		System.setProperty("javax.net.ssl.trustStore", "F:/workspace/TemporaryProgram/cert/client.keystore");
		System.setProperty("javax.net.ssl.trustStorePassword","client02");
		System.setProperty("javax.net.ssl.trustStoreType", "jks");
		
		
		String endpointURL = "https://192.168.40.129:8443/XXXX/services/supplier?wsdl";//
		// Web服务端点地址            
		Service service = new Service();
		Call call = (Call) service.createCall();
		call.setTargetEndpointAddress(new java.net.URL(endpointURL));
		call.setOperationName(new QName("http://test.com", "getSupplierByCode"));// 设置操作的名称。
		call.addParameter("systemSecurityCode", XMLType.XSD_STRING, ParameterMode.IN);// 参数的类型
		call.addParameter("code", XMLType.XSD_STRING, ParameterMode.IN);// 参数的类型
		call.setReturnType(XMLType.XSD_STRING);// 返回的数据类型
		Double ret = (Double) call.invoke(new Object[] { "fdsaf","fdsafdas"});// 执行调用
		System.out.println("使用HTTP协议来作为Web服务的传输协议!");
		System.out.println("已经成功调用。请参看服务端的输出!");

 

 

 

你可能感兴趣的:(service)