HTTPS

https为什么安全?因为相对http的明文传输,https引入了数据加密和身份认证。服务器和客户端的消息只有服务器和客户端能够读懂,保证了数据的保密性。同时在交换数据之前,验证了对方的合法身份,保证了通信双方的安全。这篇总结主要记录了在理解https安全性的过程中遇到的问题。

0x01 什么是对称加密和非对称加密

在https的协议中如何实现数据加密和身份认证呢?简单来说是客户端先获取非对称加密的公钥,通过公钥和服务器协商生成对称加密的对称密钥,并使用对称密钥加密传输数据。

1.1 对称加密

什么是对称加密:加密和解密使用相同密钥的算法。它要求发送方和接收方在安全通信之前,商定一个对称密钥。对称算法的安全性完全依赖于密钥,密钥泄漏就意味着任何人都可以对他们发送或接收的消息解密,所以密钥的保密性对通信至关重要。

特点:计算量小、加密速度快、加密效率高。交易双方都使用同样密钥,安全性得不到保证。每次使用对称加密算法时,都需要使用其他人不知道的惟一密钥,这会使得发收信息双方所拥有的钥匙数量呈几何级数增长,密钥管理成为负担。

代表算法: DES、AES

1.2 非对称加密

什么是非对称加密: 需要两个密钥来进行加密和解密。分别是公开密钥和私有密钥。如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。

特点: CPU计算资源消耗非常大,效率较低。非对称加密算法对加密内容的长度有限制,不能超过公钥长度。比如现在常用的公钥长度是2048位,意味着待加密内容不能超过256个字节。

代表算法: RSA

0x02 中间人劫持

如果在通信过程中,客户端的请求被中间人劫持,那么中间人可以就可伪装成“冒牌客户端”和服务器通信,同时伪装成“冒牌服务器”与客户端通信。从而达到获取客户端服务端通信内容的目的!主要过程如下:

  1. 中间人在服务器发送公钥之前劫持客户端请求,伪造客户端向服务端发起SSL握手
  2. 中间人获取服务端加密公钥,伪造出一个自己的公钥发送给客户端
  3. 客户端接受到伪造的公钥,使用伪造的公钥发送对称密钥
  4. 中间人劫持到对称密钥,并利用自己的私钥解密出对称密钥
  5. 利用步骤2中的正确服务器加密公钥,加密客户端对称密钥发送给服务
  6. 客户端和服务器使用被中间人破解的对称密钥传输数据,中间人可以获取所有传输信息

2.1 数字签名

数字签名过程:

  1. 服务端把一个报文经过HASH处理生成消息摘要信息Digest,使用私钥加密摘要信息生成签名信息。
  2. 将报文、签名发生给客户端
  3. 客户端使用相同的HASH算法对报文做相同的HASH处理,获取摘要Digest1
  4. 客户端使用公钥解密签名生成摘要Digest2,并且对比Digest1和Digest2是否一致
  5. 如果Digest1和Digest2一致说明报文没有被篡改过,这份报文和签名是对应的,具有不可抵赖性。

2.2 数字证书

解决中间人劫持问题的关键在于,客户端如何能够分辨出接收到的公钥确实是服务端的呢?这时候就需要数字证书了。

数字证书是公司向一个证书发布机构”SecureTrust CA”申请的。这个证书发布机构”SecureTrust CA”是一个大家公认并被一些权威机构接受的证书发布机构,并且我们的操作系统里面已经安装了”SecureTrust CA”的证书。”SecureTrust CA”在给我们发布证书时,把Issuer,Public key,Subject,Valid from,Valid to等信息以明文的形式写到证书里面,然后用一个摘要算法计算出这些数字证书内容的一个Digest,并使用CA自己的私钥对Digest进行加密,生成证书的数字签名。

验证公钥过程:

  1. 服务端将证书发送给客户端,这里不是公钥
  2. 客户端提取证书中的发布机构(Issuer)为”SecureTrust CA”,在操作系统中受信任的发布机构的证书中去找”SecureTrust CA”的证书,如果查不到说明证书有问题。
  3. 如果找到了”SecureTrust CA”的证书,客户端从系统的证书中提取”SecureTrust CA”的公钥,
  4. 使用CA公钥对步骤1中获取到证书中的签名信息的进行解密获取解密摘要,并使用摘要算法计算证书的摘要
  5. 对比解密摘要和计算出的摘要信息是否一致。如果一致说明认证成功,当前证书中包含的公钥信息是可以信认的。

数字证书中包含公钥和证书所有者信息,并且保证数字证书里的公钥确实是这个证书的所有者的,我们拿到一个数字证书,我们可以判断出这个数字证书到底是谁的。

0x03 总结

数字签名:为了说明谁编写的报文,同时证明报文未被篡改过。

数字证书:由权威的认证机构证明公钥的正确性。

0x04 参考文档

HTTPS为什么安全 &分析 HTTPS 连接建立全过程

一个故事教你看懂什么是数字证书,它的原理是什么?它的作用是什么?

转载请标明出处病已blog https://ivonhoe.github.io/