如何为同一个 Common Name 颁发多个证书?

spr*_*aff 8 certificate openssl pki ssl-certificate certificate-authority

我正在为 Intranet 创建一个证书颁发机构。

我已经生成了根和中间 CA,并使用中间 CA 成功签署了服务器证书。服务器证书具有CN=mysite.com.

将来,此服务器证书将过期,我将需要颁发一个新证书。但是,如果我创建另一个相同的 CSR,CN=mysite.com那么当我签署它时,我会得到

failed to update database
TXT_DB error number 2
Run Code Online (Sandbox Code Playgroud)

如果我用不同的 CN 创建一个新的 CSR,这个错误就会消失,但 CN 必须相同,否则浏览器不会说它有效,对吧?

我该如何解决?

编辑:我正在遵循本指南——在链接页面结束之前一切都很好,但是当我尝试重复此页面上的步骤以创建第二个证书时,openssl 要求我为新证书提供不同的 CN。

SUBJ="/C=$C/ST=$ST/L=$L/O=$O/OU=$OU/CN=$CN"

# Generate CSR
echo "$PW" | openssl req \
    -config "$CAROOT/intermediate/openssl.cnf" \
    -new -sha256 -subj "$SUBJ" -passin stdin \
    -key "$PRIV_ENC" -out "$CSR_INT" >/dev/null 2>&1 ||
{
    >&2 echo "Could not openssl req";
    exit 1;
}

# Sign CSR
openssl ca \
    -config "$CAROOT/intermediate/openssl.cnf" \
    -batch -extensions server_cert \
    -days "$HTTP_DAYS" -notext -md sha256 \
    -in "$CSR_INT" -out "$CRT_INT" ||
{
    >&2 echo "Could not openssl ca";
    exit 1;
}
Run Code Online (Sandbox Code Playgroud)

这是openssl ca失败的。

小智 11

如果要创建具有相同主题的多个证书,可以像这样更改配置:

您可以在CA部分(可能更改[CA_default])在openssl.cnf设置

unique_subject = no
Run Code Online (Sandbox Code Playgroud)

但是这个设置也保存在 file 中index.txt.attr,你也必须改变它。否则它将无法工作。


dav*_*085 6

你需要骗子吗?传统浏览器和客户端要求主题名称的 CommonName字段与主机名匹配;现代人更喜欢 SubjectAlternativeName (SAN)扩展中的条目这样做。您可以将其他字段设置为不同,例如

O=Floo Manufacturing, OU=floo server 2016, CN=www.floo.example.com
O=Floo Manufacturing, OU=floo server 2017, CN=www.floo.example.com
Run Code Online (Sandbox Code Playgroud)

并且主题 DN 是唯一的,即使 CommonName 本身不是。或者对于现代客户端,您可以放入www.floo.example.comSAN 并使用完全没有 CommonName 的唯一主题。但是让 openssl 做 per-cert SAN 有点不方便;参见例如https://security.stackexchange.com/questions/113484/followup-to-one-liner-to-create-cert-request-with-san

允许欺骗:官方方式

在您的配置文件(即$CAROOT/intermediate/openssl.cnf)中,转到CA的“部分”(由[somename]带有可选空格的表单行分隔)。由于您没有在命令行上使用,因此部分名称是该部分或默认部分中的值(在第一行之前的顶部);看着你的链接,它可能是。添加一行-namedefault_ca[ca][somename][CA_default]

 unique_subject=no
Run Code Online (Sandbox Code Playgroud)

带间距和跟随# comment可选。或者,如果您已经有一行用于更改和/或取消注释此项目,但在您的链接附近查看您可能没有。

请参阅ca(1ssl)您的系统或网络上的手册页CONFIGURATION FILE OPTIONS 下。

允许欺骗:非官方方式

清空(截断)配置database文件,该文件通常index.txt位于您的链接附近,他们显然使用了该文件。或者编辑该文件并删除要重复使用的主题的行- 但在这种情况下,您似乎只有一个或几个并且您想重新使用它或所有他们,所以清空文件更简单。

  • TL;DR - 将 `OU` 更改为一些变体。 (3认同)