基本的自签名证书问题

信息安全 tls 视窗 证书
2021-08-30 01:14:35

关于自签名证书的几个基本问​​题

问题 1

自签名证书是否必须具有 CA?我意识到“真正的”证书必须是因为它可以被链验证,但是自签名呢?

问题2

如果自签名没有 CA - 它是否仍应进入受信任的 CA 存储以在使用它进行测试时不会导致链验证错误?

问题 3

有没有办法查看自签名证书是否由 CA 签名 - 如果它有 CA 是否会影响上述问题?然后我是否必须让 CA 信任它,或者我仍然可以将实际证书放在 CA 存储中以创建安全的 SSL 通道吗?

2个回答

证书由颁发它的 CA 签署。根据定义,自签名证书不是由 CA 颁发的(或者是它自己的 CA,如果您想这样查看)。

证书可能具有 CA 权力,即是否可以信任签署其他证书,这取决于它是否包含标志设置为(参见标准)的Basic Constraints扩展。cATRUE

发生的情况如下:当某些应用程序想要验证证书时(例如,想要与服务器进行 SSL 的 Web 浏览器,并且刚刚获得了服务器的证书),它会想要构建一个以“信任”开头的证书链锚”(其“受信任的根”证书存储中的证书之一)并以要验证的证书结尾(称为“EE”作为“最终实体”)。一条链有效的确切规则错综复杂且充满细节;为了这个答案的目的,让我们将自己限制在这些必要条件:

  • 链必须以信任锚开始。
  • 每个证书由链中的前一个证书签名(即每个证书上的签名将相对于存储在前一个证书中的公钥进行验证)。
  • 除最终实体外的每个证书都有一个Basic Constraints扩展名,其cA标志设置为TRUE.

因此,当用作信任锚时,自签名但非 CA 证书将被接受为作为最终实体证书有效(即,在完全简化为该证书的链中),但不是其他情况。这是正常情况。作为浏览器用户,当您想要接受给定的自签名证书为有效时,您实际上告诉浏览器自签名证书应该成为信任锚——但您当然不想信任该证书来颁发其他名称的其他证书!您只想信任它验证特定站点。

像往常一样,细节可能会有所不同——并非所有浏览器都以完全相同的方式做出反应。但核心概念仍然存在:

  • 自签名证书存在于 CA 世界之外:它不是由 CA 颁发的。
  • 客户端(浏览器)使用信任锚作为其信任的基础。
  • 通常,Web 服务器的自签名证书应该只为该服务器信任(如果有的话),即添加为信任锚,但标记为“适合颁发证书”。

当一个链被简化为单个证书时,即终端实体也是信任锚,那么这被称为直接信任:一个特定的证书是通过确切地已知而被信任的,而不是通过被颁发而被信任由受信任的 CA。

  1. 不可以。自签名证书不是由 CA 签名的 - 它是由自己签名的。但是,所有 CA 都会发布用于签署其他证书的自签名证书。“受信任的 CA”是包含在您的操作系统或浏览器中的一种,或者是您明确选择信任的一种。

  2. 取决于自签名证书。如果您将其用作 CA 并在您的组织中签署其他证书,那么我可能会将其添加到我的受信任的 CA 存储中。如果它仅用于对特定服务器进行身份验证,而不用作 CA,我会将其包含在不同的存储中,例如“受信任的发布者”。即使那样,我也会小心确保证书被小心地存储和处理——任何获得它的人都可以对你信任它的机器做任何他们想做的事情。我永远不会在我信任的 CA 存储中放置随机证书。

  3. 自签名证书位于信任链的末端——它表示“我是我自己的父母”。验证签署普通证书的证书链意味着验证每个签名者的签名,直到找到自签名证书。此时,自签名证书需要位于您受信任的 CA 存储中。