![为什么 openssl 忽略自签名证书的到期日期 -days?](https://linux22.com/image/724335/%E4%B8%BA%E4%BB%80%E4%B9%88%20openssl%20%E5%BF%BD%E7%95%A5%E8%87%AA%E7%AD%BE%E5%90%8D%E8%AF%81%E4%B9%A6%E7%9A%84%E5%88%B0%E6%9C%9F%E6%97%A5%E6%9C%9F%20-days%EF%BC%9F.png)
self-signed
我有一个可以生成证书并且运行良好的bash 脚本:
#! /bin/bash
# Generate self signed root CA cert
openssl req -nodes -x509 -days 358000 -newkey rsa:2048 -keyout ca.key -out ca.crt -subj "/C=IR/ST=TEH/L=Torento/O=CTO/OU=root/CN=es.example.com/[email protected]"
# Generate server cert to be signed
openssl req -nodes -newkey rsa:2048 -days 358000 -keyout server.key -out server.csr -subj "/C=IR/ST=TEH/L=Torento/O=CTO/OU=server/CN=es.example.com/[email protected]"
# Sign the server cert
openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt
# Create server PEM file
cat server.key server.crt > server.pem
# Generate client cert to be signed
openssl req -nodes -newkey rsa:2048 -days 358000 -keyout client.key -out client.csr -subj "/C=IR/ST=TEH/L=Torento/O=CTO/OU=client/CN=es.example.com/[email protected]"
# Sign the client cert
openssl x509 -req -in client.csr -CA ca.crt -CAkey ca.key -CAserial ca.srl -out client.crt
# Create client PEM file
cat client.key client.crt > client.pem
当我检查生成的到期时间时client.pem
,它显示到期时间为 8 月 10 日:
$ openssl x509 -enddate -noout -in client.pem
notAfter=Aug 10 12:32:07 2018 GMT
过期日期有什么问题吗?
答案1
有效性用openssl x509
而不是 来设置openssl req
。如果您将-days
选项与x509
命令一起放置,它将起作用。
您获得 30/08 是因为没有-days
选项可以覆盖 30 天的默认证书有效期,如x509
手册页中所述:
-days arg
指定证书的有效期。默认值为 30 天。
附注:如果您想要合理的安全性,生成有效期为 358000 天(980 年!)的证书太长了。
答案2
证书的有效期是在生成该证书时设置的。
openssl req
本身就产生了证书签名请求(企业社会责任)。-days
此处指定的将被忽略。openssl x509
从 CSR 颁发证书。这是-days
应予以指定。
但:
openssl req -x509
结合req
和x509
合二为一;它会生成 CSR 并对其进行签名,一次性颁发证书。这就是为什么req
支持-days
标志,因为它将其内部传递给x509
命令。