Skip to content

安装 certbot

Ubuntu

shell
sudo apt install python3
sudo apt install -y certbot
# 安装成功后查一下版本
certbot --version
# 安装nginx插件
sudo apt install -y python3-certbot-nginx

CentOS

shell
yum install -y certbot
# 安装成功后查一下版本
certbot --version
# 安装nginx插件
yum install -y python3-certbot-nginx

采用 certbot-nginx 生成证书

shell
certbot certonly --nginx --nginx-server-root=/usr/local/nginx/conf -n -d www.lbs123.com --agree-tos --email zhaopingxi@exlive.cn

参数含义:

  1. --nginx:nginx 插件
  2. -n : 非交互式
  3. -d 域名,支持多个,多个 -d name1 -d name2
  4. --agree-tos: 同意协议
  5. --email:用户email

完整的运行脚本

将内容保存到 check_ssl_expired.sh 文件中:

shell
#!/usr/bin/env bash

# 设置要检查的域名和端口
DOMAIN="for.example.com"  #域名
PORT=443         #端口
EXPIRED_DAYS=4  # 证书告警剩余天数

# 获取SSL证书信息
CERT_INFO=$(openssl s_client -connect ${DOMAIN}:${PORT} -servername ${DOMAIN} -showcerts </dev/null 2>/dev/null | openssl x509 -dates -noout)

# 提取证书过期日期信息
START_DATE=$(echo "${CERT_INFO}" | grep "notBefore" | cut -d'=' -f 2)
END_DATE=$(echo "${CERT_INFO}" | grep "notAfter" | cut -d'=' -f 2)

# 将日期转换为Unix时间戳
START_TIMESTAMP=$(date -d "${START_DATE}" +%s)
END_TIMESTAMP=$(date -d "${END_DATE}" +%s)
CURRENT_TIMESTAMP=$(date +%s)

# 计算剩余天数
DAYS_REMAINING=$(( (${END_TIMESTAMP} - ${CURRENT_TIMESTAMP}) / 86400 ))

# 输出结果
echo "SSL证书信息:"
echo " - 域名: ${DOMAIN}"
echo " - 证书开始日期: ${START_DATE}"
echo " - 证书过期日期: ${END_DATE}"
echo " - 剩余天数: ${DAYS_REMAINING} 天"

new_ssl(){
  certbot certonly --nginx --nginx-server-root=/usr/local/nginx/conf -n -d $DOMAIN --agree-tos --email name@email.com
  echo "更新新的证书。"
}

WARN_MESSAGE=""
# 检查是否过期
if [ ${CURRENT_TIMESTAMP} -gt ${END_TIMESTAMP} ]; then
  echo "证书已过期!"
elif [ "$DAYS_REMAINING" -lt $EXPIRED_DAYS ]; then
  WARN_MESSAGE="域名: $DOMAIN 证书还有 $DAYS_REMAINING  天,将要过期!"
  echo $WARN_MESSAGE
  new_ssl
else
  echo "证书在有效期内。"
fi