【问题标题】:Can I implement TLS by skipping some steps?我可以通过跳过一些步骤来实现 TLS 吗?
【发布时间】:2015-03-14 17:07:08
【问题描述】:

是否有可能减少 TLS 的实现,我们只是 假设我们连接的服务器是可信的——在服务器发送它的 证书,我们可以绕过对此的验证并取消任何进一步的 处理,并直接进入标准 http ?正在使用公钥加密 绝对必要的东西,或者可以跳过吗?

改写我的问题。

是否可以通过跳过使用 RSA 公钥来编写 tls 引擎 代码 ?, 或者 客户端可以在握手期间通知服务器它只需要服务器证书吗 信息、公司名称、到期日期并请求以纯文本形式发送密钥。

【问题讨论】:

  • 如果您希望它不安全,为什么还要使用 SSL?

标签: ssl https public-key-encryption


【解决方案1】:

跳过我不完全理解的协议中的某些内容通常是个坏主意。 只有在 RFC 中标记为可选的步骤可以安全地跳过。 因此,如果您不打算使用基于客户端证书的身份验证,则可以跳过它。

但是,您可以做的是限制实施中的变体数量。这意味着仅支持一种 TLS 版本(例如 TLS 1.2)并且仅支持一种专用密码套件。

无论如何,实现 TLS 时的陷阱非常多,因此我建议您使用现有的实现(例如,以不允许侧通道攻击的方式实现并不是那么简单,并且需要有关该主题的知识)。除了 OpenSSL 之外,还有其他一些占用空间更小的实现。

顺便说一句:如果您可以假定连接是可信的,则您不需要 TLS。如果您需要 TLS,它应该是安全的。

【讨论】:

    【解决方案2】:

    我们只是假设我们正在连接的服务器是受信任的 - 在服务器发送其证书后,我们是否可以绕过对此的验证并取消任何进一步的处理

    验证的重点不是确定服务器是否受信任,而更多的是您实际上是在与您期望的服务器交谈。如果您忽略此步骤,您将面临中间人攻击。

    但是,TLS 是一个非常灵活的协议,实际上有一些方法可以使用匿名身份验证或与 TLS 共享机密,从而跳过证书的使用。当然,在这种情况下,您需要使用其他方法来验证服务器,否则您仍然会受到中间人攻击。而且由于这个用例与互联网上的常见用法大多无关,它通常不会在浏览器中实现。

    【讨论】:

    • 我要连接的服务器在我们的 Intranet 上——所以它是可信的。我的工作是从 RFC 实现 tls(没有库、openssl 等)——大部分工作已经完成,不包括公钥部分 - 我想验证我到目前为止所拥有的内容是否合规,而不必先完成 PK 等。
    • 同样,问题不是服务器是否受信任,而是如何确保与正确的服务器通信。我不了解您的本地网络,但在许多本地网络中,可以安装 DHCP、DNS 或 ARP 欺骗攻击,从而重定向流量。这使得发起中间人攻击成为可能。如果一切都如此可信,那你为什么还要使用 TLS?
    • 要验证到目前为止您已经实现的内容,您需要一个愿意使用匿名授权的客户端。 OpenSSL 命令行工具可以做到这一点,而浏览器通常不会。
    • 我们的网络是可信的——但最终我们的 tls 实现将不得不在公共互联网上运行。我已将项目分为两部分 - 密码、摘要、握手、证书处理 - 最后一部分是密钥交换和连接完成.. - 我认为第一部分是正确的 - 我想检查一下无需进行第二部分
    • 在这种情况下,在 localhost 上对其进行测试就足够了,这可能比任何 LAN 都更受信任。如果您可以在同一台机器上运行客户端和服务器,它会简化测试设置。也许你应该改写你的问题,因为你的目标显然不是实现一个不完整的 TLS 堆栈,而是测试一个仍然不完整的堆栈。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-02
    相关资源
    最近更新 更多