在工作中,我们的许多内部服务器都有我们自己生成的 SSL 证书openssl
(通过一些简单的脚本)。生成工作正常,但后续处理需要改进,因此我们丢失了服务器的 SSL 证书的所有非加密副本。结果是我们必须花一些时间来制作新的证书并部署它,但这导致了我的问题。
当我尝试创建新的 SSL 证书时internal.server.company
,openssl 在该过程结束时失败,并显示
failed to update database
TXT_DB error number 2
因为数据库中已经存在该主机的证书。
如果旧证书已过期,我相信openssl ca -updatedb
会将其从数据库中删除,但事实并非如此。
我可以通过在编辑器中打开(相关的)index.txt
,搜索internal.server.company
并删除找到的行来解决这个问题 - 但这看起来像是一个黑客。有没有一种好方法可以让 openssl 接受我想为我认为已经拥有证书的名称创建一个新证书?
答案1
在与数据库(文件index.txt
)相同的文件夹中创建一个文件index.txt.attr
并添加以下内容:
unique_subject = no
如果您不确定数据库文件所在的位置,请检查openssl.cnf
您正在使用的文件,如下所示:
[ CA_default ]
dir = ./demoCA # Where everything is kept
certs = $dir/certs # Where the issued certs are kept
crl_dir = $dir/crl # Where the issued crl are kept
database = $dir/index.txt
在上面的示例中,数据库位于index.txt
并且驻留在./demoCA
.因此,您需要将新index.txt.attr
文件放入./demoCA
.
如果数据库文件名只是index
您需要命名新文件index.attr
。