使用openssl生成自签名证书时,如何指定证书的有效期(到期日期)?

13

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

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

$ openssl req -new -x509 -days 3650 -config ./openssl/ca.cnf -key ./dist/ca_key.pem -out ./dist/ca_cert.pem

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

$ openssl x509 -enddate -noout -in ./dist/ca_cert.pem
notAfter=Aug 23 11:29:57 2028 GMT

在所有的地方/教程中,人们也使用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
...

如果我不使用-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

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

在.cnf配置文件中,我必须指定-days选项的位置在哪里?

1个回答

15

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

ca工具则有所不同,在这里可以看到从配置文件中读取天数(链接)

有几种方法可以为CA生成自签名证书。使用req工具似乎很流行,因为你可以在一条命令中完成。我喜欢另一种选项,即(另外)使用ca工具,就像处理任何证书一样。这样,即使您的自签名CA证书最终也会出现在CA管理中。它还提供了一种实现您所要求的功能的方法,即在my_ca部分的default_days配置选项中。

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

openssl req -newkey rsa:2048 -keyout dist/ca_key.pem -out ca_csr.pem -config openssl/ca.cnf

然后像处理任何CSR一样将CSR提交给CA,但使用-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

与我的情况类似,您配置文件中my_ca部分的default_days设置将会被应用:

$ openssl x509 -enddate -noout -in ./dist/ca_cert.pem
notAfter=Aug 23 15:21:17 2028 GMT
请注意,所有这些命令都依赖于您配置文件的内容。您可能需要尝试一下才能让它们适合您的需求,但这可以为您提供总体方法。

请注意,所有这些命令都依赖于您的配置文件内容。您可能需要尝试调整它们以使其适合您的需求,但这可以为您提供总体方法。


1
创建 CSR 但不包括密钥:openssl req -new -sha256 -key private/ca.key -out ca_csr.csr -config openssl_ca.cnf - uzay95

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接