如何修复 SSL 算法以提高安全性

信息安全 tls
2021-08-23 13:26:35

SSL 像这样使用非对称加密:

  1. 服务器发送其非对称公钥的副本。
  2. 浏览器创建一个对称会话密钥并使用服务器的非对称公钥对其进行加密。
  3. 服务器用自己的非对称私钥解密非对称公钥,得到对称会话密钥。
  4. 服务器和浏览器现在使用对称会话密钥加密和解密所有传输的数据。

但是,如果有人在“步骤 1”中收听此通信并执行以下操作会发生什么:

  1. 在步骤 1 中侦听服务器和客户端之间的通信。
  2. 当服务器发送其非对称公钥的副本时,黑客将其更改为他们自己的公钥(也有其私钥)并将其发送给客户端。
  3. 客户端创建会话密钥并使用黑客的公钥对其进行加密。
  4. 黑客侦听线路并获取会话密钥并使用其私钥对其进行解密。

所以他在这里得到会话密钥。接着..

  1. 黑客通过最后一个公钥(服务器发送的)加密会话密钥(解密的)
  2. 所以黑客现在有了会话密钥......

我在我的项目中使用了这个算法来进行服务器和客户端之间的通信。他们之间没有任何认证。我在公钥中添加一些字符并且客户端检查它们并使其有效是否正确?

我们如何解决它?有任何想法吗?

3个回答

TLS 没有坏,只有你对 TLS 的理解;)

答案中解释了完整的 TLS,但要回答您具体的问题:

  • 服务器不会简单地将公钥发送给客户端。服务器向客户端发送证书(链)。
  • 客户端使用其存储中的受信任证书之一验证服务器证书。

因此,要使用您所描述的 MitM(中间人)攻击,攻击者必须替换服务器证书(这也是可能的,但要困难得多)。

证书是由 CA(认证机构)签署的公钥。因此,客户端可以通过验证该证书上的签名来检查服务器证书。

所有证书都有一个签名证书链,直到一个自签名证书。此自签名证书称为根证书,并且已包含在您的浏览器中。

您可以通过颁发根证书来创建自己的 CA,并使用它来签署您自己的证书。然后,您只需将创建的根证书导入浏览器证书存储。这仅适用于小型用户群或浏览器更新的公司。

您缺少的是身份验证,即确认您收到的公钥确实是由服务器发送的。

例如,在 https 中,使用了证书颁发机构系统。某些组织被选为我们可以信任的组织。这些组织会生成一个公钥,然后将其包含在浏览器中。因此,例如,当您下载 Firefox 时,会包含一组受信任的 CA 证书。然后,当通过 https 连接到站点时,浏览器会检查服务器提供的证书是否由受信任的 CA 证书之一签名。

CA 然后负责接收对证书签名的请求,并验证它们是由该站点的真正所有者发送的。

在个人项目中,这意味着您需要在某处包含服务器的公钥,以验证您收到的证书。

这种攻击不起作用,因为客户端验证了服务器的证书。如果中间人(黑客,在你的场景中)用他自己的公钥替换服务器的公钥,那么证书将不会验证,客户端知道有问题,并中止交易。客户端不会使用错误的公钥来加密会话密钥,因此,这不是威胁。