Java实现HTTPS通讯
Https协议用于在保密性要求高的环境中。
Https基于Http协议,在Http协议中加了一层封装,加入SSL/TLS协议。
使用SSL会用到JSSE(Java Secure Socket Extension),JSSE对Java访问SSL和TLS协议都做了封装。
图 1. JSSE相关类之间的关系
安全套接字程序编写的方法
使用 Java 编写安全套接字程序,可以遵循一定的方法,如图 1 所示,展示了相关的各个类之间的关系。其中 Keystore、KeyManagerFactory、TrustManagerFactory、SSLContext 可以称之为“引擎类”(engine class),对它们指定特定的参数 ( 例如:协议、算法等 ),就可以产生符合我们要求的,用于编程的对象实例。
编程的步骤可以简单的小结为以下几步:
1. 使用 Keystore 类将证书库或信任库文件加载进来;
2. 使用 KeyManagerFactory 和加载了证书库的 Keystore 实例,产生 KeyManager 实例数组;
3. 使用 TrustManagerFactory 和加载了信任库的 Keystore 实例,产生 TrustManager 实例数组;
4. 使用 SSLContext 初始化 KeyManager 实例数组和 TrustManager 实例数组,从而设定好通信的环境。
5. 利用 SSLContext 产生的 SSLSocket 或 SSLServerSocket 进行通信。
SSL认证
分为单向认证和双向认证。
单向认证是客户端信任服务端,双向认证是客户端既要信任服务端而且服务端也要信任客户端。
不管是客户端还是服务端,都要存以下两样keystore。
KeyStore:保存自己的公钥和私钥。
Trust KeyStore:保存对方的公钥证书。
如果是单向认证,服务器端的KeyStore存储自己的公钥和私钥,客户端的Trust KeyStore要导入服务器端的公钥证书。
如果是双向认证,在上面的基础上,客户端的KeyStore存储自己的公钥和私钥,服务器端的Trust KeyStore要导入客户端的公钥证书。