You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何提取truststore.jks中证书到期时间并转换为指定格式?

提取并转换truststore证书到期日期格式

当前操作与输出

执行命令获取证书到期相关信息:

keytool -list -v -keystore ./truststore.jks -storepass **** | grep "until"

得到输出:

Valid from: Mon Jun 04 13:17:22 MSK 2018 until: Fri Jun 04 13:27:21 MSK 2038
Valid from: Mon Jun 04 16:17:00 MSK 2018 until: Sun Jun 04 16:27:00 MSK 2023
Valid from: Mon Mar 07 12:35:36 MSK 2022 until: Sun Mar 07 12:45:36 MSK 2027

需求

提取每条结果中until:后的日期时间,转换为dd-mm-yyyy HH:MM:SS格式,目标输出:

04-06-2038 13:27:21
04-06-2023 16:27:00
07-03-2027 12:45:36

该操作用于证书到期监控任务。

解决方案

方案1:结合awk与date命令(Linux环境)

利用date命令的日期解析能力,先提取until:后的日期字段,再转换格式:

keytool -list -v -keystore ./truststore.jks -storepass **** | grep "until" | awk '{print $(NF-3), $(NF-2), $(NF-1), $NF}' | while read dt; do date -d "$dt" +"%d-%m-%Y %H:%M:%S"; done
  • awk部分:$(NF-3)到$NF精准提取until:后的月份 日期 时间 年份字段
  • date部分:-d参数解析日期字符串,+"%d-%m-%Y %H:%M:%S"指定输出格式

方案2:结合awk与date命令(macOS环境)

macOS的date命令语法不同,调整如下:

keytool -list -v -keystore ./truststore.jks -storepass **** | grep "until" | awk '{print $(NF-3), $(NF-2), $(NF-1), $NF}' | while read dt; do date -j -f "%b %d %T %Y" "$dt" +"%d-%m-%Y %H:%M:%S"; done
  • -j表示不修改系统时间,-f "%b %d %T %Y"指定输入日期的格式

方案3:纯awk处理(跨平台)

无需调用外部date命令,通过自定义月份映射实现格式转换:

keytool -list -v -keystore ./truststore.jks -storepass **** | grep "until" | awk '
BEGIN {
    split("Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec", months, " ");
    for(i=1; i<=12; i++) month_num[months[i]]=sprintf("%02d", i);
}
{
    day=$(NF-3); 
    month=$(NF-4); 
    year=$NF; 
    time=$(NF-2);
    printf("%02d-%s-%s %s\n", day, month_num[month], year, time);
}'
  • BEGIN块:建立月份缩写到两位数字的映射表
  • 主逻辑:提取对应字段,按目标格式拼接输出

内容的提问来源于stack exchange,提问作者BoLjshOJ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 14:41:31