关于自签名证书的几个基本问题
问题 1
自签名证书是否必须具有 CA?我意识到“真正的”证书必须是因为它可以被链验证,但是自签名呢?
问题2
如果自签名没有 CA - 它是否仍应进入受信任的 CA 存储以在使用它进行测试时不会导致链验证错误?
问题 3
有没有办法查看自签名证书是否由 CA 签名 - 如果它有 CA 是否会影响上述问题?然后我是否必须让 CA 信任它,或者我仍然可以将实际证书放在 CA 存储中以创建安全的 SSL 通道吗?
关于自签名证书的几个基本问题
问题 1
自签名证书是否必须具有 CA?我意识到“真正的”证书必须是因为它可以被链验证,但是自签名呢?
问题2
如果自签名没有 CA - 它是否仍应进入受信任的 CA 存储以在使用它进行测试时不会导致链验证错误?
问题 3
有没有办法查看自签名证书是否由 CA 签名 - 如果它有 CA 是否会影响上述问题?然后我是否必须让 CA 信任它,或者我仍然可以将实际证书放在 CA 存储中以创建安全的 SSL 通道吗?
证书由颁发它的 CA 签署。根据定义,自签名证书不是由 CA 颁发的(或者是它自己的 CA,如果您想这样查看)。
证书可能具有 CA 权力,即是否可以信任签署其他证书,这取决于它是否包含标志设置为(参见标准)的Basic Constraints扩展。cATRUE
发生的情况如下:当某些应用程序想要验证证书时(例如,想要与服务器进行 SSL 的 Web 浏览器,并且刚刚获得了服务器的证书),它会想要构建一个以“信任”开头的证书链锚”(其“受信任的根”证书存储中的证书之一)并以要验证的证书结尾(称为“EE”作为“最终实体”)。一条链有效的确切规则错综复杂且充满细节;为了这个答案的目的,让我们将自己限制在这些必要条件:
Basic Constraints扩展名,其cA标志设置为TRUE.因此,当用作信任锚时,自签名但非 CA 证书将被接受为作为最终实体证书有效(即,在完全简化为该证书的链中),但不是其他情况。这是正常情况。作为浏览器用户,当您想要接受给定的自签名证书为有效时,您实际上告诉浏览器自签名证书应该成为信任锚——但您当然不想信任该证书来颁发其他名称的其他证书!您只想信任它以验证特定站点。
像往常一样,细节可能会有所不同——并非所有浏览器都以完全相同的方式做出反应。但核心概念仍然存在:
当一个链被简化为单个证书时,即终端实体也是信任锚,那么这被称为直接信任:一个特定的证书是通过确切地已知而被信任的,而不是通过被颁发而被信任由受信任的 CA。
不可以。自签名证书不是由 CA 签名的 - 它是由自己签名的。但是,所有 CA 都会发布用于签署其他证书的自签名证书。“受信任的 CA”是包含在您的操作系统或浏览器中的一种,或者是您明确选择信任的一种。
取决于自签名证书。如果您将其用作 CA 并在您的组织中签署其他证书,那么我可能会将其添加到我的受信任的 CA 存储中。如果它仅用于对特定服务器进行身份验证,而不用作 CA,我会将其包含在不同的存储中,例如“受信任的发布者”。即使那样,我也会小心确保证书被小心地存储和处理——任何获得它的人都可以对你信任它的机器做任何他们想做的事情。我永远不会在我信任的 CA 存储中放置随机证书。
自签名证书位于信任链的末端——它表示“我是我自己的父母”。验证签署普通证书的证书链意味着验证每个签名者的签名,直到找到自签名证书。此时,自签名证书需要位于您受信任的 CA 存储中。