萨尔法保护 发表于 2018-12-3 11:40:40

ssl单向tomcat配置webservice访问方法


[*]  tomcat 配置 单向 SSL
  

  

  
  

  tomcat.keystore里面包含一张服务端证书的容器,用keytool工具生成。
  

  服务端配置完毕
  

  将tomcat.keystore里面的 服务端公钥证书导出   client.cer
  创建一个信任证书库 将服务端公钥证书导入 ,在客户端加载信任库
  

Keytool -import -alias yangjm -file d://client.cer -keystore client.jks
输入信任库密码: password


客户端程序 执行
  System.setProperty("javax.net.ssl.trustStore", "D://client.jks");
  System.setProperty("javax.net.ssl.trustStorePassword","password");
  添加信任库向服务端发送
  

  报错异常
  Caused by: javax.net.ssl.SSLKeyException: RSA premaster secret error
  

  将D:\java\jre6\lib\ext 的 sunjce_provider.jar 拷到运行环境 运行通过
  

  

  客户端代码:
  

public static void test1() {
//System.setProperty("java.protocol.handler.pkgs",
//"com.sun.net.ssl.internal.www.protocol");
//System.setProperty("java.protocol.handler.pkgs",
//"com.ibm.net.ssl.internal.www.protocol");
System.setProperty("javax.net.ssl.trustStore", "D://client.jks");
System.setProperty("javax.net.ssl.trustStorePassword",
"password");
URL url = null;
try {
url = new URL(
"https://localhost:8443/VerifyInfoService/services/itrusservice?wsdl");
} catch (MalformedURLException e) {
e.printStackTrace();
}
// 1.Qnameqname是qualified name 的简写
// 2.构成:由名字空间(namespace)前缀(prefix)以及冒号(:),还有一个元素名称构成
// 由发布的wsdl可知namespace为http://server.ws.platform.whaty.com/
QName qname = new QName("http://itrus.com/itrusservice", "itrusservice");
Service service = Service.create(url, qname);
ItrusservicePortType ms = (ItrusservicePortType) service
.getPort(ItrusservicePortType.class);
System.out.println(ms.test("tseet..."));
}运行结果tseet...
  

  

1 SSL单向认证概念
  当客户端(服务请求方)向服务端(服务提供方)发起请求时,服务器端需要向客户端提供认证。服务端需要生成一个keystore和一个服务器密钥对儿(公钥和私钥),客户端需要生成一个truststore,然后导入服务端的公钥证书。
  




页: [1]
查看完整版本: ssl单向tomcat配置webservice访问方法