一、缘由
由于历史原因,我司SSL证书分散在不同的云服务器上,更换证书的时候可能会有遗漏。故将分散的SSL证书记录在文件里,定期用脚本检查剩余有效期天数,并告警。可以防止更换遗漏的事情发生。
二、脚本
- 记录ssl证书所在服务器的位置
/root/ops_scripts/ip_ssl_path.txt
10.10.10.1#/usr/local/nginx/conf/cert/didikaihei.com.pem
10.10.10.2#/usr/local/nginx/conf/vhost/cert/zuhaowan.com.cn.pem
- 设置Crontab定时任务执行脚本,并发送微信告警
#!/bin/bash
export LC_ALL=C
error_ips=""
notify(){
curl 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=5b37f5cc-d1ed-48d4-a4b4-7d4f8a9da478' \
-H 'Content-Type: application/json' \
-d '
{
"msgtype": "text",
"text": {
"content": "SSL证书有效期小于30天的IP列表(非Proxy机器):\n'$1'",
"mentioned_mobile_list":["@all",]
}
}'
}
for line in `cat /root/ops_scripts/ip_ssl_path.txt`
do
echo "================================"
ip=$(echo $line|awk -F"#" '{print $1}')
ssl_path=$(echo $line|awk -F"#" '{print $2}')
echo $ip
end_time=$(ssh $ip "openssl x509 -in $ssl_path -noout -enddate |awk -F '=' '{print \$2}'")
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`
echo "剩余天数: " $days
[ $days -lt 31 ] && echo "https 证书有效期少于30天,存在风险" && error_ips="$error_ips#$ip"
done
echo -e "准备过期的域名为: \n $error_ips"
if [ "$error_ips" = "" ]
then
echo "不包含准备过期的域名"
else
notify $error_ips
echo "包含准备过期的域名"
fi
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 lxwno.1@163.com