最近公司在上SSL双向强认证。国外叫Mutual Authentication. 也就是除了服务端的的SSL证书, 客户端也必须有自己的P12 证书, 实现双向认证。

这里是服务端的设置:

 

System.setProperty("javax.net.ssl.keyStore", "ssl/server_keystore");
System.setProperty("javax.net.ssl.keyStorePassword", "server_keystore");
System.setProperty("javax.net.ssl.trustStore", "ssl/server_truststore");
System.setProperty("javax.net.ssl.trustStorePassword", "server_truststore");

这里分别需要2个文件, 都是Keystore, 下面来看看trust 里信任的证书如何:

 SSL双向认证的证书详解

好吧, 这里有Client 端所有的证书, 如steve, obama 等, 都是CA 发的。

下面来看看客户端的证书文件,

System.setProperty("javax.net.ssl.keyStore", "ssl/" + username);
System.setProperty("javax.net.ssl.keyStorePassword", password);
System.setProperty("javax.net.ssl.trustStore", "ssl/client_truststore");
System.setProperty("javax.net.ssl.trustStorePassword", "client_truststore");

除了每个用户自身的P12文件, 那么再看看Client 端的Trust证书:

SSL双向认证的证书详解


这样, Server 和 Client 互相在对方的受信列表里。 运行起来结果如下:

Username: Obama
Password: ThankYou
Welcome Obama, you are authenticated!

注意这个密码是Keystore的密码, 并不是用户密码, 采用的非对称技术。 

不知道什么是密码学里的非对称技术? 参考九州云腾的网站, https://ci.idsmanager.com:8888/EDES/  上面可以实时生成证书, 真心不错, 实践比大学里的课本重要多了!



 

相关文章: