自签名CA和自签名证书之间的区别

时间:2010-10-26 13:57:16

标签: ssl ssl-certificate

我不清楚CA密钥和证书之间的区别。 CA密钥不仅仅是证书吗?让我试着用一个例子来澄清。

我有一个客户端和一个服务器。我只是想验证我与服务器的连接,而不是试图与其他人建立信任,所以我不关心用真正的CA签名。

选项1:生成自签名CA( ssCA )并使用该CA签署证书( C )。然后我将 ssCA 安装到我客户端的根密钥库中,并设置我的服务器以使用证书 C

选项2:生成自签名证书( SSC )。将 SSC 安装到客户端的根密钥库中。设置我的服务器以使用证书 SSC

第二种选择似乎是一个更简单的过程。这应该还行吗?

5 个答案:

答案 0 :(得分:58)

首先,关于密钥和证书(关于“CA密钥”)​​之间的区别,在谈论公钥证书(通常是X.509)时使用了3个部分:公钥,私钥和证书。 公钥和私钥形成一对。您可以使用私钥进行签名和解密,您可以验证(签名)并使用公钥进行加密。公钥旨在分发,而私钥应保密。

公钥证书是公钥和各种信息之间的组合(主要是关于密钥对的所有者的身份,谁控制私钥),这种组合使用私钥进行签名。颁发证书。 X.509证书具有主题专有名称和颁发者专有名称。颁发者名称是颁发证书的实体的证书的主题名称。自签名证书是发行人和主题相同的特殊情况。 通过签署证书的内容(即,发布证书),发行者断言其内容,特别是密钥,身份(主题)和各种属性(其可以指示用户的意图或使用范围)之间的绑定。证书)。

除此之外,PKIX规范定义了一个扩展(给定证书的一部分),它指示证书是否可以用作CA证书,即它是否可以用作另一个证书的颁发者。 / p>

由此,您可以在最终实体证书(您要为用户或服务器验证的证书)和您信任的CA证书之间构建一系列证书。在您的服务的最终实体证书和您信任的CA证书之间可能存在中间CA证书(由其他CA证书颁发)。您不需要在顶部使用根CA(自签名CA证书),但通常情况如此(如果您愿意,可以选择直接信任中间CA证书)。

对于您的用例,如果您为特定服务生成自签名证书,那么它是否具有CA标志(基本约束扩展)并不重要。您需要它才能成为CA证书才能发布其他证书(如果您想构建自己的PKI)。如果为此服务生成的证书是CA证书,则不应造成任何伤害。更重要的是您可以将客户端配置为信任该特定服务器的证书(例如,浏览器应该可以让您轻松地做出明确的异常)。如果配置机制遵循PKI模型(不使用特定的例外),因为不需要构建链(只有一个证书),您应该能够直接导入证书作为信任锚的一部分。您的客户端,无论是否是CA证书(但这可能取决于客户端的配置机制)。

答案 1 :(得分:49)

两个选项都有效,选项2更简单。

当您需要多个证书时,最好选择1(设置您自己的CA)。在公司中,您可以设置自己的CA并在所有客户端的根密钥库中安装该CA的证书。然后,这些客户将接受您的CA签署的所有证书。

选项2(自签名没有CA的证书)更容易。如果您只需要一个证书,那么这就足够了。将它安装在客户的密钥库中,您就完成了。但是当您需要第二个证书时,您需要再次在所有客户端上安装它。

以下链接包含更多信息:Creating Certificate Authorities and self-signed SSL certificates

答案 2 :(得分:5)

您可以openssl x509 -noout -text -in $YOUR_CERT查看文件内容之间的差异:

在自签名CA中,您可以看到:

    X509v3 extensions:                                                          
        X509v3 Basic Constraints:
            CA:TRUE, pathlen:0

在您的自签名证书中,它是:

    X509v3 extensions:                                                          
        X509v3 Basic Constraints:
            CA:FALSE

答案 3 :(得分:1)

您必须始终拥有根CA,CA具有可用于签署较低级别证书的密钥和可以嵌入客户端上已接受的根证书中的根证书,并用于验证较低的证书检查它们是否有效。自签名意味着您是自己的CA.每当创建自签名证书时,您都会创建一个ca,然后使用该CA签署一个站点证书。

答案 4 :(得分:1)

如果您需要更多证书 (C),您需要创建一个自签名 CA (ssCA)。
如果您需要单个证书,您只需创建一个自签名证书 (SSC)。
要信任单个证书 (SSC),您需要将 SSC 安装到客户端的根密钥库中。
要一次信任多个证书,您需要创建一个自签名 CA (ssCA),然后将 ssCA 安装到客户端的根密钥库中。