SSL(Security Socket Layer)是广泛使用的一种通信加密方式。它主要利用PKI和数字证书来实现通信双方的身份认证以及通信数据的加密传输。SSL提供单向与双向两种认证模式。
双向认证:客户端和服务器之间向彼此发送自身身份证书从而实现通信双方的身份认证。但是客户端证书造价较高,且对于服务器而言在认证过程中不易获取,因此大多数应用都采用单项认证的方式。
单向认证:只认证服务器,服务器将身份证书发送给客户端,而不要求客户端发送自身身份证书。 将客户端的认证部署到应用层,大多以 用户名/密码 的形式完成。
1.基础知识
PKI:公钥基础设施,利用公钥加密技术为电子商务的开展提供一套安全基础平台的技术和规范。解决了对称加密中秘钥安全保存、传输的问题,采用非对称加密的方式,秘钥以 公钥/私钥 对的形式存在。公钥加密的信息只有与其对应的私钥才能解密,反之私钥加密公钥解密。
数字证书:数字证书作为身份凭证,起到保证远程计算机的身份以及向远程计算机证明客户端的身份的作用。主要包括如下图所示的信息:
每一个证书绑定一个唯一的公钥,拥有者将含有自身公钥的证书发送给对方,约定现阶段双方之间的通信信息利用此公钥进行加密,之后利用自身私钥对加密后的信息进行解密。
2.SSL单向认证
单向认证中,服务器发送自身证书给客户端来完成自身认证,客户端不必发送自身证书。因此在认证之前,需要先为服务器签发身份证书。
在java里,可以使用keytool命令来生成证书。但是这个证书还需要在客户端的受信列表里。这个不难理解,和取款类似,总得有一个受信任的凭证。因此还需将这个服务器证书加入到客户端存放信任的证书的仓库,这个证书仓库就是keystore。具体过程如下:【此处命令及java代码参考http://www.iteye.com/topic/1125183,有改动】
1.生成服务器证书
在命令行输入以下命令:
- keytool -genkey -v -alias bluedash-ssl-demo-server -keyalg RSA -keystore ./server_ks -dname "CN=localhost,OU=cn,O=cn,L=cn,ST=cn,C=cn" -storepass server -keypass 123123
生成名为:
bluedash-ssl-demo-server的服务器证书,保存在serverkeystore里,进入serverkeystore的密码是server,使用证书的密码是123123.
结果如图:
2.将服务器证书加入到客户端的keystore里。
此时需要先为客户端创建一个keystore,然后导入服务端证书。
2.1在命令行输入如下命令,为客户端创建证书及仓库。
- keytool -genkey -v -alias bluedash-ssl-demo-client -keyalg RSA -keystore ./client_ks -dname "CN=localhost,OU=cn,O=cn,L=cn,ST=cn,C=cn" -storepass client -keypass 456456

本文详细介绍了如何在Eclipse环境下使用Java实现SSL单向和双向认证。首先讲解了SSL的基础知识,包括证书的生成和导入。然后通过Java代码展示了SSL单向认证的实现,包括设置信任库、创建SSL连接等步骤。接着,文章深入讨论了SSL双向认证,强调了客户端身份验证的重要性,并提供了相应的Java实现代码。文章最后总结了证书与keystore的关系以及认证过程。
最低0.47元/天 解锁文章
944

被折叠的 条评论
为什么被折叠?



