SSL证书过期提醒
众所周知,SSL证书是网站的一个保障。但对个人来说,有个免费的SSL证书用太方便了,还有现成工具可以自动续期。
部分部署在内网环境的服务,没办法自动更新证书有效期,就只能人工去操作。
人工操作倒也还好,因为我是在域名管理商那里申请的证书,界面操作比一般的命令行要简单些。
想设置个证书到期提醒,方便人工替换新证书。
万万没想到,证书提醒是按次数收费的。
没有经费,只能自己想办法。

灵光一现
既然SSL证书是在网络上,那我们岂不是可以写个工具去检查指定网站的SSL证书过期日期?
说干就干,参考资料写了个Python脚本。
把脚本部署到服务器上,然后设置两个定时任务,分别是上午10点和下午17点。
如果指定的域名证书在30天内过期,会发送消息给飞书机器人。
import ssl
import socket
from datetime import datetime, timedelta
import requests
'''
定时检查SSL是否过期,并发起提醒.
0 10 * * * /usr/bin/python3 /root/check.py
0 17 * * * /usr/bin/python3 /root/check.py
'''
def check_ssl_expiry_date(domain):
context = ssl.create_default_context()
conn = context.wrap_socket(
socket.socket(socket.AF_INET),
server_hostname=domain,
)
try:
conn.connect((domain, 443))
cert = conn.getpeercert()
expiry_date = datetime.strptime(cert['notAfter'], '%b %d %H:%M:%S %Y %Z')
return expiry_date
finally:
conn.close()
def send_feishu(webhook_url, message):
headers = {'Content-Type': 'application/json'}
data = {
"msg_type": "text",
"content": {"text": message}
}
response = requests.post(webhook_url, json=data)
if response.status_code != 200:
raise Exception(f"消息发送失败: {response.text}")
def check_domains(domains, webhook_url):
today = datetime.now()
for domain in domains:
expiry_date = check_ssl_expiry_date(domain)
days_remaining = (expiry_date - today).days
if days_remaining <= 30:
message = f"提醒: {domain}的SSL证书,还有{days_remaining}天过期!"
send_feishu(webhook_url, message)
if __name__ == "__main__":
# 换成你自己的
domain_list = ["www.baidu.com","www.qq.com"]
# 换成你自己的
feishu_message_url = "https://open.feishu.cn/open-apis/bot/v2/hook/xxxxxx"
check_domains(domain_list, feishu_message_url)简单把?别忘了改脚本里面的地址和消息推送机器人地址。
配置飞书消息机器人的时候,你可以:
1. 设置IP白名单;
2. 限制关键词,比如SSL证书。
这两点做了,能提高消息机器人的安全性。
学会了吗?