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

时间:2018-08-26 11:45:25

标签: ssl openssl ssl-certificate

我找不到在哪里可以问这个问题,但看起来像是the right place

使用以下命令,我可以为证书颁发机构(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

在所有places / tutorials中,人们也使用days选项。

但是我如何在.cnf配置中指定相同的选项? 我调查了许多articles,但nothig似乎有效(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 个答案:

答案 0 :(得分:1)

its source code看,看来req工具不支持从配置文件中读取天数。变量days仅在几个明显的地方被修改。

这与ca tool不同,在这里您可以看到从配置文件here读取的天数。

有几种方法可以为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

然后将CSR提交给CA,就像处理任何CSR一样,但使用-selfsign选项。这要求首先准备您的CA目录结构,如果要设置自己的CA,则无论如何都必须做。例如,您可以找到关于该here的教程。提交请求可以按照以下步骤进行:

ca -selfsign -keyfile dist/ca_key.pem -in ca_csr.pem -out dist/ca_cert.pem \
    -outdir root-ca/cert -config openssl/ca.cnf

将应用配置文件default_days部分中的设置my_ca,就像我的情况一样:

$ openssl x509 -enddate -noout -in ./dist/ca_cert.pem
notAfter=Aug 23 15:21:17 2028 GMT

请注意,这些命令全部取决于配置文件的内容。您可能需要与它们一起玩耍才能使它们为您工作,但这为您提供了总体方法。