zshuangyan / blog

我的个人博客
2 stars 0 forks source link

HTTPS协议 #41

Open zshuangyan opened 5 years ago

zshuangyan commented 5 years ago

背景知识

由于IP层的数据包可以被嗅探到,因此明文传输的数据能够被网络上的嗅探捕获到,因此我们需要对传输的敏感信息进行加密。

加密方法分为两种:对称加密和非对称加密。

对称加密的加密和解密使用的是同个密钥,对称加密的难点在于通信两端怎样安全地交换密钥。例如,一个用户登录界面,前端需要对用户名和密码进行加密后再传输给后端,那么前端怎样获取到加密密钥呢?把密钥写死在前端代码里,那等于告诉所有人你的密钥。

非对称加密有公钥和私钥,加密方使用公钥加密,接收方使用私钥解密。上面例子可以把私钥保存在后端服务器中,公钥放到前端代码中(为了防止私钥泄露,我们可以做成后端以一定频率生成公私钥,前端从后端获取公钥的方式),非对称加密算法中使用最频繁的就是RSA加密算法了,例如git的SSH key.

中间人攻击

假设一种场景:Alice向Bob请求Bob的公钥,John截获了Alice的请求公钥的报文,把自己的公钥发送给Alice,Alice在后续的通信过程中都用John的公钥加密,John截获了Alice的数据报文后就可以使用自己的私钥进行解密了。

解决这个问题的关键在于Alice要证明自己接收到的公钥确实是属于Bob本人的公钥。

非对称加密由于其算法本身计算比较复杂,会浪费大量的cpu资源,如果对每个发送和接收的报文都执行公钥加密和私钥解密,会占用服务器大量的计算资源。

HTTPS工作原理

HTTPS协议是基于TLS/SSL(传输层安全协议)来保护传输的数据的,分为两个阶段:

握手阶段:客户端对服务器进行认证,协商用于对称加密的私钥 通信阶段:保护通信两端传输数据的私密性和完整性

认证过程

回到二十年前,我们怎么确保小贩找给我们的钱是真的的呢?当然是把钱拿到银行去验证啦。这里有一个隐含的知识,就是我银行是权威的,我们每个人都可以相信银行。

在TLS协议中,也有类似银行的权威机构,我们称之为CA(数字证书认证机构),服务器会向CA申请证书,证书内容包括数字签名,服务器的公钥,证书生效时间等信息。

CA证书