织辉科技温馨提醒:把部分功能需要登陆才能操作……
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 科技江湖 于 2024-10-31 19:23 编辑
一个 Bash 脚本,用于检测 HTTPS 证书的有效期,并将即将到期的证书和访问异常的域名通过邮件发送通知。以下是脚本实现思路:
send_mail 函数定义了一个发送邮件的功能,接受两个参数:邮件主题和邮件内容。使用 mail 命令发送邮件,并通过 $? 检查命令执行是否成功。
source /etc/profile 用于加载系统环境变量。
定义两个数组 expiring_certs 和 access_issues,分别用于存储即将到期的证书和访问异常的域名。
使用 while read line 循环读取 https_list 文件中的每行内容,每行内容预期是一个域名。
使用 openssl 命令获取每个域名的证书有效期,并存储在 end_time 变量中。如果获取失败,将域名添加到 access_issues 数组。
如果成功获取证书有效期,将其转换为 Unix 时间戳,并与当前时间戳进行比较,计算剩余天数。
根据剩余天数,将域名分类为已过期、即将到期、短期内到期或正常,并分别添加到 expiring_certs 数组。
循环结束后,检查 expiring_certs 和 access_issues 数组是否有内容。
如果有即将到期的证书或访问异常的域名,构建邮件主题和内容,并调用 send_mail 函数发送邮件。
新建https.sh文件,并存入下列代码
#!/bin/bash
# 定义发送邮件的函数
send_mail() {
local subject="$1"
local message="$2"
echo "Sending email with subject: $subject"
echo -e "$message" | mail -s "$subject" your-mail@qq.com
if [[ $? -eq 0 ]]; then
echo "Email sent successfully."
else
echo "Failed to send email."
fi
}
# 检测https证书有效期
source /etc/profile
# 初始化数组
declare -a expiring_certs
declare -a access_issues
while read line; do
end_time=$(echo | timeout 1 openssl s_client -servername "$line" -connect "$line":443 2>/dev/null | openssl x509 -noout -enddate 2> /dev/null | awk -F '=' '{print $2}')
if [[ -z "$end_time" ]]; then
echo "$line DNS解析异常或证书获取失败"
access_issues+=("$line")
else
end_times=$(date -d "$end_time" +%s)
current_times=$(date -d "$(date -u '+%b %d %T %Y GMT')" +%s)
let left_time="$end_times - $current_times"
days=$(expr $left_time / 86400)
if [[ "${days}" -lt 0 ]]; then
echo "警告:$line 证书已过期"
expiring_certs+=("警告:$line已过期!\n")
elif [[ "${days}" -lt 3 ]]; then
echo "紧急:$line证书即将过期"
expiring_certs+=("紧急:$line将在${days}天内过期!\n")
elif [[ "${days}" -lt 6 ]]; then
echo "注意:$line 证书将在${days}天后过期"
expiring_certs+=("注意:$line将在${days}天后过期!\n")
elif [[ "${days}" -lt 9 ]]; then
echo "预知:$line 证书将在${days}天后过期"
expiring_certs+=("预知:$line将在${days}天后过期!\n")
else
echo "$line 剩余天数: ${days}"
fi
fi
done < ./https_list
# 检查是否有证书即将到期或访问异常
if [[ ${#expiring_certs[@]} -gt 0 ]] || [[ ${#access_issues[@]} -gt 0 ]]; then
subject="证书即将到期和访问异常警告"
message="证书即将到期的域名:\n${expiring_certs}\n\n访问异常的域名:\n${access_issues}"
send_mail "$subject" "$message"
fi
最后新建文件https_list,并放入需要监控的域名
|