监控HTTPS证书到期时间 shell

2019年9月18日11:46:05 发表评论 4,250 views
摘要

现在免费版本的ssl证书,签发狠方便,(阿里云,腾讯云等等很多),免费版一般有效期是1年,所以问题就来了,ssl何时到期,需要监控起来,最好能提前告知我们,千万别影响业务。。。
市面监控很多例如:zabbix 或者 cacti 或者 open-falcon 等等,如何选择呢?
所谓监控好加,但是`如何获取 SSL 证书的过期时间`呢,这才是重点。

广告也精彩

监控HTTPS证书到期时间 shell
Https(SSL)证书很多网友在访问各网站的时候,不知道你有没有注意几乎所有网站网址的开头都是 https:// 打头的,而不是 http:// 打头。为什么呢?因为 https 协议对比 http 协议而言安全性更有保证。防止你访问过程中产生的敏感信息被第三方人或组织非法获取到,并作他用。

一、证书简介

自签发证书和权威证书

当然如果一个网站需要提供 https 访问,那么需要 SSL 证书,这个证书有两种途经获取:
1. 我们自签发;
2. 购买权威证书。

这两个有什么区别呢?

前者不被浏览器承认,因为这个证书是自签发的,认为是非法的。谁知道你有没有动过什么手脚呢,对吧。

SSL免费证书签发

现在免费版本的ssl证书,签发狠方便,(阿里云,腾讯云等等很多),免费版一般有效期是1年,所以问题就来了,ssl何时到期,需要监控起来,最好能提前告知我们,千万别影响业务。。。

nginx https 301跳转配置

server {
    listen 80;
    listen       443 ssl;
    #此处应该配置你的域名:
    server_name  1234.dgstack.cn;
    if ($server_port !~ 443){
        rewrite ^(/.*)$ https://$host$1 permanent;
    }
     ssl_certificate      /www/ssl/1234.dgstack.cn.pem;
     ssl_certificate_key  /www/ssl/1234.dgstack.cn.key;

     ssl_session_cache    shared:SSL:1m;
     ssl_session_timeout  5m;

     ssl_ciphers  HIGH:!aNULL:!MD5;
     ssl_prefer_server_ciphers  on;

     ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    charset utf-8;

    #此处配置你的访问日志,请手动创建该目录:
    access_log  /var/log/nginx/dgstack/access.log;
    location / {
        try_files /_not_exists_ @backend;
    }

    # 这里为具体的服务代理配置
    location @backend {
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header Host            $http_host;
        proxy_set_header   X-Forwarded-Proto $scheme;
        #此处配置 MinDoc 程序的地址和端口号
        proxy_pass http://127.0.0.1:1111;
    }
}

监控SSL证书过期时间

市面监控很多例如:zabbix 或者 cacti 或者 open-falcon 等等,如何选择呢?
所谓监控好加,但是如何获取 SSL 证书的过期时间呢,这才是重点。

二、监控部署

需要两个文件,一个用于存储域名和端口信息,另一个是具体检测 SSL 证书过期时间的执行脚本。
注意:这两个文件是在一个目录下。

domain_ssl.info「存储域名信息」

[root@bogon scripts]# cat domain_ssl.info 
www.dgstack.cn:443
www.baidu.com:443

监控HTTPS证书到期时间 shell

check_domain_time.sh「SSL 证书过期检测脚本」

[root@bogon scripts]# vim check_https.sh
#!/bin/bash
################ Version Info ##################
# Create Date: 2019-09-18
# Author:      Qiuyuetao
# Mail:       598759292@qq.com
# Version:     1.0
# Attention:   通过域名获取证书的过期时间
################################################
# V1.0.0 www.dgstack.cn
#      1.通过域名获取证书的过期时间
################################################

# 加载环境变量
. /etc/profile
. ~/.bash_profile
. /etc/bashrc

# 脚本所在目录即脚本名称
script_dir=$( cd "$( dirname "$0"  )" && pwd )
script_name=$(basename ${0})

readFile="${script_dir}/domain_ssl.info"
grep -v '^#' ${readFile} | while read line;do # 读取存储了需要监测的域名的文件
    # echo "${line}"
    get_domain=$(echo "${line}" | awk -F ':' '{print $1}')
    get_port=$(echo "${line}" | awk -F ':' '{print $2}')

    # echo ${get_domain}
    # echo "${get_port}"
    # echo "======"

    # 使用openssl获取域名的证书情况,然后获取其中的到期时间
    END_TIME=$(echo | openssl s_client -servername ${get_domain}  -connect ${get_domain}:${get_port} 2>/dev/null | openssl x509 -noout -dates |grep 'After'| awk -F '=' '{print $2}'| awk -F ' +' '{print $1,$2,$4 }' )

    END_TIME1=$(date +%s -d "$END_TIME") # 将日期转化为时间戳
    NOW_TIME=$(date +%s -d "$(date "+%Y-%m-%d %H:%M:%S")") # 将当前的日期也转化为时间戳
    RST=$(($(($END_TIME1 - $NOW_TIME))/(60*60*24))) # 到期时间减去目前时间再转化为天数

    echo "证书有效天数剩余:${RST}"

   if [ $RST -lt 30 ];then
     echo "$get_domain https 证书有效期少于30天,存在风险"
   else
     echo "$get_domain https 证书有效期在30天以上,放心使用!"
   fi
done

执行结果

监控HTTPS证书到期时间 shell

三、自动检查异常报警微信推送

上面已经获取到了内容,接下来就加入Cron,然后在推送(微信、钉钉、邮件、短信)给管理者即可,选择一种或多种即可,我这边选择用微信进行推送消息。
微信报警配置传送门
监控HTTPS证书到期时间 shell

到此结束,更多精彩请点击:监控体系文章

  • QQ精品交流群
  • weinxin
  • 微信公众号
  • weinxin
广告也精彩
admin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: