如何提取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
相关产品推荐
相关产品推荐

