如何生成openssl证书,有效期不到一天?

m.d*_*han 22 linux openssl

我正在尝试使用openssl命令创建CA签名的最终实体证书,如下所示,在Linux中:

# openssl genrsa -des3 -out clientkey.pem 2048
# openssl req -new -key clientkey.pem -out clientcert.csr
# cp clientkey.pem clientkey.pem.org
# openssl rsa -in clientkey.pem.org -out clientkey.pem
# openssl x509 -req -days 1 -in clientcert.csr -out clientcert.pem -CA cacert.pem -CAkey cakey.pem -CAcreateserial
Run Code Online (Sandbox Code Playgroud)

是否可以以小时而不是天来指定到期时间?我需要生成证书,比如1小时的到期时间,以进行一些测试.

Openssl命令似乎支持一些指定startdate和enddate的选项,但我无法弄清楚如何使用它.(我假设enddate可能支持指定日期和时间).

#openssl x509 -req -startdate 120814050000Z -enddate 120814060000Z -in clientcert.csr -out clientcert.pem -CA cacert.pem -CAkey cakey.pem -CAcreateserial

unknown option 120814050000Z
usage: x509 args
.
.
-startdate      - notBefore field
-enddate        - notAfter field
.
.
-days arg       - How long till expiry of a signed certificate - def 30 days
Run Code Online (Sandbox Code Playgroud)

小智 31

x509命令的-startdate和-enddate选项是显示选项.您可以使用ca命令设置特定的开始和结束时间,而不是签署证书.

尝试这样的事情:

openssl ca -config /etc/openssl.cnf -policy policy_anything -out clientcert.pem -startdate 120815080000Z -enddate 120815090000Z -cert ca.pem -keyfile cakey.pem -infiles clientcert.csr
Run Code Online (Sandbox Code Playgroud)

  • 我找不到任何方法来使这个命令工作而不需要一个巨大的、正确构建的 openssl.cnf 文件。这看起来很荒谬,因为如果我不需要覆盖日期,我可以使用简单的 x509 命令代替。有什么办法可以在没有配置的情况下完成这项工作吗? (6认同)
  • 从ca手册页,日期格式为YYMMDDHHMMSSZ (2认同)

小智 8

或者这是我发现的另一种工作方式

假设我希望我的证书在 10 分钟内过期作为测试

当前日期是 2 月 17 日
当前时间是 4:40pm

首先,我将系统日期设置为 -1 天:2 月 16 日
我将系统时钟设置为 +10 分钟:下午 4:50

我创建的证书openssl x509将在 1 天后过期,这实际上意味着今天过期Feb 17th

openssl x509 -req -days 1 -in clientcert.csr -signkey cert.key -out ssl.crt
Run Code Online (Sandbox Code Playgroud)

然后,我将系统时钟和时间重置为实际日期和时间,瞧,您的证书将在 10 分钟后过期!

显然这不是真正的做事方式,但是创建供开发使用的自签名证书很好又很容易。

  • 移动时钟是一种糟糕的做法。认为你的脚本在服务器上运行 - 移动时间会把事情搞砸的。 (25认同)
  • 调整应用程序时间的另一种方法是使用 faketime,如此处所述 https://unix.stackexchange.com/questions/359225/create-self-signed-certificate-with-end-date-in-the-past 也许? (4认同)

Vel*_*elu 6

第1步。安装 faketime

sudo apt-get install faketime
Run Code Online (Sandbox Code Playgroud)

第2步。在当前日期前一天生成过期的证书。

faketime 'last friday 5 pm' /bin/bash -c 'openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 6 -nodes'
Run Code Online (Sandbox Code Playgroud)

Step-3验证证书有效期

openssl x509 -noout -text -in cert.pem
Run Code Online (Sandbox Code Playgroud)

证书有效期 - 屏幕截图

  • 如果可以是文本,请不要提供图像信息 (4认同)