我是证书颁发机构方面的新手。不久前,我按照这篇文章设置了自己的证书颁发机构,并在其帮助下设置了自己的freelan
VPN 网络:
https://github.com/freelan-developers/freelan/wiki/X509-certificates-generation
基本上,我要做的就是拨打电话:
openssl req -new -x509 -extensions v3_ca -keyout key/ca.key -out crt/ca.crt -config ca.cnf
问题是ca.crt
,我认为我的证书是 的公钥,但ca.key
根据 ,该证书现已过期openssl
。我已使用此证书签署其他密钥,但不想再经历这种情况。
有什么方法可以让我简单地创建一个ca.crt
具有更长有效期的新文件吗?
我不记得我是否必须设置某个证书的有效期ca.crt
,但我认为我没有设置,因为它的有效期只有 1 个月。我想知道这是预期和推荐的,还是我在此过程中犯的一个错误?证书的ca.crt
有效期到底应该有多长?
我在网上找到了不同的命令,但不确定哪一个适合我,例如:https://stackoverflow.com/questions/13295585/openssl-certificate-verification-on-linux https://serverfault.com/questions/306345/certification-authority-root-certificate-expiry-and-renewal
答案1
如何更新我的证书颁发机构签名密钥?
您有两个问题需要解决。首先是终端实体(服务器和用户)证书的连续性。其次是根 CA 的变更。
有没有什么方法可以让我简单地创建一个具有更长有效期的新的 ca.crt 文件?
是的,但请参阅下面的详细信息。
第一个问题,即最终实体(服务器和用户)证书的连续性,主要通过在转移根 CA 时使用相同的公钥来解决。
新的自签名根 CA 仍需要安装到相关的信任存储中,但密钥的连续性意味着终端实体证书将不会需要重新颁发。如果您为根 CA 使用新的公钥,则将要需要重新颁发所有最终实体证书。
第二个问题,即根 CA 的延期,必定会发生,因为它已过期。这与重新认证根 CA 的问题相同,因为哈希从 SHA-1 更改为 SHA-256 以符合CA/浏览器基本要求现实生活中有不少CA都这么做过。
使用相同的公钥可以减轻轮转的影响。这也有助于增强安全控制,例如锁定 CA 的公钥。如果认证机构证书被固定(而不是公钥),那么它将在工具中产生很多无关的噪音,例如证书巡逻。
要转移 CA,您需要创建一个“等效”根 CA 证书(或尽可能接近等效证书)。用户代理唯一标识证书的方式概述在RFC 4158,互联网 X.509 公钥基础设施:认证路径构建。
RFC 4158 的缩写形式为 {主题专有名称,序列号} 可用于唯一标识存储中的证书。作为 CA 或颁发者,您应该确保序列号是唯一的,即使您重新认证。
终端实体证书还有其他唯一标识方式,包括授权密钥标识符 (AKID)。实际上,服务器的证书可以使用颁发者的哈希值{主题专有名称,序列号} 作为它的 AKID(如果我没记错的话)。
您似乎已经弄清楚了如何创建自签名 CA 证书,因此我不会讨论 OpenSSL 命令。
真正的问题出现在您的公钥/私钥对被泄露时。您无法在现有公钥下转移 CA,因此您必须颁发新的根 CA 证书并重新颁发所有终端实体证书。
总结一下,以下是你可以采取的行动:
- 对 CA 使用相同的公钥
- 对 CA 使用相同的专有名称
- 使用新的 CA 序列号
- 在所有客户端计算机上安装新颁发的 CA
- 不要重新颁发最终实体证书
答案2
根据https://serverfault.com/questions/306345/certification-authority-root-certificate-expiry-and-renewal下面的顺序应该有效:
openssl req -new -key key/ca.key -out key/newca.csr
openssl x509 -req -days 3650 -in key/newca.csr -signkey key/ca.key -out crt/newca.crt
答案3
更新根 CA
openssl req -new -key key/ca.key -out key/newca.csr
openssl x509 -req -days 3650 -in key/newca.csr -signkey key/ca.key -out
crt/newca.crt
密钥 prv/public CA 相同,序列号是新的。
openssl verify -CAfile ./cacert.crt_old -verbose mail.cert
error 20 at 0 depth lookup: unable to get local issuer certificate
openssl s_client -showcerts -CAfile ./cacert.crt -connect mail.corp:443
Verification error: unable to verify the first certificate