1. tomcat 配置 单向 SSL



   <Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol"                             SSLEnabled="true"

               maxThreads="150" scheme="https" secure="true"

               clientAuth="false" sslProtocol="TLS" 

  keystoreFile="D:/tomcat.keystore" 

  keystorePass="password"

  />


         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,然后导入服务端的公钥证书。