我正在为内部网创建证书颁发机构。
我已生成根 CA 和中间 CA,并使用中间 CA 成功签署了服务器证书。服务器证书已CN=mysite.com
。
将来此服务器证书将过期,我需要颁发新证书。但是,如果我使用相同的证书创建另一个 CSR,CN=mysite.com
那么当我签名时,我会得到
failed to update database
TXT_DB error number 2
如果我使用不同的 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;
}
这是openssl ca
失败的。
答案1
你需要重复品吗?传统上,浏览器和客户端要求 CommonName场地主题名称与主机名匹配;现代的更喜欢在主题替代名称 (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
并且主题 DN 是唯一的,尽管 CommonName 本身不是唯一的。或者在现代客户端中可以放入www.floo.example.com
SAN 并使用没有 CommonName 的唯一主题。但是使用 openssl 执行每个证书 SAN 有点不方便;参见例如https://security.stackexchange.com/questions/113484/followup-to-one-liner-to-create-cert-request-with-san
允许重复:官方方式
在你的配置文件中(即$CAROOT/intermediate/openssl.cnf
)转到“部分”(由[somename]
带有可选空格的形式的行分隔)为您的 CA。由于您没有在命令行上使用,因此部分名称是部分或默认部分中-name
的值(在第一行之前的顶部);查看您的链接附近,它可能是。添加一行default_ca
[ca]
[somename]
[CA_default]
unique_subject=no
间距和后面的内容# comment
可选。或者,如果您已经有了此项目的一行,请更改和/或取消注释,但查看您的链接,您可能没有。
ca(1ssl)
请参阅系统的手册页或网络在配置文件选项下。
允许重复:非官方途径
空的(截断)database
常规情况下配置的文件index.txt
从您的链接看,他们显然使用了它。或者编辑该文件并删除以下行对于您想要重新使用的主题 - 但在这种情况下,您似乎只有一个或几个,并且您想要重新使用它或全部,因此清空文件更简单。
答案2
如果您想创建具有相同主题的多个证书,您可以像这样更改配置:
您可以在设置中的CA 部分进行更改(可能[CA_default]
)openssl.cnf
unique_subject = no
但此设置也保存在文件中index.txt.attr
,您也必须更改它。否则它将不起作用。