为什么应该更喜欢 EST 协议而不是 SCEP?

信息安全 公钥基础设施 x.509 scep
2021-08-12 16:13:00

多年来,SCEP 是一种用于获取 X.509 证书的简单且广泛使用的协议。然而,不久前开发了另一种称为 EST ( RFC 7030 ) 的协议。

从 SCEP 转而支持 EST 的主要原因是什么?

3个回答

什么是 SCEP?

简单证书注册协议是最初由思科在 2011 IETF Internet-Draft draft-nourse-scep 中定义的证书注册协议,最近在奥克兰大学的 2018 IETF Internet-Draft draft-gutmann-scep中定义。

什么是 EST?

Enrollment over Secure Transport (EST)是 Cisco、Akayla 和 Aruba Networks 在RFC 7030中定义的证书注册协议。EST 可以被认为是 SCEP 的演变。思科为理解 EST 提供了一个很好的指南,它被旋转以支持 EST。

SCEP 与 EST

相似之处

这两种协议非常相似,因为客户端向证书颁发机构发送 CMS(又名PKCS#7)和 CSR(又名PKCS#10)消息,并使用预先存在的证书进行签名,以便使用给定的 CA 注册新证书.

它们都支持客户端向 CA 证明其身份的以下方法(尽管具体细节不同):

  • CMS / CSR 消息使用以前颁发的客户端证书(例如,由 CA 颁发的现有证书)签名。这是证书续订的典型情况。
  • CMS / CSR 消息使用 CA 已配置为信任的先前安装的证书(例如,制造商安装的证书或其他方颁发的证书)签名。这对于在制造过程中注入证书并且 CA 已配置为信任制造 CA 的 IoT 设备、移动设备等来说是典型的。
  • 已在带外分发给客户端的共享密钥。

差异

它们之间的主要区别在于 EST 使用标准 TLS 作为传输安全层,除了对 CMS 和 CSR 消息进行签名之外,还要求为 TLS 客户端身份验证提供上述证书。

在 SCEP 中,共享秘密身份验证方法是通过在 CSR 的challengePassword字段中包含秘密并创建一次性自签名证书来签署 CMS 消息来完成的。

由于 EST 使用标准 TLS,它有两种使用共享密钥进行注册的方法:

  • 具有 HTTP 用户名/密码基本身份验证的仅服务器 TLS,其中用户名和密码是带外分发的共享密钥。

  • 使用预共享密钥 (PSK) 密码套件的 Mutual-auth TLS。一个很好的副作用是,这允许客户端验证 CA,而无需提前知道它将从哪个 CA 获得证书(即无需提前分发根 CA 证书)。


概括

两者都是使用 PKI 进行自动证书注册的可接受协议,并提供类似的安全特性。

EST 的优势在于它将其传输层安全性外包给标准 TLS,因此随着新版本 TLS 的发布,它将继续获得安全性和性能改进。对于不想将代码空间专用于 TLS 实现的受限设备,这也可能是不利的。

有很多理由更喜欢 EST 而不是 SCEP,

  • EST 促进基于 X.509 客户端证书身份验证的注册,有助于删除过去的密码。EST 可以注册提供第三方 CA 证书(出生证明)的客户(提供操作证书)。一个客户注册后,它可以更新其证书以再次对其进行身份验证。

  • EST 支持椭圆曲线并将传输和身份验证与注册分离得很好:

    • 传输基于 TLS。EST 不需要更新即可从更好的加密套件中受益。

    • 身份验证可以在 TLS(客户端证书身份验证)、HTTP 传输通道(基本身份验证)和 CSR 质询代码中实现。甚至同时在三层!!!!

    • 注册基于 PKCS#10(标准证书签名请求),响应是嵌入在 PKCS#7 中的普通 X.509 证书。它是如此简单,以至于我很确定如果更新了这些(PKCS#10、PKCS#7、X.509)中的任何一个,则不需要更新 EST 协议。

  • EST 提供了 /serverkeygen 方法,这对于非常紧凑的物联网设备(即像 Arduino 这样的 AVR 设备)来说可能是一个非常有趣的选项。

  • EST 比 SCEP 更容易实现,因此比过度膨胀的协议更安全、更不危险。事实上,它可以使用 curl 和 openssl 来实现。

  • 如果事情变得非常复杂,它可以充当提供可选方法 /fullcmc 的 CMC 代理。

我最近实现了一个用 Perl 编写的 EST 客户端 (PEST),它带有一个用于配置和测试 EST 服务器的 EST 测试套件 (TEST)。它可以从 Github https://github.com/killabytenow/pest下载。我很确定为 SCEP 编写一个类似的工具会更加困难。就个人而言,恕我直言,EST 总是比 SCEP 好。

与 SCEP 的 RSA 加密相比,EST 的一个优点是它支持椭圆曲线加密 (ECC) 加密。ECC 优于 RSA 的主要优势在于它可以提供相同数量的安全性,但密钥大小要小得多(小 50%)。因此,如果您有两个相同的有限内存设备,那么集成 EST 协议的设备将比仅集成 SCEP 的设备具有更安全的证书。15,360 位 RSA 密钥与 521 位 ECC 密钥具有相同的加密强度 - 15,360 位可能看起来有点过头了,但这里的讨论表明,量子计算机可能能够在十年左右的时间内破解 RSA(尽管有些答案说两者都是因为很容易被破坏所以阅读所有答案并做出自己的决定^-^)。

另一个因素是,在 EST 中,证书只能从拥有唯一私钥或用户名/密码的证书颁发机构提供给客户端。因此,客户只能为自己而不是其他任何人获得证书(编辑:除非他们共享他们的用户名/密码,因此使用私钥更好)。

SCEP - 另一方面 - 是使用共享密钥从证书颁发机构提供给客户端的,该密钥是保密的,但是,问题出现了,知道密钥的任何人都可以获得证书,因此客户端可以生成证书传递给其他人等等......

这些只是 EST 相对于 SCEP 的安全优势 - Cisco在此处有一个关于其他优势和差异的有趣文档

编辑:如评论中所述。