【问题标题】:How does sending client certificate not expose the client to impersonation发送客户端证书如何不将客户端暴露于模拟
【发布时间】:2019-03-23 13:32:05
【问题描述】:

好的,为了方便交流,我就参考这张图

好的,所以服务器发送一个公钥,客户端使用它来加密自己的证书信息以发送回服务器。我不明白的是为什么攻击者无法从第 4 步截取数据包,然后使用它发送到服务器以冒充客户端。他们不必知道里面的信息或解密它。如果攻击者获得该数据包并将其保存,他们可以在服务器请求客户端证书时将这些确切字节发送到服务器。我不确定这种加密方法如何防止这种类型的攻击。再说一次,当谈到套接字级加密时,我完全是个菜鸟,所以我可能会遗漏一些重要的东西。谢谢!

【问题讨论】:

    标签: sockets authentication ssl mutual-authentication


    【解决方案1】:

    除了Patrick's 的回答,mTLS 期间还会比较时间戳。如果传入的时间戳超过某个限制,会话将被放弃,因此您截获的数据包将变得无用。

    https://en.wikipedia.org/wiki/Mutual_authentication#Defenses

    【讨论】:

      【解决方案2】:

      事情比这更复杂,而且这张图有一些缺陷,并且在本地存储的内容和交换的内容之间混杂了东西。

      查看https://en.wikipedia.org/wiki/Transport_Layer_Security#TLS_handshake,特别是“客户端验证的 TLS 握手”案例。

      总结:

      • 在某些时候,服务器会要求客户端发送证书(这并不总是需要,因此服务器会发送特定的消息来请求它,CertificateRequest
      • 然后客户端回复 Certificate 消息,其中包含其证书
      • 在那个阶段,服务器已经可以根据提供的证书决定是否要更进一步;确实在那个阶段其他人也可以发送相同的证书,因为它是公开的。但接下来的内容解释了为什么它在 TLS 握手中无法进一步工作
      • 在来自服务器的 ClientKeyExchange 消息包含各种加密数据之后,这些数据将在以后用于真正加密应用程序数据的交换,
      • 客户端发送CertificateVerify 消息,该消息是根据之前在握手中交换的 TLS 消息计算的签名,使用与客户端证书关联的私有密钥完成
      • 接收此消息的服务器可以再次检查它是否正在与真正的客户端通话,因为通过尝试使用客户端公钥(包含在证书中)验证签名,它将知道远程方是否确实具有适当的关联私有密钥关键与否。

      所以攻击者不能仅仅通过窃取证书来冒充客户端(在另一种情况下存在相同类型的保护,以验证服务器),当然,只要私钥保持私有。如果私钥被盗,则上述所有操作都会失败。

      此时没有必要了解加密签名的所有细节,只是系统的设计方式是,由其中一个密钥加密的所有内容都只能由另一个密钥解密:如果有人使用它的私钥,那么任何人都可以用它的公钥解密它(根据定义,它是公共的;然后你通常会遇到传播它的问题,但这里不是因为公钥包含在刚刚交换的证书中在握手之前);这当然对机密性毫无用处(任何人都可以看到加密的内容),但它是身份验证的基础,因为如果解密有效,则意味着发件人拥有与您用来解密事物的公共密钥相关联的私钥。

      请注意,随着 TLS 1.3 刚刚作为新标准推出,TLS 交换中消息的数量和性质略有变化,但上述加密保证(使用私钥签署某些东西,以便远程方可以加倍-检查相关的公钥)仍然成立。

      【讨论】:

      • 我还是有点困惑。攻击者不能拦截CertificateVerify 并继续发送吗?
      • @Deejpake 发送CertificateVerify 您需要拥有与证书关联的私钥。随机远程攻击者应该如何拥有私钥?根据定义,私钥永远不会在任何地方交换。它只能被盗。
      • 但是攻击者不能截获密钥吗?就像说我发送了我的CerificateVerify 并且远程攻击者截获了数据包。难道他们不能用催眠的方式发送这个来冒充我吗?
      • @Deejpake “但是攻击者不能拦截密钥吗?”永远不会交换私钥。你想在哪里拦截它?请花点时间重新阅读前面的解释,也许还有关于公钥/私钥密码学的观点对你来说很奇怪,所以试着检查一下这对你来说是否有意义。
      猜你喜欢
      • 2013-06-06
      • 2011-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-19
      • 2018-12-08
      相关资源
      最近更新 更多