HTTPS是HTTP的安全版,即HTTP+SSL/TLS。
HTTPS的全称:Hyper Text Transfer Protocol over Security Socket Layer.
HTTP是超文本传输协议,SSL是加密套接字协议层(Security Socket Layer)。SSL介于应用层和传输层(TCP)之间。应用层的数据流出时经过SSL层变为加密的数据再传到TCP层。反之,数据从TCP层流入时经过SSL层的解密动作后再传给应用层。
SSL分为记录协议和握手协议。
SSL的握手协议原理:
- 客户端(浏览器)发起一个https请求,请求中携带有客户端支持的协议版本列表、加密算法、某个随机数等信息。
- 服务端接收到请求,根据客户端给的信息确定协议版本、加密算法。并将这些随同自身的CA证书、产生的某个随机数、私钥加密的SERVER-HELLO内容、数字签名等返回。
- 客户端接收服务端的响应数据,验证其中返回的CA是否是可信(将返回的CA与客户端预设信任的CA比较),如果不是,会话终止。若CA可信,则继续验证服务端是否可信,若服务端不可信即证书是伪造的,会话终止。若服务端可信,则从证书中获取服务端的public key 对返回的数据解密,当然包括验证数据是否被篡改。再生成一个随机数,联合之前的随机数和加密算法生成一个pre_master_key,接着用服务端的public key对其进行加密发送给服务端。有些会使用pre_master_key加密一段数据一起传给服务端,这是为了做前期加密的正确性的验证。若是服务端要求客户端返回证书,那么也会加上客户端的证书。
- 服务端再次收到客户端的请求,解密返回的数据,得到其中的pre_master_key。若有要求客户端返回证书,则会校验证书的正确性。接着服务端和客户端使用该pre_master_key进行协商,得到master_key。
- 客户端和服务端使用该master_key进行后续的数据传输。
参考
网友评论