今天我们说https具体工作原理。
HTTPS概念
HTTPS是一种网络协议,传统的HTTP是明文传输,非常 不安全,所以HTTPS是基于HTTP基础上进行加密传输内容。
HTTPS使用加密传输方式
第一种是非对称加密,是前期建立连接时候使用的数据加密方式。这种加密方式必须有公钥key和私密key。
第二种是对称加密,是后期进行数据传输的加密方式 。
非对称加密与对称加密方式对比,需要消耗大量计算机资源。
HTTPS通讯流程
上面是HHTPS加密流程,下面详细讲解:
1.第一步建立TCP连接,使用三次握手。
2.由客户端发起请求。这一步,客户端主要向服务器发送以下信息:
(1)客户端支持SSL/TLS协议版本,如 TLS1.2版本。
(2)客户端产生一个随机数,用于后面生产会话秘钥。
(3)客户端支持的加密算法列表,例如RSA加密算法。
3.服务器收到客户端请求后,向客户端发出响应,有以下内容。
(1)确认SSL/TLS版本,如果浏览器不支持,就关闭加密通道。
(2)服务器产生随机数,用于后面用于生产会话秘钥。
(3)确认密码加密列表
(4) 准备服务器的数字证书
4.客户端回应
客户端收到服务器的回应之后,首先通过浏览器或者操作系统中的 CA 公钥,确认服务器的数字证书的真实性。
如果证书验证没有问题,客户端会从数字数字钟去除服务器的公钥,然后进行加密,向服务器发送以下信息:
(1)一个随机数(pre-master key)。该随机数会被服务器公钥加密。
(2)加密通信算法改变通知,表示随后的信息都将用「会话秘钥」加密通信。
(3)客户端握手结束通知,表示客户端的握手阶段已经结束。这一项同时把之前所有内容的发生的数据做个摘要,用来供服务端校验。
3.客户端回应
客户端收到服务器的回应之后,首先通过浏览器或者操作系统中的 CA 公钥,确认服务器的数字证书的真实性。
如果证书没有问题,客户端会从数字证书中取出服务器的公钥,然后使用它加密报文,向服务器发送如下信息:
(1)一个随机数(pre-master key)。该随机数会被服务器公钥加密。
(2)加密通信算法改变通知,表示随后的信息都将用「会话秘钥」加密通信。
(3)客户端握手结束通知,表示客户端的握手阶段已经结束。这一项同时把之前所有内容的发生的数据做个摘要,用来供服务端校验。
上面第一项的随机数是整个握手阶段的第三个随机数,这样服务器和客户端就同时有三个随机数,接着就用双方协商的加密算法,各自生成本次通信的「会话秘钥」。
4.服务器的最后回应
服务器收到客户端的第三个随机数(pre-master key)之后,通过协商的加密算法,计算出本次通信的「会话秘钥」。然后,向客户端发生最后的信息:
(1)加密通信算法改变通知,表示随后的信息都将用「会话秘钥」加密通信。
(2)服务器握手结束通知,表示服务器的握手阶段已经结束。这一项同时把之前所有内容的发生的数据做个摘要,用来供客户端校验。
至此,整个SSL/TLS握手阶段结束。接下来根据会话秘钥进行加密通信。
证书验证
这个"证书"不是一个"纸质"的证书,而是一串数据(类似于一个对象,里面有很多属性),是数字证书,包括以下属性:
1.服务器的URL
2.证书的过期时间
3.颁发证书的机构
4.服务器自己的公钥pub
加密的签名(先对证书的所有数据计算一个校验和,然后由证书自己的私钥pri对签名进行加密)
…
客户端拿到证书后,首先会对证书进行校验:
1.得到初始签名:通过由证书提供的公钥对签名进行解密,拿到初始签名,记为sum1
2.计算现在的签名:客服端使用同样的签名算法,基于证书的所有属性,计算签名sum2
3.比较两个签名是否相同,如果相同,说明证书的内容没有被篡改,如果不相同,说明证书的内容被篡改了,此时客户端的浏览器会弹窗报错!!!
为什么说黑客改变不了加密证书内容
1.黑客将证书中服务器的公钥秘钥A改成自己的公钥秘钥B
2.黑客针对证书的各种属性重新计算签名
3.黑客将证书的内容重新加密,但黑客是不知道证书的私钥A的,所以无法进行加密。(此处是关键,黑客并不是"看不到",而是"改不了")