HTTPS
https全称(Hyper Text Transfer Protocol over Secure Socket Layer 或 Hypertext Transfer Protocol Secure,超文本传输安全协议),简单来说它是http的安全版,即http加入SSL层,https的安全基础就是SSL,它是一个URL。用于安全的http(文本)数据传输
https涉及到的主题
1、客服端如(IE、chrome、)自己编写的客户端程序
2、服务端,指支持https访问的网站 如 百度、阿里
3、CA(Certificate Authorities)机构。Https证书签发和管理机构,比如Symantec、Comodo、GoDaddy、GlobalSign。
为什么使用https?
https保证了数据传输的私密性、安全性、完整性。因为http是明文传输,如果我们用它进行传输。
就会被一些不法人员使用网络的抓包具进行拦截如wireShark。那么很有可能我们的个人隐私、支付信息…都会被泄露掉,甚至信息被篡改。所以今天的我们,将自己的敏感信息进行传播的时候,就不用担心这个问题了
https的工作流程
1、初始化阶段。
Clienthello
客户端创建随机数,发送Client,Hello将随机数连同自己支持的协议版本、加密算
法和压缩算法发给服务器。服务器回复ServerHello将自己生成的随机数连同选择
的协议版本、加密算法和压缩算法给客户端
这个是用wireshark的一个工具、进行网络抓包,可以清楚看见客户端与服务端的一个交互
另外我们还可以看见里面的详细信息
不难看出这里面分别包含了:
1.版本信息(TLS 1.2)
2.随机数
3.Session ID(用于加快握手过程)
4.加密套
5.压缩算法
同样我们的服务端也会做出一个回应:Serverhello![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/6b86bdd08d26441632cc3675489a050d.png)
2.认证阶段 Certificate。
服务器发送Server Hello的同时可能将包含自己公钥的证书发送给客户端,并请求客户端的证书
上面的Server Hello已经制定了接下来的非对称加密算法
服务端下发证书,客户端验证服务端身份,并且取出证书携带的公钥,这个公钥是交换加密算法的公钥。也就是在Server Hello阶段指定(EC Diffie-Hellman)算法,也是通常说的DH加密。
接着服务端会发送:Server hello Done
这个Server Hello Done ,就像TCP协议的ACK确认包已将,服务端也给了个确认的信息,通知客户端已经做好进入下一个阶段的准备。
3.密钥协商阶段。
客户端验证证书,如果收到Certificate Request则发送包含自己公钥的证书,同时对此前所有握手信息进行散列运算,并使用加密算法进行加密发送给服务器。同时创建随机数pre-master-secret使用服务器公钥进行加密发送。服务器收到ClientKeyExchange之后解密得到pre-master-secret。服务器和客户端利用1阶段的随机数,能够计算得出master-secret。
Client Key Exchange
这里,客户端不直接生成加密密钥,而是通过之前客户端和服务端生成的随机数又再生成一个随机数,使用前面协商好的用 EC Diffie-Hellman 算法进行加密传输给服务端。这个值又被称为 “premaster secret“。
服务端收到这个报文之后,会使用私钥解开这个随机数
4.握手终止。
服务器和客户端分别通过ChangeCipherSpec消息告知使用master-secret对连接进行加密和解密,并向对方发送终止信息(Finshed)。
Change Cipher Spec(Client)
客户端通知服务端,咱俩可以进行密文传输了。
Encrypted Handshake Message(Client)
这里就是客户端的 Client Finished 消息。
也是整个 SSL 过程中,发送给服务端的第一个加密消息。
服务端接收后,服务端用同样的方式计算出已交互的握手消息的摘要,与用主密钥解密后的消息进行对比,一致的话,说明两端生成的主密钥一致,完成了密钥交换
Change Cipher Spec(Server)
服务端通知客户端,OK,咱俩后续的报文将会被加密。
Encrypted Handshake Message(Server)
这里就是服务端的 Server Finish 消息。
和上面的客户端的 Encrypted Handshake Message 一样,是服务端发出的第一条加密信息。
客户端按照协商好的主密钥解密并验证正确后,SSL 握手阶段完成。
对于目前的技术来讲HTTPS还是相对可靠的:如百度、阿里…所以我们将敏感信息进行传送的时候,足以看出https对我们的重要性!
Jason_Gu