首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从密钥工具证书中提取过期日期

从密钥工具证书中提取过期日期
EN

Stack Overflow用户
提问于 2022-01-21 14:44:12
回答 2查看 3.7K关注 0票数 1

我正在编写一个相当简单的脚本,从keytool证书中提取过期日期,并将其与今天的日期进行比较,如果该日期少于30天,则发送邮件。然而,在我陷入困境的地方是如何使用bash提取到期日期,我正在运行:

代码语言:javascript
复制
keytool -list -v -keystore /usr/java/jdk1.8.0_301-amd64/jre/lib/security/cacerts -storepass <PWD> | grep "until:"

它将输出用多行存储的所有证书,如下所示:

代码语言:javascript
复制
Valid from: Tue May 26 01:00:00 IST 2015 until: Sun Jan 17 00:00:00 GMT 2038

该计划是从行中提取到期日期,并将其转换为历次、秒数和天数,以帮助在脚本中计算。

请你给我建议一下最好的办法。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-01-21 15:17:42

不知道你所说的“天”是什么意思

...并将其转换为划时代的时间

但是要将其隐藏到划时代的时刻,您可以首先删除所有内容,直到“直到:”为止:

代码语言:javascript
复制
UNTIL=$(keytool ... | grep 'until:' | sed 's/^.*until: //')

然后使用date

代码语言:javascript
复制
date -d "${UNTIL}" +%s

编辑

好的,对于keystore中的多个条目,您可以修改以下代码片段。在这里,我们读取别名和“直到”日期,这样我们就可以识别我们在每个迭代中工作的证书。您可以修改它以读取其他字段。

代码语言:javascript
复制
KEYSTORE=/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/security/cacerts
KEYSTORE_PW=changeit
while read -r ALIAS; do
    # ALIAS is in the form: "Alias name: <REST>". We want <REST>.
    ALIAS=$(echo ${ALIAS} | cut -d' ' -f3)

    # read the next line
    read -r UNTIL

    # UNTIL is in the form: "Valid from: ... until: <REST>". We want <REST>
    UNTIL=$(echo ${UNTIL} | sed 's/^.*until: //')

    # convert to epoch
    EPOCH=$(date -d "${UNTIL}" +%s)

    # do something with it
    echo "${ALIAS}  -->  ${EPOCH}"
done < <(keytool -list -v -keystore "${KEYSTORE}" -storepass "${KEYSTORE_PW}" | grep -E '^Alias name:|^Valid from:')

产出如下:

代码语言:javascript
复制
debian:ac_raiz_fnmt-rcm.pem  -->  1893456000
debian:accvraiz1.pem  -->  1924940257
debian:actalis_authentication_root_ca.pem  -->  1916306522
debian:addtrust_external_root.pem  -->  1590835718
票数 1
EN

Stack Overflow用户

发布于 2022-01-21 15:17:38

首先,您需要将日期提取为字符串,这可以使用awk完成:

代码语言:javascript
复制
date=$(keytool -list -v -keystore /usr/java/jdk1.8.0_301-amd64/jre/lib/security/cacerts -storepass | grep "until:" | awk -F'until:' '{print $2}')

然后,可以使用date命令将字符串日期转换为纪元:

代码语言:javascript
复制
epoch=$(date -d "$date" +"%s")
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70803111

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档