[转帖]检测证书过期脚本

检测,证书,过期,脚本 · 浏览次数 : 0

小编点评

**脚本概述:** 脚本名为 `check_daemon.sh`,用于检查域名 `zisefeizhu.test.cn` 的 SSL 证书有效期是否正常。如果有效期小于 100 天,则提醒用户。 **脚本步骤:** 1. **获取当前时间**:使用 `date` 命令获取系统当前日期。 2. **获取域名有效期**:使用 `date` 命令获取域名 `zisefeizhu.test.cn` 的 SSL 证书有效期。 3. **计算剩余天数**:将有效期和当前日期的日期差值计算出剩余天数。 4. **判断剩余天数是否小于 100 天**:如果剩余天数小于 100 天,则提醒用户证书有效期已截止。 5. **发送通知**:如果剩余天数小于 100 天,则使用 `mail` 命令发送通知。 6. **设置 Postfix 发送证书**:如果使用 SSL,则设置 Postfix 发送证书。 7. **测试证书信任**:使用 `openssl` 命令验证证书是否被信任。 8. **处理错误**:如果证书无法被信任,则打印错误信息并退出脚本。 **注意事项:** * 脚本需要在运行时拥有 `sudo` 权限。 * 脚本需要在使用 `openssl` 命令时安装 `cryptography` 库。 * 脚本的详细用法请查看脚本本身的注释。

正文

https://www.cnblogs.com/zisefeizhu/p/13640250.html

 

前提

总是后知后觉,总是后知后觉。目前的现状是不论出现什么问题,都无法进行提前预警和在客户未知前介入处理。早上偶然和研发经理交流时突发灵感,写下此脚本,试图以此为开始进行提前的预警。

从生产k8s集群拿到test.cn的证书,在预发环境做daemon案例。

daemon案例

# pwd
/yufa/zhengshu/test
ll
total 32
-rw-r--r--  1 root  wheel   465B  9  9 09:50 test-ingress.yaml
-rw-r--r--  1 root  wheel   711B  9  9 09:47 test.yaml
-rw-r--r--  1 root  wheel   3.5K  9  9 09:24 tls.crt
-rw-r--r--  1 root  wheel   1.6K  9  9 09:25 tls.key
# kubectl -n test create secret tls test-cn --key ./tls.key --cert ./tls.crt
# cat test.yaml
apiVersion: v1
kind: Service
metadata:
  name: tomcat
  namespace: test
spec:
  selector:
    app: tomcat
    release: canary
  ports:
  - name: http
    port: 8080
    targetPort: 8080
  - name: ajp
    port: 8009
    targetPort: 8009

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: tomcat-deploy
  namespace: test
spec:
  replicas: 1
  selector:
    matchLabels:
      app: tomcat
      release: canary
  template:
    metadata:
      labels:
        app: tomcat
        release: canary
    spec:
      containers:
      - name: tomcat
        image: tomcat:7-alpine
        ports:
        - name: httpd
          containerPort: 8080
        - name: ajp
          containerPort: 8009

# cat test-ingress.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress-tomcat-tls
  namespace: test
  annotations:
    kubernets.io/ingress.class: "kong"
spec:
  tls:
  - hosts:
    - "*.test.cn"        #与secret证书的域名需要保持一致
    secretName: test-cn   #secret证书的名称
  rules:
  - host: zisefeizhu.test.cn
    http:
      paths:
      - path:
        backend:
          serviceName: tomcat
          servicePort: 8080

image.png

编写检测域名过期小脚本

话不多说直接怼脚本

# cat check_daemon.sh
#!/bin/bash
source /etc/profile

#定义邮件发送列表
maillist=(
  lixxxxn@rxxxxx.com
  #2xxxxxx860@qq.com
)

#发送邮件函数
send_mail(){
    SUBJECT="$1域名即将到期"
    if [ $2 -ge 0 ];then
        CONTENT="$1:此域名即将到期,剩余时间已不足$2天,请及时续期!"
        for mail in ${maillist[*]};do
            echo -e ""当前检测的域名:" $domain\n "剩余天数: " $days\n ${CONTENT} " | mail -s "${SUBJECT}" $mail
        done
    else
        day=$((-$2))
        CONTENT="$1:此域名已到期,已超出$day天,请及时续费!"
        for mail in ${maillist[*]};do
            echo -e "${CONTENT}" | mail -s "${SUBJECT}" $mail
        done
    fi
}

