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

上回书说到...书接上回,现在介绍第二种实现方式:Server端和Client端各自拥有自签名的私有密钥证书,并且互相交换公钥,通过对方公钥互相信认对方证书。

1.创建Server端KeyStore文件serverKeys.jks,包含一个用于服务器的证书 :
[quote]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 [/quote]
2.导出服务端公钥证书
[quote]keytool -export -alias server -keystore serverKeys.jks -file server.cer -storepass 123456[/quote]
3.创建Client端KeyStore文件clientKeys.jks,分别包含用于虚构的通信者 Alice 和 Bob 的证书 :
[quote]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[/quote]
4.导出客户端 Alice和 Bob公钥证书
[quote]keytool -export -alias alice -keystore clientKeys.jks -file alice.cer -storepass 123456

keytool -export -alias bob -keystore clientKeys.jks -file bob.cer -storepass 123456[/quote]
5.创建服务端KeyStore文件serverTrust.jks并导入客户端 Alice和 Bob公钥证书
[quote]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[/quote]
6.创建客户端KeyStore文件clientTurst.jks并导入服务端公钥证书
[quote]keytool -import -alias server -keystore clientTrust.jks -file server.cer -keypass 123456 -storepass 123456[/quote]

这样我们就得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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值