需要将其与当前时间进行比较,以查看还剩多少。
我调查了这些问题,似乎有人在编写脚本,从 openssl 输出中获取文本中的日期/时间,并将其转换为某种形式以供比较(unix 时间戳)。我还了解到,证书本身包含 UTC 时区单位时间戳格式的日期。
那么,直接从证书中获取这些信息,而不是将其转换为人类可读的格式,然后再转换回数字,这样做有什么好处呢?
我在 openssl 应用程序中没有看到这样的选项。
有没有最简单的方法可以获取剩余的证书时间(比如说)秒数,而不会陷入如此混乱的状态,浪费时间和计算能力,并且需要可疑的可移植脚本?
编辑:感谢您的评论。我正在使用嵌入式平台(openwrt),没有浏览器,没有用户界面,只有命令行。证书只是本地存储的一组 .pem 文件。检查将使用脚本执行 - 结果将以二进制形式通过另一个通道发送以进行监控。
我可以这样做openssl x509 -in cert.pem -enddate -noout
,然后解析文本,将其转换为数字等,但至少可以说它很丑陋。
答案1
-enddate
默认以 rfc_822 标准输出,因此如果你剪切字符, GNUdate
命令就可以读取它:notAfter=
$ openssl x509 -enddate -noout -in cert.pem | cut -c10- | date +%s -f -
1868282453
较新版本的 OpenSSL 支持按-dateopt iso_8601
格式打印,至少可按字母顺序排序
OpenSSL 确实具有内置的过期秒数检查,但它是一个真/假输出:
$ openssl x509 -checkend 2592000 -noout -in cert.pem || echo "cert expires in 30 days!"