我正在为Intranet创build一个证书颁发机构。
我已经生成了根和中间CA,并使用中间CA成功签署了服务器证书。 服务器证书有CN=mysite.com 。
在将来,这个服务器证书将过期,我将需要发布一个新的。 但是,如果我使用相同的CN=mysite.com创build另一个CSR,那么当我签署它时,我会得到
failed to update database TXT_DB error number 2
如果我使用不同的CN创build一个新的CSR,这个错误就会消失,但是CN必须是相同的,否则浏览器不会说这是有效的,对吗?
我该如何解决?
编辑:我正在按照本指南 – 一切都很好,直到链接页面结束,但是当我尝试重复此页上的步骤来创build第二个证书,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
你需要傻瓜吗? 传统上,浏览器和客户端要求主题名称的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来执行per-cert SAN有点不方便; 见例如https://security.stackexchange.com/questions/113484/followup-to-one-liner-to-create-cert-request-with-san
允许模糊: 官方的方式
在您的configuration文件 ( $CAROOT/intermediate/openssl.cnf )中,转到“部分”(由带有可选空格的[somename]forms的行分隔)。 由于您没有在命令行上使用-name ,因此节名是[ca]节中的default_ca的值或默认节(位于第一个[somename]行之前的顶部); 看看你的链接可能是[CA_default] 。 添加一行
unique_subject=no
间距和以下# comment可选。 或者,如果你已经有一个这个项目更改和/或取消注释,但看看你的链接,你可能不会。
请参阅您的系统上的man page ca(1ssl)或configuration文件选项下的网页 。
允许欺骗: 非官方的方式
清空 (截断)传统上是index.txt的configuration的database文件,并在你的链接附近,他们显然使用它。 或者编辑该文件并删除要重新使用的主题的行 ,但是在这种情况下,您只有一个或几个,而您想要重新使用它或全部他们,所以清空文件更简单。
如果您想创build具有相同主题的多个证书,则可以更改您的configuration:
您可以在openssl.cnf中的CA部分更改(可能是[CA_default] )设置
unique_subject = no
但是这个设置也保存在文件index.txt.attr ,你也必须改变它。 否则,它将无法正常工作。