论坛首页 Java企业应用论坛

在mina中实现TSL/SSL双向认证连接(2)

浏览 3113 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2010-01-25   最后修改:2010-01-30
上回书说到...书接上回,现在介绍第二种实现方式:Server端和Client端各自拥有自签名的私有密钥证书,并且互相交换公钥,通过对方公钥互相信认对方证书。

1.创建Server端KeyStore文件serverKeys.jks,包含一个用于服务器的证书 :
引用
keytool -genkey -alias server -keysize 1024 -validity 3650 -keyalg RSA -dname "CN=sundoctor.com, OU=Developer,O=Techstar, L=Beijing, S=Beijing, C=CH" -keypass 123456 -storepass 123456 -keystore serverKeys.jks

2.导出服务端公钥证书
引用
keytool -export -alias server -keystore serverKeys.jks -file server.cer  -storepass 123456

3.创建Client端KeyStore文件clientKeys.jks,分别包含用于虚构的通信者 Alice 和 Bob 的证书 :
引用
keytool -genkey -alias alice -keysize 1024 -validity 3650 -keyalg RSA -dname "CN=Aclie, OU=Developer,O=Techstar, L=Beijing, S=Beijing, C=CH" -keypass 123456 -storepass 123456 -keystore clientKeys.jks

keytool -genkey -alias bob -keysize 1024 -validity 3650 -keyalg RSA -dname "CN=Bob, OU=Developer,O=Techstar, L=Beijing, S=Beijing, C=CH" -keypass 123456 -storepass 123456 -keystore clientKeys.jks

4.导出客户端 Alice和 Bob公钥证书
引用
keytool -export -alias alice -keystore clientKeys.jks -file alice.cer -storepass 123456

keytool -export -alias bob -keystore clientKeys.jks -file bob.cer   -storepass 123456

5.创建服务端KeyStore文件serverTrust.jks并导入客户端 Alice和 Bob公钥证书
引用
keytool -import -alias alice -keystore serverTrust.jks -file alice.cer -keypass 123456 -storepass 123456

keytool -import -alias bob -keystore serverTrust.jks -file bob.cer -keypass 123456 -storepass 123456

6.创建客户端KeyStore文件clientTurst.jks并导入服务端公钥证书
引用
keytool -import -alias server -keystore clientTrust.jks -file server.cer -keypass 123456 -storepass 123456


这样我们就得clientKeys.jks、clientTrust.jks、serverKeys.jks、serverTrust.jks四个KeyStore文件。

这里与第一种方式不同的地方就是不再需要BogusTrustManagerFactory类,初始化客户端和服务端的SSLContext时TrustManager分别采用 clientTrust.jks和serverTrust.jks,KeyManager和第一种方式一样。
protected static TrustManager[] getTrustManagers(String trustfile,String pasword) throws IOException, GeneralSecurityException {
		// First, get the default TrustManagerFactory.
		TrustManagerFactory tmFact = TrustManagerFactory.getInstance(TRUST_MANAGER_FACTORY_ALGORITHM);

		// Next, set up the TrustStore to use. We need to load the file into
		// a KeyStore instance.		
		InputStream in = BogusSslContextFactory.class.getResourceAsStream(trustfile);
		KeyStore ks = KeyStore.getInstance("jks");
		ks.load(in, pasword.toCharArray());
		in.close();

		// Now we initialise the TrustManagerFactory with this KeyStore
		tmFact.init(ks);

		// And now get the TrustManagers
		TrustManager[] tms = tmFact.getTrustManagers();
		return tms;
	}
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics