我找不到在哪里可以问这个问题,但看起来像是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
选项吗?
答案 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
请注意,这些命令全部取决于配置文件的内容。您可能需要与它们一起玩耍才能使它们为您工作,但这为您提供了总体方法。