【问题标题】:TLS man in the middle security certificatesTLS 中间人安全证书
【发布时间】:2013-11-24 03:52:39
【问题描述】:

首先,我很抱歉发送了另一个关于此问题的问题,因为有很多相关的帖子。在阅读了它们和相关网站后,我仍然不清楚几点。

  1. 浏览器通过安全套接字连接到服务器
  2. 服务器用它的公钥和它的证书来响应。这是我最麻烦的一步。在这个从服务器到客户端的消息中,证书可以很容易地与服务器的公钥分开吗?如果它是根证书(已经包含在浏览器中的证书),那么中间人无法伪造它,但如果不是呢?客户端用来验证证书的任何这种在线机制都不能被劫持吗?此外,如果客户端的计算机受到威胁,根 CA 也可能受到威胁,对吗?有什么步骤可以避免这种情况吗?最后一件事:据说证书在签名之前是不安全的。我不知道这意味着什么,尤其是因为证书可以自己签名。我认为这应该意味着有人在保证消息的真实性,所以证书签名本身听起来不安全(“你是真正的证书吗?”......“嗯,当然,我是”)。如果验证证书的机制是互联网,我想知道它是如何安全的。签署证书与(字面意思)说客户端验证证书是否相同?
  3. 会话密钥用公钥加密并发送到服务器。此会话密钥是一个对称密钥,服务器和客户端都将用于其余的加密通信。

我必须说,网上的大多数信息都非常模糊。解释和挥手有很多漏洞。我的猜测是很少有人非常了解实际的机制?

【问题讨论】:

    标签: security ssl


    【解决方案1】:

    您遗漏了几个步骤。其中之一是服务器在整个握手过程中发送一个数字签名,并使用其私钥签名。只有服务器可以使用自己的证书来执行此操作。别人的。客户端使用已发送证书中的公钥验证数字签名。这证明服务器拥有证书。它还证明服务器是发送所有其他握手消息的同一实体。

    顺便说一句,您的第 3 步是虚构的。会话密钥根本不会发送。它在两端独立计算。

    编辑评论你的答案:

    服务器(来自 JoesGoods)通过以下方式从 CA 获得证书?

    通常通过 Internet 浏览器。

    这可以被劫持吗?

    没有任何其他安全 SSL 会话可以做到。

    证书已“签名”

    正确。

    这意味着它的一部分是使用 CA 的私钥加密的。

    没有。你编的。

    特别是具有 Web 服务器信息的位(JoesGoods 的服务器信息)

    没有。你编的。

    整个证书是用 CA 的私钥签名的,这并不意味着“加密”。

    Bob 的浏览器通过安全套接字连接到服务器并发送“hello”数据包。

    此时套接字并不安全。它只是纯文本。

    服务器将其公钥和证书发送给 Bob。

    没有。服务器发送其证书。公钥已经在证书中。

    浏览器检查网络服务器 (JoesGoods) 是否与证书签名部分中的内容相匹配

    整个证书都已签名。客户端检查它所连接的服务器是否与证书的 subjectDN 匹配。

    网络服务器的公钥也用 CA 的私钥签名

    因为它在证书中。否则没有其他方法可以实现这一点。这就是它不单独发送的原因,也是整个证书被签名的原因,而不仅仅是你喜欢的位。

    浏览器使用步骤 (2) 中包含的网络服务器公钥向网络服务器 (JoesGoods) 发送客户端密钥交换数据包。

    这部分取决于密码套件。您所描述的适用于 RSA 密码套件。 Diffie-Hellman 是一个不同的故事,还有扩展空间以包括其他人。

    此客户端密钥用于生成对称密钥以进行剩余的交换。此客户端密钥称为“预主密钥”,是一个随机密钥。由于对称密钥是使用此密钥创建的,我想知道为什么不直接发送对称密钥本身,因为此时连接已加密和验证。

    因为它几乎没有那么安全。

    这些步骤中的某些步骤也有问题。

    RFC 2246 中已经完全指定了所有这些步骤时,我真的没有看到非正式列举所有这些步骤的意义。互联网上已经有很多关于 TLS 的错误信息,例如this piece of unmaintained drivel

    【讨论】:

    • 我将发起一个中间人攻击,人们可以告诉我为什么它不起作用: 1. 服务器使用公钥及其证书响应客户端。证书由 CA 私钥签名(这意味着加密?)? 2. 进入中间人服务器 Mallory。我截获了这条消息并删除了服务器的证书并放置了我自己的假证书,而不是基于根证书。我的假证书要么是自签名的,要么附有指向我自己的中间人服务器的认证信息。 3.发送给客户。 4. 获取客户端的响应并应用服务器的证书。
    • @Roberto 但是攻击者如何伪造 CA 的签名并附上它适用于哪个主机的描述?在 HTTPS(可能还有其他基于 SSL 的系统)中,客户端检查服务器的证书是否适用于它应该适用的内容,即证书的主机名是否符合预期。 (此时,攻击者还没有被告知服务器的主机名;只是稍后才传递……)
    • @Donal 我提出了一个马洛里不必伪造的场景。中间人使用正确的主机信息制作自己的证书。中间人伪装成 CA。
    • 由应用程序来验证经过身份验证的对等方是否有权连接到它。 SSL 不可能知道这一点。它是 SSL 中经常被忽视的部分。 HTTPS 主机名验证就是一个例子:证书中的主题 DN 必须与所连接的主机匹配,并且 CA 采取离线步骤确保它只向拥有相应主机名的实体颁发此类证书。中间人不能做你描述的事情。他不能“假装成为 CA”,也不能让真正的 CA 签署包含其他人主机名的证书。
    • @EJP 感谢您的回复。我将步骤简化到可以以我目前的经验水平处理它们的程度。如果我能独立通过 RFC2246,我会是一个快乐的人。每个来源似乎都跳过了“签名”的含义。似乎他们都假设每个人都知道这意味着什么。我推测它必须是某种编码,否则它可能会被修改/伪造并操纵内容。为什么 MITM 不能将自己的公钥放入证书中来代替服务器的 then?
    猜你喜欢
    • 2014-02-20
    • 2017-12-06
    • 2016-06-15
    • 1970-01-01
    • 2013-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多