使用 openssl 为生成的自签名证书指定天数(到期日期)

Ale*_*dko 7 ssl openssl ssl-certificate

我还没有找到在哪里可以问这个问题,但看起来它是正确的地方

使用以下命令,我可以为证书颁发机构 (CA) 生成自签名证书:

$ openssl req -new -x509 -days 3650 -config ./openssl/ca.cnf -key ./dist/ca_key.pem -out ./dist/ca_cert.pem
Run Code Online (Sandbox Code Playgroud)

您可以看到-days设置结束日期的选项。如果我检查生成的证书,我会看到该days选项有效:

$ openssl x509 -enddate -noout -in ./dist/ca_cert.pem
notAfter=Aug 23 11:29:57 2028 GMT
Run Code Online (Sandbox Code Playgroud)

在所有地方/教程中,人们也使用days选项。

但是,如何在.cnf配置中指定相同的选项?我调查了很多文章,但似乎没有用(ca.cnf):

[ ca ]
default_ca      = my_ca
default_days    = 3650 # does not work
days            = 3650 # does not work

[ my_ca ]
...
default_days    = 3650 # does not work
days            = 3650 # does not work
...

[ req ]
...
default_days    = 3650 # does not work
days            = 3650 # does not work
...
Run Code Online (Sandbox Code Playgroud)

如果我不使用-days选项,以上都不起作用:

$ openssl req -new -x509 -config ./openssl/ca.cnf -keyout ./dist/ca_key.pem -out ./dist/ca_cert.pem
$ openssl x509 -enddate -noout -in ./dist/ca_cert.pem
notAfter=Sep 25 11:38:48 2018 GMT
Run Code Online (Sandbox Code Playgroud)

您可以看到已使用默认 30 天。

.cnf我必须在配置中的哪个位置指定-days选项?

Rei*_*eek 5

查看它的源代码,该req工具似乎不支持从配置文件中读取天数。该变量days仅在几个明显的地方被修改。

这在ca工具中有所不同,您可以在此处查看从配置文件读取的天数。

有多种方法可以为 CA 生成自签名证书。使用该req工具似乎很受欢迎,可能是因为您可以一次性完成。我更喜欢的另一种选择是(另外)使用该ca工具,就像使用任何证书一样。这样,即使是您的自签名 CA 证书也会在 CA 管理中结束。它也恰好为您提供了一种方法来完成您的要求,使用部分中的default_days配置选项my_ca

例如,您可以使用以下命令实现。首先创建一个证书签名请求 (CSR),同时生成一个密钥对:

openssl req -newkey rsa:2048 -keyout dist/ca_key.pem -out ca_csr.pem -config openssl/ca.cnf
Run Code Online (Sandbox Code Playgroud)

然后将 CSR 提交给 CA,就像您提交任何 CSR 一样,但可以-selfsign选择。这需要首先准备您的 CA 目录结构,如果您想设置自己的 CA,无论如何您都必须这样做。例如,您可以在此处找到相关教程。提交请求可以按如下方式进行:

ca -selfsign -keyfile dist/ca_key.pem -in ca_csr.pem -out dist/ca_cert.pem \
    -outdir root-ca/cert -config openssl/ca.cnf
Run Code Online (Sandbox Code Playgroud)

设置default_daysmy_ca您的配置文件的部分将被应用,因为它在我的情况做的:

$ openssl x509 -enddate -noout -in ./dist/ca_cert.pem
notAfter=Aug 23 15:21:17 2028 GMT
Run Code Online (Sandbox Code Playgroud)

请注意,这些命令都取决于您的配置文件的内容。您可能必须尝试使用​​它们才能使它们为您工作,但这为您提供了整体方法。