SSL/TLS PKI 如何工作?

信息安全 tls 公钥基础设施 证书颁发机构
2021-08-11 19:27:12

我们有很多问题涉及 SSL/TLS 与 PKI 相关的部分问题,但似乎没有一个问题能够将所有内容结合在一起。我认为我们可以指出人们的规范答案会很有帮助。

我认为要回答的主要问题似乎是海报之间一些混淆的根源(所有关于 SSL/TLS):

  1. 公钥基础设施和公钥密码学有什么区别?它们有什么关系?
  2. PKI 的主要用例是什么?
  3. PKI 中如何使用客户端证书?
  4. 证书颁发机构在 PKI 中的作用是什么?
4个回答

公钥密码术指定包括非对称加密(及其表亲密钥交换)和数字签名的密码算法类别。在这些算法中,有两个相互对应的操作(加密 -> 解密,或签名 -> 验证),其特点是每个人都可以完成其中一个操作,而另一个在数学上仅限于特定的所有者秘密。公共操作(加密消息、验证签名)使用称为公钥的公共参数;相应的私有操作(解密已加密的内容,签署可验证的内容)使用称为私有密钥的相应私有参数. 公钥和私钥来自一个共同的底层数学对象,并被称为公钥/私钥对非对称密码学的神奇之处在于,虽然密钥对的公共部分和私人部分相互对应,但公共部分确实可以公开,而这并不会泄露私人部分。只能通过现有技术无法想象的成本太高的计算,才能从公钥计算出私钥。

简而言之,如果您知道某个实体(服务器、人类用户......)的公钥,那么您可以与该实体建立一个安全的数据隧道(例如,在连接的上下文中使用 SSL/TLS,或加密带有 S/MIME 的电子邮件)。

现在的问题是密钥分配之一。当您要连接到一个名为的服务器www.example.com时,如何确保您将要使用的公钥确实属于该服务器?通过“属于”,我们的意思是相应的私钥在该服务器(而不是其他人)的控制之下。

公钥基础设施是该问题的解决方案。基本上:

  • PKI的目标是为用户提供一些关于公钥所有权的可验证保证。
  • PKI的手段是数字签名。

从这个意义上说,PKI 是使用公钥密码的支持系统,它本身使用公钥密码。

PKI 的核心概念是证书证书包含身份(例如,服务器名称)和公钥,据称属于指定实体(即命名服务器)。整个认证机构签署. CA 应该以某种方式“确保”公钥确实由命名实体拥有,然后颁发(即签署)证书;CA 也有自己的公钥/私钥对。这样,看到证书并知道 CA 公钥的用户(例如,Web 浏览器)可以验证证书上的签名,从而获得证书内容的信心,从而了解指定实体(其服务器)之间的映射关系。名称在证书中)及其公钥。

花五分钟时间掌握该机制的细节。签名本身并不能使某些东西值得信赖。当消息M被签名并且签名被公钥K p成功验证时,密码学会告诉你消息M与它完全一样,直到最后一位,当相应的私钥K s的所有者计算出签名。这不会自动告诉您M的内容是正确的。证书的作用是解决密钥分配问题:最初你的问题是知道服务器的公钥;现在它是知道 CA 的公钥之一,另外一个问题是您还必须信任该 CA。

那么 PKI 如何提供帮助呢?重要的一点是关于数字给定的 CA 可以为数百万台服务器颁发证书。因此,通过 CA 的行动,密钥分配问题已通过两种方式修改:

  • 从“知道上亿个服务器证书的公钥”,变成了“知道上千个CA的公钥”。

  • 相反,出现了额外的信任要求:您不仅需要知道 CA 密钥,还需要信任它们:CA 必须是诚实的(它不会故意用错误的名称/密钥关联签署证书)和也有能力(它不会在不知不觉中用假名/密钥关联签署证书)。

当应用递归时,PKI 成为真正的基础设施:CA 的公钥本身存储在由某些 über-CA 签名的证书中。这进一步减少了用户需要先验知道的密钥数量;这也增加了信任问题。事实上,如果 CA2 为 CA1 签署了证书,而 CA1 为服务器 S 签署了证书,那么想要验证服务器 S 的最终用户必须相信 CA2 是诚实的、有能力的,并且还要以某种方式注意不签发向不称职或不诚实的 CA 颁发证书。这里:

  • CA1 说:“服务器S的公钥xxx ”。CA1没有说“服务器S诚实守信”。
  • CA2 说:“CA1 的公钥是yyy并且 CA 是值得信赖的”。

如果你迭代这个过程,你最终会得到一些最终用户事先知道的根 CA (在X.509术语中称为“信任锚” ) (它们包含在您的操作系统/浏览器中),并且被认为是值得信赖的在所有元级别。即我们信任根 CA 以正确识别中间 CA能够验证它们的可信度,包括它们自己委托这种可信度的能力。

