Sukka's Blog

童话只美在真实却从不续写

使用 bash 和 curl 检查 Sukka 的 SSL 的状态、并展示出来,DEMO: https://lab.suka.moe/ssl

最近看了 MDx 主题的作者无垠的博客,看到他用 Python 写了个检查 SSL 到期情况的工具、在 VPS 定时任务每天跑,并把结果展示出来。

无垠在 他的博客 中说他获取 SSL 信息直接用的 curl,并没有使用其他库。正巧之前 fork 了一份 ChromeChecker 做了 CheckChrome,趁机重新学习了 bash,所以我觉得我可以用 bash 实现一个类似的检查 SSL 状态的工具。而且每天跑的定时任务,正好可以交给 Travis CI 完成。

使用 curl 的 -v 参数可以输出连接的信息、包括 TLS 握手的信息。比如在终端里试试这个:

$ curl https://suka.moe -v

但是上面不仅会输出连接的相关信息,还会把 Response Body 的内容也输出到终端中,所以使用 -o 参数将 Response Body 的内容保存成一个文件,然后输出到 /dev/null 中;为了能检测已经过期的 SSL 证书,还需要让 curl 无视证书错误,所以需要再带上一个 -k 参数。

$ curl https://suka.moe -k -v -s -o /dev/null

剩下的就容易了,把日志输出到文件中,然后使用 catgrep 收集相关的信息并加以处理就行。最终实现就会类似于这种

mkdir ./tmp -p

curl https://suka.moe -k -v -s -o /dev/null 2> ./tmp/ca.info

cat ./tmp/ca.info | grep 'start date:' > ./tmp/suka.moe.info
cat ./tmp/ca.info | grep 'expire date:' >> ./tmp/suka.moe.info
cat ./tmp/ca.info | grep 'issuer:' >> ./tmp/suka.moe.info
cat ./tmp/ca.info | grep 'SSL certificate verify' >> ./tmp/suka.moe.info
cat ./tmp/ca.info | grep 'subject:' >> ./tmp/suka.moe.info

把域名换成变量就可以复用代码。当然你还可以处理一下得到的数据,可以存进数据库或者存进 json、xml。有了数据,做个前端展示页也是小菜一碟了。

最后是 我的 Demo,相关的代码开源在 CheckSSL

本文作者 : Sukka
本文采用 CC BY-NC-SA 4.0 许可协议。转载和引用时请注意遵守协议!
本文链接 : https://blog.skk.moe/post/checkssl-status/

本文最后更新于 天前,文中所描述的信息可能已发生改变