HTTPS加密原理
HTTPS传输的加密使用
https在进行内容传输的时候使用的是对称加密
https在进行证书验证阶段使用的是非对称加密
HTTP与HTTPS的区别
- 默认端口,HTTP是80,HTTPS是443
- 传输协议,http是超文本传输协议,属于明文传输;https是安全的超文本传输协议,是经过SSL加密后的传输协议
- 安全性,https使用了TLS/SSL,比http更安全
- 证书,https需要申请ca证书
- HTTPS的加密是在传输层完成的,因为SSL是位于传输层的,TLS的前身是SSL。
HTTP的通信过程
作为标准的C/S模型,http协议总是由客户端发起,服务器进行响应。
- DNS解析,域名系统DNS将域名解析成IP地址
- 建立TCP连接,进行TCP的三次握手
- 浏览器发送请求
- 服务器响应浏览器,向浏览器发送数据
- 通信完成,TCP连接关闭
HTTPS的通信过程
https主要在http的2和3之间,建立了一个加密的连接,这个连接使用了TLS/SSL协议,它是一个安全的传输协议,它的加密使用了对称加密,而不是非对称加密。
通信过程如下 :
- DNS解析,域名系统DNS将域名解析成IP地址
- 客户端和服务器端通过TCP建立连接,并发送https请求。
- 客户端发起TLS握手,向服务端发送
ClientHello
消息,- 客户端支持的SSL/TLS版本
- 客户端支持的加密套件,比如RSA加密算法
- 会话session id,(如果有的值的话,服务器端会复用对应的握手信息,避免短时间内重复握手)
- 客户端随机数,用于生成随机密钥
- 服务器收到
ClientHello
消息,向客户端发送ServerHello
消息- 服务器所能支持的最高SSL/TLS版本
- 服务器选择的加密套件列表,比如RSA加密算法
- 服务器随机数,用于生成随机密钥
- 服务器的ca证书
- 客户端收到
ServerHello
后,会对收到的证书进行验证。包括验证证书机构、有效期等,验证证书的合法性验证 - 验证成功后,Client生成随机数,用于密钥交换过程。客户端会从数字证书中取出服务器的公钥,然后使用它加密报文该随机数,发送到服务器
- 服务器使用私钥解密。获取客户端发送的随机数
- 客户端使用这三个随机数一起计算出对称加密密钥,同理服务端也可以计算出这个加密密钥。客户端和服务端都计算出加密密钥
master secret
- 客户端用
master secret
加密了一条握手完成的消息发送给服务器 - 服务器端也回发了一条用
master secret
加密的握手完成的消息 - 服务器将发送的内容用
master secret
加密,然后发送给客户端 - 客户端使用
master secret
解密收到的消息