我有一个客户端和一个服务器。我只想验证与我的服务器的连接,而不是尝试建立对其他人的信任,因此我不关心使用真正的CA进行签名。
选项1:生成自签名CA(ssCA)并使用它来签署证书(C)。然后将ssCA安装到客户端的根密钥库中,并设置我的服务器使用证书C。
选项2:生成自签名证书(SSC)。将SSC安装到客户端的根密钥库中。设置我的服务器使用证书SSC。
第二个选项似乎是一个更简单的过程。那仍然有效吗?
针对您的使用情况,如果您为特定服务生成自签名证书,则是否具有CA标志(基本限制扩展)并不重要。只有当您想要构建自己的PKI时,才需要它成为CA证书以便能够签发其他证书。如果您为此服务生成的证书是CA证书,那么它不应该造成任何伤害。更重要的是您如何配置客户端信任该证书以用于此特定服务器(例如,浏览器应该可以轻松地创建显式例外)。如果配置机制遵循PKI模型(而不使用特定例外),由于不需要构建链路(只有一张证书),您应该能够将证书直接导入客户端的信任锚点,而无论它是否为CA证书(但这可能取决于客户端的配置机制)。
两种选项都是有效的,选项2更简单。
当您需要多个证书时,选项1(设置自己的CA)更可取。在公司中,您可能会建立自己的CA,并将该CA的证书安装在所有客户端的根密钥库中。然后,这些客户端将接受由您的CA签名的所有证书。
选项2(自签名证书而无需CA)更容易。如果您只需要一个单独的证书,那么这就足够了。将其安装在客户端的密钥库中即可。但是,当您需要第二张证书时,您需要再次在所有客户端上安装它。
此处是进一步信息的链接:创建证书颁发机构和自签名SSL证书
openssl x509 -noout -text -in $YOUR_CERT
来查看文件内容的差异: X509v3 extensions:
X509v3 Basic Constraints:
CA:TRUE, pathlen:0
在您的自签名证书中,它是这样的:
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
如果您需要更多的证书(C),您需要创建一个自签名CA(ssCA)。
如果您只需要一个证书,您可以创建一个自签名证书(SSC)。
为了信任单个证书(SSC),您需要将SSC安装到客户端的根密钥库中。
如果您需要同时信任多个证书,则需要创建一个自签名CA(ssCA),然后将ssCA安装到客户端的根密钥库中。
您必须始终拥有根CA,CA具有可用于签署较低级别证书的密钥和可嵌入客户端接受的根证书,用于验证较低级别证书以检查其是否有效。自签名只是意味着您是自己的CA。每当创建自签名证书时,您都需要创建一个CA,然后使用该CA签署站点证书。