一.为什么需要https协议?
http是一种明文字符串传输协议,传输的数据在网络中很容易被人抓包,并不安全,所以涉及隐私信息的传输,就不能使用https协议,而需要一种更加安全的数据传输协议,https应运而生。 https协议并不是一个新的协议,而是在http协议的基础上使用SSL/TLS对报文进行了一层加密,目的是实现数据的安全传输;通过CA认证进行身份认证;使用哈希算法实现了数据的完整性保护的一种协议。
https协议解决的关于http的三大问题:
- 通信使用明文,可能会被窃听;
- 不验证通信方的身份,可能是伪装的中间人;
- 无法证明报文的完整性,内容可能遭篡改。
二.加密方式
1.对称密钥加密(共享密钥加密)
加密和解密使用相同的密钥
优点是加解密效率高,缺点是密钥一旦被劫持则加密形同虚设
2.非对称密钥加密(公开密钥加密)
加密和解密使用不同的密钥,公钥加密的数据只能用私钥解密,私钥加密的数据只能用公钥解密
具体流程: 通信过程中,每一端在通信前都生成一对密钥(公钥和私钥)。在通信前,通过广播形式将公钥发送给对端,对端使用收到的公钥进行数据加密然后传输,收到数据后,本端使用私钥进行解密。
主要算法:RSA加密算法
优点是安全度更高; 缺点是加解密复杂度高,效率低下,耗时长;
非对称加密的用法:私钥签名
3.混合加密(https采取的加密方式)
对称加密的加解密效率高,非对称加密的安全性高,因此采取用非对称加密保护对称密钥的协商过程,这就是混合加密
具体流程是: 通信的一端将自己的对称密钥用对方的公钥进行加密后传输给对方,对方用私钥解密后就得到了对称密钥,之后的数据传输使用就使用对称密钥。
三.身份认证
1.CA证书的申请过程
服务器将自己的公钥和域名等一系列信息发送给权威机构申请一个CA证书; 权威机构会将服务端的公钥、颁发者、有效期等信息也就是证书内容打包并进行哈希运算,计算出一个哈希值; 权威机构用自己的私钥对这个哈希值进行加密,得到证书签名; 最后将证书签名添加到证书中,形成完整的CA证书并返回给服务器;
2.客户端验证服务端身份的过程
客户端向服务端请求CA证书; 服务端将CA证书发送给客户端; 客户端拿到CA证书后,查看权威机构是否是自己信任的权威机构,如果不是,可以自行选择是否添加信任; 通常浏览器和操作系统都集成了权威机构的公钥,因此可以使用权威机构公钥对CA证书中的证书签名进行解密,得到哈希值H1; 客户端使用CA证书中的签名哈希算法计算得到一个哈希值H2; 比较H1和H2是否相等,如果相等则说明证书是可信的,否则证书不可信,可以自行选择是否添加信任;
四.数据的完整性保护
五.https的完整流程
1.服务器请求颁发CA证书
服务器将自己的公钥和域名等一系列信息发送给权威机构申请一个CA证书; 权威机构会将服务端的公钥、颁发者、有效期等信息也就是证书内容打包并进行哈希运算,计算出一个哈希值; 权威机构用自己的私钥对这个哈希值进行加密,得到证书签名; 最后将证书签名添加到证书中,形成完整的CA证书并返回给服务器; 服务器将CA证书保存到本地;
2.TLS握手
- 客户端向服务端打招呼:
客户端向服务端发送自己支持的TLS版本、加密套件和一个随机数(称为第一随机数); - 服务端向客户端打招呼:
服务端收到客户端的信息后,向客户端发送自己支持的TLS版本、并从客户端发送的加密套件中选择自己支持的一个、一个随机数(称为第二随机数); 服务端向客户端继续发送自己的CA证书; - 服务端向客户端发送Server Hello Done报文,告诉客户端:服务端打招呼结束;
- 客户端验证服务端身份信息:
客户端拿到CA证书后,查看权威机构是否是自己信任的权威机构,如果不是,可以自行选择是否添加信任; 通常浏览器和操作系统都集成了权威机构的公钥,因此可以使用权威机构公钥对CA证书中的证书签名进行解密,得到哈希值H1; 客户端使用CA证书中的签名哈希算法计算得到一个哈希值H2; 比较H1和H2是否相等,如果相等则说明证书是可信的,否则证书不可信,可以自行选择是否添加信任; - 客户端生成一个随机数(称之为预主密钥),使用服务端的公钥加密,将加密后的数据发送给服务端;
- 服务端收到数据后使用私钥解密,得到预主密钥,并和第一随机数、第二随机数结合一起生成会话密钥;客户端也采用同样的算法生成会话密钥。往后的数据传输就是用会话密钥进行加密,会话密钥是一种对称密钥。
3.数据加密传输
使用会话密钥加解密数据进行通信。
|