如何修改Bash脚本以检查本地SSL证书有效期而非远程端点?
修改Bash脚本以支持本地SSL证书有效期检查
原脚本用于检查远程站点的SSL证书剩余有效期,现在需要调整为直接读取本地证书文件并计算剩余天数,期望用法如下:
check_cert.sh fqdn.cert.name.cer 81
修改后的脚本
#!/bin/bash # 计算并输出SSL证书的剩余有效期天数 # # 使用示例: # $ check_cert.sh fqdn.cert.name.cer # 81 # # 退出码说明: # 0 - 证书未过期 # 1 - 证书已过期 # 254 - 证书文件为空或无效 # 255 - 未提供参数或文件不存在 # 检查参数数量 if [ "$#" -ne 1 ]; then echo "用法: $0 <本地证书文件路径>" exit 255 fi certificate_file="$1" # 检查文件是否存在 if [ ! -f "$certificate_file" ]; then echo "错误: 指定的证书文件不存在" exit 255 fi # 检查证书文件是否有效且非空 certificate_size=$(stat -c "%s" "$certificate_file") if [ "$certificate_size" -le 1 ]; then exit 254 fi # 提取证书过期日期并计算剩余天数 date=$(openssl x509 -in "$certificate_file" -enddate -noout 2>/dev/null | sed "s/.*=\(.*\)/\1/") # 处理openssl命令执行失败的情况(比如不是有效证书) if [ -z "$date" ]; then exit 254 fi date_s=$(date -d "${date}" +%s) now_s=$(date -d now +%s) date_diff=$(( (date_s - now_s) / 86400 )) echo "$date_diff" # 返回对应退出码 if [ "$date_s" -gt "$now_s" ]; then exit 0 # 证书有效 else exit 1 # 证书已过期 fi
修改说明
- 移除了原脚本中DNS解析、远程抓取证书的逻辑,直接使用用户传入的本地文件
- 新增了参数数量检查和文件存在性检查,避免无效输入
- 调整了退出码:移除原255(DNS失败),将未提供参数/文件不存在的情况设为255
- 增加了对openssl命令执行失败的判断,避免非证书文件导致的错误
内容的提问来源于stack exchange,提问作者puppet_master
相关产品推荐
相关产品推荐

