Https通信介绍
1、 Https通信介绍
Https 即安全的超文本传输协议,最初是由网景公司创建,Https在Http上面提供了一个传输级的安全层,目前安全层所用的协议是SSL(Secure Socket Layer)和其继任者TLS(Transport Layer Security),SSL是一个比较复杂的协议,已有商用和开源的实现版本,例如OpenSSL。所有Http请求和响应数据在传输到网络前都由安全层进行加密,如下图是Https和Http的网络协议层。
客服端与服务器在建立连接前,需要进行握手,握手过程可分为单向和双向认证两类。
(1) 单向认证
客服端只对服务端身份进行认证,具体认证过程如下图:
(2) 双向认证
客服端不仅对服务端身份进行认证,同时服务端也需要客服端发送自己的身份信息,对客服端进行认证,具体认证过程如下图:
2、JSSE介绍
JSEE 全称Java Secure Socket Extension,提供了一个java版本的SSL 协议的框架和实现,包括数据加密、服务器认证、消息完整性校验及可选的客服端认证等功能。Java应用程序可以借助JSEE,方便地实现Https通信。
在JSEE API中,连接的端点类是SSLSocket和 SSLEngine,下图展示了用于创建SSLSocket和SSLEngine的类:
了解socket编程的朋友,从图中应该很容易看出,客服端所用的SSLSocket由SSLSocketFactory创建,服务器用的SSLServerSocket由SSLServerSocketFactory创建,这两个factory由SSLContext创建,SSLContext对象创建后需要用KeyManger、TrustManger、SecureRandom进行初始化,分别对本文用到的几个类说明下,对其他类有兴趣的可以参考oracle JSSE官方文档。
SSLSocket:继承java网络编程中Socket的作用,应用程序通过SSLSocket完成SSL握手、通信数据的收发等;
SSLEngine:类同SSLSocket,比SSLSocket功能更强大,SSLSocket提供的是阻塞IO模型,SSLEngine能提供非阻塞的IO模型;
KeyManger:用于管理**、证书等,通信的一端通过KeyManager获取**、证书传递给通信对方,对方验证证书获取**;
TrustManger:用于管理信任材料,用于验证通信对等方的身份,传递的证书是否合法;
转自:https://www.jianshu.com/p/b414ec8acf43