微软认为默认包含在 Windows 中的数百个根 CA 是否值得信赖是一个悬而未决的问题。整个 PKI 结构具有以下特点:

  • PKI 深度是有限的。从根 CA 到 SSL 服务器证书的证书链最多包含 3 或 4 个证书。

  • CA 非常嫉妒他们的权力,不会向任何想成为中间 CA 的人颁发证书。证书中指定了是否委托了“CA 权力”。当 CA 向具有该特定标记的子 CA 颁发证书时,它仅在繁重的上下文(合同、保险、审计和大量美元)中这样做。最终,信任是通过恐惧来确保的。违规 CA 将受到严厉处罚。

  • 没有人真正有兴趣破坏系统,因为没有现成的替代品。

请注意,在整个链条中,服务器S被验证为确实拥有特定的公钥,但没有人说服务器是诚实的。当您连接https://www.wewillgraballyourmoney.com/并看到标志性的绿色挂锁时,整个 PKI 保证您确实在与该特定服务器通话;它并没有告诉您将您的信用卡号码发送给他们是个好主意。

此外,所有这些都是出现在目标 URL 中的服务器名称与公钥之间的关联。这不会扩展到用户想要的名称,因为该名称仅存在于用户的大脑中。如果用户想连接到www.paypal.com但真的遵循一个 URL 到www.paaypaal.com,那么 PKI 和浏览器将无法注意到用户真的想与 PayPal 对话,而不是另一个具有大致相似(但不相同)的服务器) 名称。


PKI主要用例是为许多实体分发公钥。对于 Web 浏览器和 SSL,浏览器用户必须能够检查他尝试与之通信的服务器是否确实是他认为的服务器;这必须适用于数以亿计的服务器,其中一些是在编写和部署浏览器之后才存在的。减少了问题知道了一百根CA密钥使得它易于管理,因为一个确实包括在Web浏览器百个公共密钥(这是不是包括在Web浏览器亿元公共密钥更容易万次)。

客户端证书是 SSL 特定的功能。在上述所有内容中,我们都谈到了SSL 客户端(Web 浏览器)尝试验证SSL 服务器(使用 HTTPS 的 Web 服务器)。SSL 还支持另一个方向:想要确保与特定的命名客户端对话的 SSL 服务器。可以使用与证书相同的机制。

需要注意的重要一点是服务器证书和客户端证书存在于不同的世界中。服务器证书由客户端验证。客户端证书由服务器验证。两种验证相互独立;它们由不同的实体执行,并且可能使用不同的根 CA。

SSL 服务器拥有证书的主要原因是因为客户端不可能事先知道所有服务器的公钥:它们太多了,并且每隔一分钟就会创建新的公钥。另一方面,当服务器想要对客户端进行身份验证时,这是因为该客户端是注册用户通常,服务器知道他们所有的用户,这就是为什么大多数人可以使用更简单的基于密码的身份验证机制。因此,SSL 客户端证书在实践中相当少见,因为证书的主要优势(在没有先验知识的情况下验证实体)并不是大多数服务器想要的功能。

公钥基础设施和公钥密码学有什么区别?它们有什么关系?

我认为公钥基础设施公钥密码学之间的区别从他们的维基百科定义中非常清楚(在 tldr 之后引用)。TLDR公钥密码学是非对称算法的另一个名称,而 PKI 是一种解决公钥密码学关键问题的基础设施。

公钥密码学:(又名非对称密码学)是一类基于算法的制图协议,需要两个单独的密钥,其中一个是秘密的(或私有的),一个是公共的。最常见的用途包括:公钥加密(消息使用收件人的公钥加密)和数字签名(消息使用发件人的私钥签名,任何有权访问发件人公钥的人都可以验证)。它是一种使用户能够在不安全的公共网络上安全通信,并通过数字签名可靠地验证用户身份的技术。

公钥基础设施:是创建、管理、分发、使用、存储和撤销数字证书以及管理公钥加密所需的一组硬件、软件、人员、策略和程序也就是说,它涉及管理公钥密码学,但不仅限于此。

为了理解这种关系,必须了解公钥密码学的核心问题,即:对特定公钥真实性的信心/证明,因为它是正确的并且属于所声称的个人或实体,并且具有未被恶意第三方篡改或替换。公钥基础设施是解决这个问题的方法之一。它倾向于通过引入证书颁发机构(即受信任的第三方)的概念来解决该问题,以证明密钥对的所有权。解决此问题的另一种方法是称为Web of Trust,它通过中央机制分散了对公钥的这种认证,并替代了用户和公钥之间链接的个人背书。

PKI 的主要用例是什么?

