使用certbot向letsencrypt申请ssl证书

 换掉域名 换掉ssl证书存储位置能直接用 也可以直接使用默认生成后的位置

#!/bin/bash
# 定义变量
#certbot生成的ssl证书存放位置
Ssl_home="/etc/letsencrypt/live"  

#nginx配置的ssl证书存放位置,也可以在nginx配置文件里直接写$Ssl_home的位置
Nginx_Ssl_home="/workserver/work-local/nginx/nginx-conf.d/ssl" 

#定义你要监控并更新的域名
domains=( "xxxx.xxxx.com" "xxxx.xxxx.com" "xxxx.xxxx.com" "xxxx.xxxx.com" "xxxx.xxxx.com" "xxxx.xxxx.com" "xxxx.xxxx.com" "xxxx.xxxx.com")

#生效钉钉通知(网络皇帝机器人)
source /workserver/work-local/sys_bash_alarm/SslTz.sh

# 检查证书是否将在30天内过期
check_expiry() {
    local domain="$1"
    local ssl_file="ssl_${domain}.txt"
    local expire_date=$(awk '/expire date:/ {print $4, $5, $6, $7}' "$ssl_file")

    # 提取月份、日期和年份
    local month=$(echo "$expire_date" | awk '{print $1}')
    local day=$(echo "$expire_date" | awk '{print $2}')
    local year=$(echo "$expire_date" | awk '{print $4}')

    case $month in
    "1月" | "Jan") month="01" ;;
    "2月" | "Feb") month="02" ;;
    "3月" | "Mar") month="03" ;;
    "4月" | "Apr") month="04" ;;
    "5月" | "May") month="05" ;;
    "6月" | "Jun") month="06" ;;
    "7月" | "Jul") month="07" ;;
    "8月" | "Aug") month="08" ;;
    "9月" | "Sep") month="09" ;;
    "10月" | "Oct") month="10" ;;
    "11月" | "Nov") month="11" ;;
    "12月" | "Dec") month="12" ;;
    esac

    # 格式化过期日期
    local formatted_expire_date="$year-$month-$day"
    #echo "格式化后过期日期 ($domain): $formatted_expire_date"

    local current_date=$(date +%F)
    #echo "当前日期: $current_date"

    # 将日期字符串转换为时间戳(秒)
    local timestamp1=$(date -d "$formatted_expire_date" +%s)
    local timestamp2=$(date -d "$current_date" +%s)

    # 计算日期差值(秒)和 差值对应的天数
    local difference=$((timestamp1 - timestamp2))
    local days_difference=$((difference / 86400))  # 86400 秒是一天的秒数

    if [ $days_difference -le 30 ]; then
      certbot certonly --nginx -d "$domain" --force-renew 2>&1 >> /dev/null
      cp -f "$Ssl_home/$domain/fullchain.pem" "$Nginx_Ssl_home/$domain/pem.pem"
      cp -f "$Ssl_home/$domain/privkey.pem" "$Nginx_Ssl_home/$domain/key.key"
      nginx -s reload
      echo "$domain 的 SSL 证书将在30天内过期!过期时间是 $formatted_expire_date 已触发自动更新证书脚本,请访问$domain进行检查"
fi
}


# 创建一个空数组,用于存储所有警告信息
warnings=()

# 循环检查每个域名的证书
for domain in "${domains[@]}"; do
    #echo "正在检查 $domain 的证书..."
    curl "https://$domain" -k -v -s -o /dev/null 2> "/opt/ssl_check.dir/ssl_${domain}.txt"
    warning=$(check_expiry "$domain")  # 调用函数并获取返回值
    if [ -n "$warning" ]; then
        warnings+=("$warning")  # 将警告信息添加到数组中
    fi
done

# 检查是否有警告信息,如果有则一次性发送到钉钉
if [ ${#warnings[@]} -gt 0 ]; then
    # 将警告信息合并成一个字符串
    message=$(printf "%s\n" "${warnings[@]}")
    # 发送到钉钉
    sendLong "$Long$message"
else
    echo "所有域名的 SSL 证书都还有足够的时间。"
fi

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值