#检测mails命令是否存在,不存在则安装mail包
is_install_mail()
{
    which mail &> /dev/null
    if [ $? -ne 0 ];then
        yum install -y mail
    fi
}
is_install_mail

#定义需要被检测的域名列表
domainlist=(
   zisefeizhu.test.cn
)

#检测域名到期时间并通知
for domain in ${domainlist[*]};do
   echo "当前检测的域名:" $domain
    #取出域名过期时间
    end_time=$(echo | timeout 1 openssl s_client -servername $domain -connect $domain:443 2>/dev/null | openssl x509 -noout -enddate 2>/dev/null | awk -F '=' '{print $2}' )

    ([ $? -ne 0 ] || [[ $end_time == '' ]]) &&  exit 10
    end_times=`date -d "$end_time" +%s `
    tmp=`date -d today +"%Y-%m-%d %T"`
    current_times=`date -d "$tmp" +"%s"`

    let left_time=$end_times-$current_times
    days=`expr $left_time / 86400`
    echo "剩余天数: " $days

    #转换成时间戳
    end_times=`date -d "$end_time" +%s `
    #以时间戳的形式显示当前时间
    tmp=`date -d today +"%Y-%m-%d %T"`
    current_times=`date -d "$tmp" +"%s"`
    #域名到期剩余天数
    let left_time=$end_times-$current_times
    days=`expr $left_time / 86400`
    echo "剩余天数: " $days
    if [ $days -lt 100 ]; then
         echo "https 证书有效期少于100天,存在风险"
         send_mail $domain $days
    fi
done

发送邮件设置

获取网易云邮箱授权码

image

配置发送邮箱人信息

安装postfix
# yum -y install postfix
# systemctl enable postfix

设置发送邮箱信息
# vim /etc/mail.rc
......
新增
set from=1xxxxxx91@163.com
set smtp=smtp.163.com
set smtp-auth-user=1xxxxxx91@163.com
set smtp-auth-password=ZXUxxxxExxCSQ
set smtp-auth=login

# systemctl start postfix
# echo "test" |mail -s "tesc message" 23xxxxx60@qq.com  
could not connect: 连接超时
"/root/dead.letter" 11/308
. . . message not sent.

超时原因:阿里云服务器关闭了25端口,发送邮件连接不上服务器的缘故,而且官方不允许打开该端口

网易163免费邮箱相关服务器信息:

image

所以除了换邮箱之外(端口不是25的,要么是国外不好申请,要么收费,摸摸口袋…)

以网易163邮箱为例,使用SSL下的465端口

请求数字证书
# mkdir -p /root/.certs/
# echo -n | openssl s_client -connect smtp.163.com:465 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ~/.certs/163.crt
# certutil -A -n "GeoTrust SSL CA" -t "C,," -d ~/.certs -i ~/.certs/163.crt
# certutil -A -n "GeoTrust SSL CA - G3" -t "Pu,Pu,Pu" -d ./ -i 163.crt


修稿邮件发送人设置
# vim /etc/mail.rc
......
改增
set from=1xxxxxx91@163.com
set smtp=smtps://smtp.163.com:465
set smtp-auth-user=1xxxxxx91@163.com
set smtp-auth-password=ZXxxxGWRxxxCSQ
set smtp-auth=login
set ssl-verify=ignore
set nss-config-dir=/root/.certs

重启测试
# systemctl restart postfix
# echo "test" |mail -s "title" linkun@xxxxx.com

登陆邮箱验证

image

emmm。收到是收到了,但有个报错

证书不被信任,且命令行就此卡住,需要按键才能出现命令提示符
# Error in certificate: Peer's certificate issuer is not recognized.