我能想到的 PKI最常见的用例是(来自维基百科文章):通过证书颁发机构 (CA) 将公钥与相应的用户身份绑定用户身份在每个 CA 域中必须是唯一的。第三方验证机构 (VA) 可以代表 CA 提供此信息。绑定是通过注册和发布过程建立的。根据绑定的保证级别,这可以由 CA 的软件或在人工监督下执行。确保此绑定的 PKI 角色称为注册机构 (RA)。RA 负责接受数字证书请求并对提出请求的个人或组织进行身份验证。

这个用例可以应用于各种场景,例如(再次,形成维基百科文章):

  • 电子邮件消息的加密和/或发件人身份验证(例如,使用 OpenPGP 或 S/MIME)
  • 文档的加密和/或认证(例如,如果文档被编码为 XML,则为 XML 签名或 XML 加密标准)
  • 用户对应用程序的身份验证(例如,智能卡登录、使用 SSL 的客户端身份验证)
  • 引导安全通信协议,例如 Internet 密钥交换 (IKE) 和 SSL。

PKI 中如何使用客户端证书?

这实际上取决于上面提到的特定用例场景。客户端证书在不同场景中的使用方式可能不同,但它们都具有相同的目的:验证特定公钥是否属于某个实体(客户端/服务器/用户)。

例如:SSL/TLS 支持客户端证书。这个用例已由Thomas Pornin 在此答案中介绍Bruno 的这个答案也涵盖了使用客户端证书进行身份验证的优点/缺点

证书颁发机构在 PKI 中的作用是什么?

最好的答案可以在引用的维基百科文章中找到(再次):

CA 的主要作用是对绑定到给定用户的公钥进行数字签名和发布。这是使用 CA 自己的私钥完成的,因此对用户密钥的信任依赖于对 CA 密钥有效性的信任。当 CA 是独立于用户和系统的第三方时,则称为注册机构 (RA),它可能与 CA 分离,也可能不分离。根据绑定所具有的保证级别,通过软件或在人工监督下建立关键用户绑定。

作为引言:PKI(公钥基础设施)和PKC(公钥密码术)一起被认为是PKT(公钥技术)。

简短答案:为了阅读图像在新窗口中打开它

在此处输入图像描述

现在是回答问题的时候了。

      1. What is the difference between Public Key Infrastructure and Public Key Cryptography?

我认为它们之间的主要区别和关系隐藏在定义和历史背后:

  • 公钥密码学 (PKC):公钥(又名“双密钥”或“非对称”)密码学由Diffie 和 Hellman 于 1976 年发明之后出现了 RSA 等其他版本。与密钥(又名“对称”)密码术不同,其中 A 方和 B 方共享相同的密钥 K,每个用户的对应私钥和公钥对允许某些操作的唯一实现。具体来说,让各自的私钥和公钥 privA 和 pubA 属于 A 方。通过使用 privA 对数据进行操作,A 可以对数据进行数字签名,该数据可由 B 方(或任何其他方)对使用 pubA 签名的数据进行操作来验证. 等效地,B 方(或任何其他方)可以使用 pubA 加密数据,其中加密数据只能使用 privA 解密。公钥密码学的真正力量在于每一方都拥有唯一的私钥。通过使用所述密钥对数据进行操作来“展示”私钥,
  • 公钥基础设施 (PKI):大约 22 年前, ISO/IEC CCITT/ITU-T 国际标准 X.509的 1993 版开始在小规模环境中传播、认可和实施。1993 年末和 1994 年初实际上是 PKI 的开始(尽管该首字母缩略词尚未创造出来),因为该版本的 X.509 标准——比 1988 年的版本更多——充实了证书、认证机构、和相关概念。 在早期,“PKI”的定义相当严格,尽管事后我们可以确定定义的六个主要组成部分今天仍然很重要,三个与绑定的有效性(权威功能)有关,三个与绑定的使用(客户端功能)有关。关于公钥和标识符绑定的有效性,需要的是:
    1. ,其职责是创建和销毁这些绑定,根据需要,或在相关权威行动援助,
    2. 以其他方可以理解的方式(即以约定的语法)表达这些绑定的发布过程,并使希望了解的各方可以使用此信息,以及
    3. 必要时终止绑定并将此信息提供给需要了解它的各方的终止过程。关于此类绑定的使用,需要的是:
    4. 锚管理过程,用于增加或减少将作为客户端的根或信任锚的权威公钥集
    5. 用于确保客户端私钥可用于其所需目的的私钥管理过程(这可以包括密钥对的生成和更新,注册标识符并将其绑定到相应的公钥,在私钥有效时对其进行适当保护,以及在丢失的情况下备份和恢复私钥),以及
    6. 绑定验证过程,用于确定客户端何时应该信任给定公钥(从某个外部实体检索或获取)与给定标识符真实关联。

