34

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

# 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

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

Openssl 命令似乎支持一些选项来指定开始日期和结束日期,但我无法弄清楚如何使用它。(我假设 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
4

5 回答 5

37

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
于 2012-08-15T07:04:22.237 回答
12

第1步。安装假时间

sudo apt-get install faketime

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

faketime 'last friday 5 pm' /bin/bash -c 'openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 6 -nodes'

Step-3验证证书有效期

openssl x509 -noout -text -in cert.pem

证书有效期 - 屏幕截图

于 2020-05-22T04:03:09.367 回答
4

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

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

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

首先,我将系统日期设置为 -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

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

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

于 2015-02-18T00:49:57.240 回答
3

尝试gossl,它允许以各种时间单位指定证书有效性开始日期和持续时间。

我开发它是为了克服命令行 openssl 的限制。该工具是轻量级的,在 Go 中实现,没有依赖关系,在 MIT 许可下。

于 2015-11-26T23:11:52.563 回答
-3

您可以将-days选项设置为 0:

openssl x509 -req -days 0 -in clientcert.csr -signkey cert.key -out ssl.crt

这将创建一个与notBefore当前notAfter时间相等的证书(即您的证书将立即过期)。

于 2019-04-12T08:37:02.213 回答