【问题标题】:SSL pinning client encryptionSSL pinning 客户端加密
【发布时间】:2016-02-27 09:05:09
【问题描述】:

我想了解这里的安全性如何运作。如果我为我的移动应用程序使用 SSL 固定,我使用 AFNetwork 的 AFSecurityPolicy 固定 PublicKey。当我的客户端连接到服务器时,我可以验证服务器的证书,因为我已经固定了它。

问题来了,我是否使用服务器的公钥来加密到服务器的流量。并且服务器正在使用它的私钥向客户端发送流量?

【问题讨论】:

  • 为什么依赖?我的意思是,如何在 SSL 上仅以一种方式加密流量?
  • “仅以一种方式加密”是什么意思? SSL 总是双向加密(当然,对于 NULL 密码完全不加密)。
  • 我的问题是它是否确实双向加密,每一方使用哪个密钥进行加密。我知道客户端会使用服务器的公钥,但是服务器使用什么来加密客户端呢?

标签: android ios ssl encryption


【解决方案1】:

不,RSA 密钥永远不会直接用于为 TLS 加密数据。它用于加密共享密钥(对于以RSA_ 开头的密码套件,无需降级到DH)或用于在临时密钥协议的身份验证阶段执行签名验证(以@ 开头的密码套件987654323@ 或 DHE_)。

共享密钥与 PRF 一起用于密钥派生以建立会话密钥。用于加密的会话密钥将用于对数据保密。

更多信息参见维基百科文章Key Exchange or Key Agreement

【讨论】:

  • 好的,如果我的服务器没有要求验证客户端证书,那么服务器如何向客户端发送流量?
  • 它使用共享密钥来建立会话密钥......我会集成,但您可能只想阅读 TLS RFC。
  • 所以最终服务器和客户端成功共享了一个攻击者无法检索的秘密。但是,如果客户端没有对自己进行身份验证,则服务器不知道它正在与谁交谈。您当然可以使用例如验证客户端之后的 HTTP 基本身份验证或 HTML 表单。
  • 很棒的维基百科 TLS 链接!看起来 TLS 1.3 将是一次真正的变革! Apple 已经多年没有更新 Common Crypto,例如没有 AES GCM。
猜你喜欢
  • 2014-02-24
  • 2017-11-07
  • 1970-01-01
  • 1970-01-01
  • 2017-07-26
  • 1970-01-01
  • 1970-01-01
  • 2019-07-09
  • 2016-12-16
相关资源
最近更新 更多