因此,根据上面的解释,公钥密码学只支持对数据进行非对称的数学运算;它本身并不提供与电子商务、电子邮件或 Web 等应用程序或环境的连接。 为了提供这样的连接,需要几个额外的部件。这些附加部分构成了 PKI 的定义——一种“基础设施”,使希望使用它的应用程序和环境可以使用公钥技术。

根据本文,关于这些特性的 PKI 系统的一些示例是:X.509、PGP、AADS/X9.59、SPKI

                              2. What is the main use case for PKI?
  • TLS:根据“移动和互联网服务的蜂窝身份验证”一书和 RFC2246,PKI 现有最大的用例之一源于在传输层安全 (TLS) 中使用证书,并且 TLS 支持客户端证书。
  • 代码签名:随着最近广泛宣传的数据泄露事件,代码签名已成为 PKI 更受欢迎的用例之一。数字签名提供数据和消息的真实性和完整性。以数学方式证明自数据签名发生的特定时间以来数据没有改变的能力是一个非常强大的工具。这使得对数字签名文档、程序和其他数据对象的信任成为可能。软件开发公司应该签署他们的应用程序代码,以便最终用户可以验证代码不仅是由受信任的来源分发的,而且代码没有以任何方式被更改或受到有害的感染。相同的概念可以应用于数字签名,并且对于管理文档很重要,例如法律文件(合同、文件等)、发票和报告。[参考]
  • Intranet SSL、802.1x Authentication、S/MIME、IPSec、Authenticating Enterprise Users:根据本文,PKI 的安全功能在企业网络环境中的几个常见用例中非常有用,例如 Intranet SSL、802.1x Authentication、S/MIME , IPSec, 验证企业用户。

                           3. How are client certificates used in PKI?
    
  • Client Certificate 和 SSL Server Certificate 的定义和区别说明了用法:

  • 客户端证书:可以是外部伙伴和内部伙伴的传输证书。如果出站传输是 HTTPS 并且需要客户端身份验证,您将需要 SSL 客户端证书。在大多数情况下,SSL 客户端证书必须由 CA(CA 的另一个角色)签名和颁发。如果证书在测试环境中使用,它可以是自签名的。换句话说,客户端证书,顾名思义,用于识别客户端或用户,在确保人们在线安全方面发挥着至关重要的作用,用于识别客户端或用户,向服务器验证客户端并准确地确定他们是谁。它们用于向服务器验证客户端。它不用于数据的加密或解密,但代表用户身份并提供用户身份验证功能。它们由证书的公钥部分和仅由颁发证书的实体持有的私钥组成。证书颁发机构可能是提供证书服务作为其业务一部分的知名公共组织,也可能是只有您的公司使用的内部服务器。在任何一种情况下,客户端证书都将包含某些信息,这些信息可以单独或作为组的一部分来识别用户。还可以将服务器配置为将证书映射到用户帐户。这可以是一对一映射,其中特定证书映射到单个用户帐户,也可以是多对一映射,其中服务器使用证书信息中的某些字段将任何匹配的证书映射到一个指定的用户帐户。使用映射时,证书允许用户被授予或拒绝以特定用户身份访问资源。以这种方式使用客户端证书时,
  • SSL 服务器证书:用于识别服务器。通常,它们被发布到主机名,可以是机器名(如“PIIS-SVR01”)或主机头(如“www.example.com”)。SSL 服务器证书提供加密和安全功能并启用 SSL 服务器身份验证。SSL 服务器证书的 CA 必须在参与者之间交换。

它们之间唯一的相似之处是关键字“证书”。它们都包含公钥和私钥。就此而言,每个证书都包含一个公钥和一个私钥。不能将服务器证书用作客户端证书或反之亦然。

                           4. What is a Certificate Authority's role in PKI?

在最初的 Diffie 和 Hellman 模型中,公钥将从安全存储库中检索。此存储库的安全性用于将公钥绑定到密钥所有者的其他属性。为了支持离线绑定的生产和分发,Kohnfelder 引入了证书的概念(走向实用的公钥密码系统),其中公钥和标识符(例如,名称)被放置在由证书颁发机构签名的数据结构中(CA)并在不安全的存储库中提供。

因此,总而言之,由于数据发起者和数据接收者之间不存在直接信任,PKI 依赖于第三方信任点系统,CA 扮演信任仲裁者的角色。CA 首先毫无疑问地确定公钥-私钥所有者的身份,然后通过将所有者的公钥嵌入到带有 CA 签名的证书中来保证所有者的身份。任何信任此 CA 的人都可以验证 CA 的签名,从而验证证书所有者的身份。

在此处输入图像描述

我设计了一个图像作为问题的简短答案:用于阅读图像的文本在新选项卡中打开图像

在此处输入图像描述

有关更多详细信息,请参阅我之前的答案。