安装 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
参数含义:
- --nginx:nginx 插件
- -n : 非交互式
- -d 域名,支持多个,多个 -d name1 -d name2
- --agree-tos: 同意协议
- --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