如何使用 openssl 续订过期但仍然有效的中间 CA?

如何使用 openssl 续订过期但仍然有效的中间 CA?

我们拥有自己的 OpenVPN 服务器 CA 基础设施。我们创建了一个自签名根 CA,然后为每个 OpenVPN 进程/网络创建了一个中间 CA。我们使用以下命令创建中间 CA:

openssl req -new -batch -days 3650 -newkey rsa:2048 -nodes sha256 -keyout network.hostname.ca.key -out sign_request.csr -subj "/C=land/ST=region/L=town/O=org/OU=CAnetwork/CN=cn/emailAddress=email" -config /path/to/config
openssl ca -cert root.ca.crt -keyfile root.ca.key -in sign_request.csr -out network.hostname.ca.crt -noemailDN -md sha256 -extensions v3_ca -outdir /some/dir -config /path/to/config -batch

现在,我们的中间 CA 即将到期(几个月后),我想续订证书。我尝试通过运行与 10 年前完全相同的命令来做到这一点,但我使用中间 ca 的旧密钥而不是生成新密钥(因为我希望颁发的证书保持有效!)。然而,这抱怨说Serial number 01 has already been issued。 Serial 01 是当前/即将到期的中间产品的序列号。

如何让 openssl 忽略现有的有效中间 CA 并以更长的有效期重新创建它,以便新 CA 仍将验证使用旧的过期 CA 创建的客户端证书?

答案1

在我看来,您的 CSR 生成命令是错误的:

openssl req -new -batch -days 3650 -newkey rsa:2048 -nodes sha256 -keyout network.hostname.ca.key -out sign_request.csr -subj "/C=land/ST=region/L=town/O=org/OU=CAnetwork/CN=cn/emailAddress=email" -config /path/to/config

将创建一个名为 network.hostname.ca.key 的全新密钥。如果您想真正续订,您可能需要使用现有的密钥。我认为它看起来像这样:

openssl req -new -batch -days 3650 -key network.hostname.ca.key -sha256 -out sign_request.csr -subj "/C=land/ST=region/L=town/O=org/OU=CAnetwork/CN=cn/emailAddress=email" -config /path/to/config

答案2

我认为问题是你不能拥有两个具有相同 CN 的证书同时有效。 openssl.cnf 中有一个选项允许这样做,但这不是您想要的。认为最好撤销 int ca 并使用相同的私钥和相同的属性创建一个新请求并对其进行签名。应该满足你的所有需求

发现这个链接解释得很好

https://serverfault.com/questions/306345/certification-authority-root-certificate-expiry-and-renewal

编辑:添加更多内容。似乎证书验证不仅包括颁发者 == int ca 主体颁发者序列号 #== int ca 序列号

因此,只需使用相同的详细信息更新 int ca - 您将获得不同的序列号

相关内容