ssl證書過期監控
一、需求引入
之前試過有個網站證書悄悄過期了,上一年不是過年過的特別早么,那個春節關服務的定時腳本竟然忘記關了!!!(幸好領導沒有看到,除非往上翻監控信息,不然上班那會一般只會看到最新的數據庫備份監控信息)
這玩意實際上是nginx加載了停服務的虛擬配置文件,我就虛構了一個假的端口,proxy_pass 轉過去。至於原端口nginx代理某個靜態網目錄是沒有停的。當時嚇壞了,把人家網站關了那么久耶(0點關到7點)。然后一早起來,我手動開起來了。但發現頁面說是不安全的,除非點擊繼續訪問(算了知道是證書過期,回公司再弄)。這關停的時間內竟然沒有人發現,沒有人投訴,不過有些事情不怕一萬,只怕萬一,如果是一個非常重要的網站,經常有人看的,證書過期了,作為運維的你竟然沒發現,呵呵,你就等着寫故障報告吧~~~是不是細思極恐,所以嘛,做運維就應該要有點前瞻性,不要等事情發生才懂得預防,畢竟,防患於未然會省去后續很多活的
二、需求實現
有兩個腳本都是用openssl去搞的(當然我是抄的,一個抄網上,一個抄前運維的,就改了點就能用了)
1、check_ssl.sh ——》運行需要接參數,用來做單一域名測試不錯
1 #!/bin/bash 2 3 # 檢測https證書有效期 4 if [ $# -ne 1 ]; then 5 echo "請輸入需要的檢查域名: 例如 /check_ssl.sh www.baidu.com" 6 else 7 #參數設置為host 8 host=$1 9 #最后到期時間 10 #end_date=`echo |openssl s_client -servername $host -connet $host:443 2nssl x509 -noout -dates|awk -F '=' '/notAfter/{print $2}'` 11 #最后到期時間轉換為時間戳 12 end_data=`date +%s -d "$(echo |openssl s_client -servername $host -connect $host:443 2>/dev/null | openssl x509 -noout -dates|awk -F '=' '/notAfter/{print $2}')"` 13 #當前時間戳 14 new_date=$(date +%s) 15 #計算SSL證書截止到現在的過期天數 16 #計算SSL正式到期時間和當前時間的差值 17 days=$(expr $(expr $end_data - $new_date) / 86400) 18 echo -e "\033[31m 您的$host 證書 還有${days}天到期 請謹慎處理 \033[0m" 19 fi
運行腳本: ./check_ssl.sh 檢測域名
結果顯示是這樣的:
2、domain_ssl_new.sh ——》這腳本放到計划任務了
前運維寫的,我就直接用了,為了尊重版權,加個后綴叫"new"。
要引入一個domain_ssl_new.txt ,填入你要檢測的域名即可(注意:一行一個域名)
1 #!/bin/bash 2 3 #監控域名證書到期發送釘釘消息通知 4 #作者:ljy 5 #日期:2021/01/27 6 #版本:v1.0 7 8 PHONE="159xxxx0136" 9 TOKEN="https://oapi.dingtalk.com/robot/send?access_token=xxx" 10 11 dir="/home/用戶/scripts/domain" 12 for yuming in `cat ${dir}/domain_ssl_new.txt` #讀取存儲了需要監控的域名文件 13 do 14 END_TIME=$(echo | openssl s_client -servername $yuming -connect $yuming:443 2>/dev/null | openssl x509 -noout -dates |grep 'After'| awk -F '=' '{print $2}'| awk -F ' +' '{print $1,$2,$4 }') 15 16 #使用openssl獲取域名的證書情況,然后獲取其中的到期時間 17 END_TIME1=$(date +%s -d "$END_TIME") #將日期轉化為時間戳 18 NOW_TIME=$(date +%s -d "$(date | awk -F ' +' '{print $2,$3,$6}')") #將目前的日期也轉化為時間戳 19 20 NEW_TIME=$(($(($END_TIME1-$NOW_TIME))/(60*60*24))) #到期時間減去目前時間再轉化為天數 21 22 if [ $NEW_TIME -lt 10 ]; #當到期時間小於10天時,發釘釘群告警 23 then 24 curl -H "Content-Type:application/json" -X POST --data '{"msgtype":"text","text":{"content":"域名:'$yuming' ssl免費證書到期日期,剩余:'$NEW_TIME' 天"} , "at": {"atMobiles": ['${PHONE}'], "isAtAll": false}}' ${TOKEN} > /dev/null 2>&1 25 fi 26 done
3、用工具搞:LetsMonitor ——》貌似要FQ才能打開
提供免費ssl檢測服務,在憑證需要需用或過期前發送提醒(僅限郵件發送,而且只能添加5個域名證書監控,不然要收費)
## 使用說明,我簡單說下
1、注冊之后,在Contacts上添加要發送的郵箱
2、然后打開“Monitors”,設置要監控的域名證書
3、做了個模擬證書過期的小測試,如下設置,然后運行“Run Test”,測試是否能成功發送提醒
測試證書實際過期時間為158天,我這里設置了還剩下160天報警。
(1)
(2)
(3)運行“Run Test”
(4)最后QQ郵箱就收到過期提示了
(據說只發一次,所以微信最好開一下QQ郵件提醒,相當於發到微信了)。這工具作為備用提醒還是可以滴,反正也是白嫖,哈哈哈哈~~~~