HTTPS的加密原理
一、HTTPS和HTTP的区别
HTTPS协议 = HTTP协议 + SSL/TLS协议
SSL的全称是Secure Sockets Layer,即安全套接层协议,是为网络通信提供安全及数据完整性的一种安全协议。TLS的全称是Transport Layer Security,即安全传输层协议。
即HTTPS是安全的HTTP。
二、HTTPS的连接建立流程
HTTPS为了兼顾安全与效率,同时使用了对称加密和非对称加密。在传输的过程中会涉及到三个密钥:
- 服务器端的公钥和私钥,用来进行
非对称加密
- 客户端生成的随机密钥,用来进行
对称加密
如上图,HTTPS连接过程大致可分为八步:
1、客户端访问HTTPS连接。
客户端会把安全协议版本号
、客户端支持的加密算法列表、随机数C
发给服务端。
2、服务端发送证书给客户端
服务端接收密钥算法配件后,会和自己支持的加密算法列表进行比对,如果不符合,则断开连接。否则,服务端会在该算法列表中,选择一种对称算法(如AES)、一种公钥算法(如具有特定秘钥长度的RSA)和一种MAC算法发给客户端。
服务器端有一个密钥对,即公钥
和私钥
,是用来进行非对称加密
使用的,服务器端保存着私钥
,不能将其泄露,公钥
可以发送给任何人。
在发送加密算法的同时还会把数字证书
和随机数S
发送给客户端
3、客户端验证server证书
会对server公钥进行检查,验证其合法性,如果发现发现公钥有问题,那么HTTPS传输就无法继续。
4、客户端组装会话秘钥
如果公钥合格,那么客户端会用服务器公钥来生成一个预主秘钥
(Pre-Master Secret,PMS),并通过该预主秘钥
和随机数C、S来组装成会话秘钥
5、客户端将预主秘钥加密发送给服务端
是通过服务端的公钥来对预主秘钥
进行非对称加密
,发送给服务端
6、服务端通过私钥解密得到预主秘钥
服务端接收到加密信息后,用私钥解密得到预主秘钥。
7、服务端组装会话秘钥
服务端通过预主秘钥
和随机数C、S来组装会话秘钥
。
至此,服务端和客户端都已经知道了用于此次会话的主秘钥。
8、数据传输
客户端收到服务器发送来的密文,用客户端密钥对其进行对称解密,得到服务器发送的数据。
同理,服务端收到客户端发送来的密文,用服务端密钥对其进行对称解密,得到客户端发送的数据。
总结:
会话秘钥
= random S + random C + 预主秘钥
-
HTTPS连接建立过程使用
非对称加密
,而非对称加密
是很耗时的一种加密方式 -
后续通信过程使用
对称加密
,减少耗时所带来的性能损耗 -
其中,
对称加密
加密的是实际的数据,非对称加密
加密的是对称加密所需要的客户端的密钥。
三、对称加密和非对称加密
1、对称加密
用同一套密钥来进行加密解密。
对称加密通常有 DES,IDEA,3DES 加密算法。
2、非对称加密
用公钥和私钥来加解密的算法。
公钥
(Public Key)与私钥
(Private Key)是通过一种算法得到的一个密钥对(即一个公钥
和一个私钥
),公钥
是密钥对中公开的部分,私钥
则是非公开的部分,私钥
通常是保存在本地。
-
用
公钥
进行加密,就要用私钥
进行解密;反之,用私钥
加密,就要用公钥
进行解密(数字签名)。 -
由于私钥是保存在本地的,所以
非对称加密
相对与对称加密
是安全的。
但非对称加密
比对称加密
耗时(100倍以上),所以通常要结合对称加密
来使用。
常见的非对称加密算法有:RSA、ECC(移动设备用)、Diffie-Hellman、El Gamal、DSA(数字签名用)
而为了确保客户端能够确认公钥就是想要访问的网站的公钥,引入了数字证书的概念,由于证书存在一级一级的签发过程,所以就出现了证书链,在证书链中的顶端的就是根CA。
所谓的认证即确认对方身份,单向认证一般是指客户端确认服务端身份,双向认证则是指在客户端需要确认服务端身份的同时,服务端也需要确认客户端的身份。
单向认证
双向认证