处理此问题
# cd /root/.certs/
# ll 
总用量 80
-rw-r--r-- 1 root root  2415 9月   9 13:31 163.crt
-rw------- 1 root root 65536 9月   9 13:35 cert8.db
-rw------- 1 root root 16384 9月   9 13:35 key3.db
-rw------- 1 root root 16384 9月   9 13:31 secmod.db
# certutil -A -n "GeoTrust SSL CA - G3" -t "Pu,Pu,Pu" -d ./ -i 163.crt
问题解决

测试daemon案例

执行脚本

sh check_daemon.sh
当前检测的域名: zisefeizhu.test.cn
剩余天数:  73
剩余天数:  73
https 证书有效期少于100天,存在风险

验证

image.png

👌!

定时任务

# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed
#Timing execution /root/scripts/check_daemon.sh
0 2  *  *  * root  sh /root/scripts/check_daemon.sh
过手如登山,一步一重天

与[转帖]检测证书过期脚本相似的内容:

[转帖]检测证书过期脚本

https://www.cnblogs.com/zisefeizhu/p/13640250.html 前提 总是后知后觉,总是后知后觉。目前的现状是不论出现什么问题,都无法进行提前预警和在客户未知前介入处理。早上偶然和研发经理交流时突发灵感,写下此脚本,试图以此为开始进行提前的预警。 从生产k8s集

[转帖]VMware vCenter证书过期解决方法

https://www.yii666.com/blog/395521.html vCenter证书过期解决方法 目录 1 概述 2 详细操作步骤 2.1 检查关键的STS证书是否过期并修复 2.2 检查除STS证书外是否还有其余证书过期 2.3 续订除STS和data-encipherment以外的

[转帖]linux性能检测之sar详解

http://blog.51niux.com/?id=99 sar也是sysstat中的一员。 一、介绍 1.1 简介 sar是一个优秀的一般性能监视工具,它可以输出Linux所完成的几乎所有工作的数据。sar命令在sysetat rpm中提供。 sar可以显示CPU、运行队列、磁盘I/O、分页(交

[转帖]021系统状态检测命令sosreport

https://www.cnblogs.com/anyoneofus/p/16467677.html sosreport命令用于收集系统配置及架构信息并输出诊断文档。

[转帖]如何看硬盘SMART参数实现自我检测

https://www.cnblogs.com/zhangxinglong/p/14172957.html S.M.A.R.T.,全称为“Self-Monitoring Analysis and Reporting Technology”,即“自我监测、分析及报告技术”。是一种自动的硬盘状态检测与预

[转帖]Linux下使用IPMItool重启IPMI的方法

https://bbs.qunyingkeji.com/1690/ 1.安装IPMItool工具 # yum install ipmitool 2.检测IPMI组件 # dmidecode |sed -n '/IPMI/,+5p'出现以下信息,说明支持IPMIIPMI Device Informat

[转帖]网络基本功(十五):细说网络性能监测与实例(上)

网络基本功(十五):细说网络性能监测与实例(上) 介绍 网络路径性能检测主要包括三方面的内容:带宽测量能够获知网络的硬件特性,如网络的最大容量,吞吐量测量能够获得网络实际可提供的最大容量,数据流测量能够了解真实占用的网络容量。 本文介绍在评估网络性能是否合理时,需要收集的数据及收集方式。涉及工具包括

[转帖]BMC IPMI常用命令

BMC IPMI常用命令 BMC(Baseboard Management Controler)提供了多种通道来和主机通信,进而检测主机的温度、风扇转速、电压、电源和现场可替代器件。为了便于用户使用,它提供了非常丰富的命令,下面介绍一下主要的常用命令。 1. 远程电源控制类 Ipmitool -I

[转帖]Redis 运维实战 第08期:监控

https://cloud.tencent.com/developer/article/1986832 Redis 在很多互联网公司都充当着非常核心的角色,因此,监控 Redis 以保证其稳定显得格外重要。这节内容就来聊聊 Redis 的一些常见监控项。 1 连接检测 连接失败检测:当监控组件无法连

[转帖]调整Redis定期任务的执行频率

https://help.aliyun.com/document_detail/142171.html 通过修改hz参数的值,您可以调整Redis执行定期任务的频率,从而改变Redis清除过期key、清理超时连接的效率。 Redis定期任务与hz参数的关系 为了定期检测资源和服务状态并根据预定策略执