https与http的区别
-
原理是,https是在应用层与传输层,也就是HTTP和TCP协议之间加了一层TLS协议。
-
结果是,https传输的数据是经过对称加密的以及完整性保护的,并且双方是经过身份认证的
TLS协议分层
协议主要有,语法语义和时序组成
1.1 handshake protocol
完成算法协商,密钥协商和身份认证
1.2 changeCipherSpec protocol
发现号给通信对端,表示要切换到新协商的密码套件
1.3 Alert Protocol
传递警告
1.4 Application data protocol
给 record层提供数据
2 TLS record protocol
基于握手阶段确定的参数和算法,提供数据的保密性和完整性保护 分片,压缩,加密,MAC
handshake阶段
client->server: 密码套件,压缩方式清单,客户端随机数 server->client:
- 选择密码套件和压缩方式,以及服务端随机数。
- 然后发送server端的证书
- 确定密钥交换算法,分为RSA方式(发送公钥)和Diffie-Hellman方(发送公开的数)
- 请求client端证书
client->server:
-
发送客户端证书
-
如果是RSA进行密钥交换,客户端生成一个随机数作为pre_master_key,并用服务端公钥加密后发送给服务端,如果的DH方式,客户端和服务端各生成一个公开数和私有数,双方将自己的私有数与对方的公开数进行指数运算即可生成相同值,即为pre_master_key。客户端随机数,服务端随机数与pre_master_key,共同生成masterkey,然后主密钥再分片为消息认证码密钥,对称密钥以及CBC模式的初始化向量
-
当服务器要求客户端身份认证时,客户端会发送从开始到当前阶段所有消息的数字签名,以证明自己的身份
-
发送握手finish消息,告诉服务端握手结束,消息此时就开始用密文发送,包含之前所有handshake消息组合的hash值
握手阶段完整流程图