如何生成有效期少于 1 天的 openssl 证书?
Posted
技术标签:
【中文标题】如何生成有效期少于 1 天的 openssl 证书?【英文标题】:How to generate openssl certificate with expiry less than one day? 【发布时间】:2012-08-10 10:46:52 【问题描述】:我正在尝试在 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
【问题讨论】:
给出的答案是否解决了您的问题?如果是,您应该尝试将此问题标记为“已回答”。 【参考方案1】: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
【讨论】:
我能够将开始和结束日期设置为过去的值,并且效果也很好。 我找不到任何方法来使这个命令工作而不需要一个巨大的、正确构建的 openssl.cnf 文件。这看起来很荒谬,因为如果我不需要覆盖日期,我可以改用普通的 x509 命令。有没有什么方法可以在没有配置的情况下完成这项工作?【参考方案2】:第 1 步。 安装 faketime
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
【讨论】:
如果可以是文字,请不要以图片形式提供信息【参考方案3】:或者这是我发现的另一种工作方式
假设我希望我的证书在 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 分钟后过期!
显然不是真正的做事方式,但很容易创建自签名证书以供开发人员使用。
【讨论】:
移动时钟是一种糟糕的做法。认为您的脚本在服务器上运行 - 移动时间会搞砸。 为应用程序调整时间的另一种方法是使用 faketime,如此处所述 unix.stackexchange.com/questions/359225/… 也许? 这是一种糟糕的做法,但如果您需要生成一些一次性过期证书,它也比下面给出的“正确”答案容易 1000 倍。【参考方案4】:试试gossl,它允许以不同的时间单位指定证书有效期的开始日期和持续时间。
我开发它是为了克服命令行 openssl 的限制。 该工具是轻量级的,在 Go 中实现,没有依赖项,在 MIT 许可下。
【讨论】:
【参考方案5】:您可以将-days
选项设置为0:
openssl x509 -req -days 0 -in clientcert.csr -signkey cert.key -out ssl.crt
这将创建一个notBefore
和notAfter
等于当前时间的证书(即您的证书将立即过期)。
【讨论】:
这不起作用,尝试此操作时出现错误提示req: Non-positive number "0" for -days
以上是关于如何生成有效期少于 1 天的 openssl 证书?的主要内容,如果未能解决你的问题,请参考以下文章