Java安全Socket扩展(JSSE)可以使用安全Socket层(SSL)版本3和传输层安全(TLS)协议及相关算法来保护网络通信的安全。SSL可以提供各级机密和认证功能,前者依靠密钥,后者依靠证书。同普通Socket类似,SSLSocket对象构建客户端安全套接字流程,而SSLServerSocket对象构建服务端安全套接字流程,用户调用两者的通信接口同普通Socket大体一致;与普通Socket不同的是,SSL**需要控制身份认证和加密行为,但是做法很简单,配置支持的密码组(CipherSuites)即可。
下面首先介绍使用Java工具keytool生成公钥和证书的方法:
1. 生成服务端私钥server.keys
keytool -genkey -alias serverkey -keystore server.keys
2. 从服务端私钥导出服务端证书server.crt
keytool -export -alias serverkey -keystore server.keys -file server.crt
3. 将服务端证书导入到客户端KeyStore,即client.keys
keytool -import -alias serverkey -file server.crt -keystore client.keys
以上利用keytool只生成了服务端的证书和密钥,这和大多数web服务一致,仅需要单方面认证身份即可,往往服务端需要向客户端证明自身身份,客户端并不需要。现在客户端利用client.keys来对服务端进行身份验证和数据加/解密,服务端利用server.keys来对数据加/解密。下面提供SSL通信服务端和客户端的示例代码:
SSLServer.java
,SSL服务端:
import ja