这是我参与「第五届青训营」伴学笔记创作活动的第6天
前言
网络请求分为两种,HTTP请求和HTTPS请求。两者都是超文本传输协议。然而HTTP的安全性一直是个大问题,使用明文传输,在传输过程中几乎相当于“裸奔”,所以需要一种办法来进行加密,因此便诞生了HTTPS。
什么是HTTPS
HTTPS(Hypertext Transfer Protocol Secure) 是一种在HTTP的基础上加了安全协议(SSL/TLS)的较安全的超文本传输协议,其传输内容是通过加密得到的,一般用于需要保密性较高的通信。
SSL:安全套接字层,位于可靠的面向连接的网络层协议。SSL通过互相认证、使用数字签名确保完整性、使用加密确保私密性,以实现客户端和服务器之间的安全通讯。具有数据加密和身份验证的功能。
TLS:安全传输层协议、对SSL扩展和优化,提供数据安全的同时,确保数据的完整性。
加密方式
认识加密方式之前,需要先了解以下概念:
密钥:对称加密设置的密码
公钥:公钥用于加密信息和解密数字签名
私钥:私钥用于解密信息和加密消息摘要
消息摘要:对消息使用HASH算法获取的固定长度的字符串
数字签名:使用私钥加密的消息摘要
数字证书:CA用自己的私钥,对需要认证的公钥及相关的信息进行加密
1、对称加密:
私钥加密,加密和解密都是使用同一个密钥
2、非对称加密:
加密和解密需要使用两把不同的密钥:公钥和私钥 非对称加密有两种情形: (1)对方用公钥加密信息,你用私钥解开。 (2)你拿私钥加密信息,对方收到后用你的公钥解开。 (公钥是公开的,私钥是你私有的) 但是这样的非对称加密仍有缺陷,窃听者完全可以冒充Client给客户端发送请求,由于公钥是公开的没见无法分辨哪个是真Client的请求。
3、数字签名:
为保证信息确实由真Client发出,可以使用数字签名。
如Client用自己的私钥对消息加密作为签名,然后与消息一起发送,接收者用公钥接收即可。只要私钥不泄露,签名就不会被冒充。
但是数字签名只是能验证发送方身份,未对报文进行加密。窃听者截取到密文并指定发送者的身份时,可通过查阅手册即可获得发送者的公钥PKA,就可以窃听报文的内容。
4、数字证书
发送方可以去证书中心CA为公钥做认证,CA用自己的私钥,对需要加密的公钥和一些相关信息一起加密,生成"数字证书"。
这样的话,接收方就可以防止收到假的公钥,用CA的公钥先解开数字证书,就可以拿到真实的公钥了。
HTTPS加密流程
数据正文数据量较大,适用于对称加密,因为对称加密速度快,适用于大量数据加密,但是安全级别低,密钥在网络中传输的过程中容易被窃取,所以对这个密钥进行非对称加密。最后由于非对称加密的公钥在网络中传输,保证接收方接收到正确的公钥,使用证书验证:
1、客户端发送HTTPS请求。
2、服务器收到请求后,返回数字证书(数字签名+公钥)。
3、客户端验证证书是否合法(用服务端的公钥验签),不合法则提示警告。
4、验证合法后,本地生成密钥(对称加密密钥)并用服务端的提供的公钥加密后发送给服务端。
5、服务端用自己的私钥对数据解密,得到客户端密钥(对称加密密钥),再用客户端密钥对要发送的数据进行加密后发给客户端。
总结
发送https请求后,先验证数字证书是否合法,再生成本地密钥 (对称密钥),使用服务端公钥加密对称密钥再发送服务端;服务端通过私钥解密后,取得对称密钥。之后就可以数据传输了,服务端用对称密钥对请求数据加密,发送给客户端,客户端收到后用对称密钥解密拿到明文。
参考文章https详解