检测SSL证书有效期命令及应用脚本
SSL证书有效期检测命令
适用于本地文件
CODEopenssl x509 -noout -dates -in certfilename.pem
certfilename.pem
为本地证书文件。
适用于在线网站
CODEopenssl s_client -connect example.com:443 -servername example.com | openssl x509 -noout -dates
example.com
为目标站点域名,端口按需修改。
输出示例:
CODEnotBefore=有效期起始时间(如:Mar 20 00:00:00 2023 GMT)
notAfter=有效期截止时间(如:Mar 19 23:59:59 2024 GMT)
应用脚本
检测SSL证书并复制证书目录脚本
CODE#!/bin/bash
# 证书检测与更新脚本
CERT_FILE="/cert/fullchain.pem"
SOURCE_DIR="/letsencrypt/live/"
TARGET_DIR="/cert/"
# 检测证书是否存在
if [ ! -f "$CERT_FILE" ]; then
echo "错误: 证书文件 $CERT_FILE 不存在!"
exit 1
fi
# 获取证书过期日期
EXPIRY_DATE=$(openssl x509 -noout -dates -in "$CERT_FILE" | grep "notAfter" | cut -d= -f2)
EXPIRY_TIMESTAMP=$(date -d "$EXPIRY_DATE" +%s)
CURRENT_TIMESTAMP=$(date +%s)
# 计算剩余天数
DAYS_LEFT=$(( (EXPIRY_TIMESTAMP - CURRENT_TIMESTAMP) / 86400 ))
echo "证书有效期至: $EXPIRY_DATE"
echo "剩余天数: $DAYS_LEFT 天"
# 检查证书是否过期或即将过期(提前7天更新)
if [ "$DAYS_LEFT" -le 7 ]; then
echo "证书已过期或即将过期,开始更新..."
# 检查源目录是否存在
if [ ! -d "$SOURCE_DIR" ]; then
echo "错误: 源目录 $SOURCE_DIR 不存在!"
exit 1
fi
# 复制证书文件(保留权限和时间戳)
cp -p "$SOURCE_DIR"/* "$TARGET_DIR"
if [ $? -eq 0 ]; then
echo "证书更新成功!"
else
echo "错误: 证书更新失败!"
exit 1
fi
else
echo "证书有效,剩余 $DAYS_LEFT 天,无需更新。"
fi