oflyhigh avatar

每天进步一点点:安全证书(SSL)过期惹的祸

oflyhigh

Published: 18 Dec 2025 › Updated: 18 Dec 2025每天进步一点点:安全证书(SSL)过期惹的祸

每天进步一点点:安全证书(SSL)过期惹的祸

我有一组程序每天运行,做很重要的工作,其中某个功能原本应该自己实现,但是有个网站提供这样的服务,我就直接用这个网站的服务了。

security-3406723_960_720.jpg
(图源 :pixabay)

网站服务的使用也很简单,只需要访问网站的地址,并在后缀中加上我要处理的内容即可,比如访问:

https://api.xxxaaa.io/freeservice/myaccount

这样网站就会帮我执行对应的操作,而这个操作是我后续所有操作的前置条件,没有这个操作,其它的操作全部无法进行。

其实以我的性格,能自己实现的绝不使用第三方的服务,但是进行自己进行这个操作是需要花钱的,而这个网站帮我提供了这个费用;还有就是这个网站我用了N多年,从未出过故障,相当稳定好用。

因为是留给脚本去处理,我当然不能每次都在浏览器中访问类似如上的网址,为了偷懒,我写了如下命令:

echo `date`
`curl -s -A "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.0)" https://api.xxxaaa.io/freeservice/myaccount`

这条指令的大致作用就是模拟 浏览器,在静默模式下访问这个API,并输出结果。我把它加入到定时任务中(crontab),每天执行两次(怕一次因为网络故障啥的失败),非常的好用。

就这样,我一直使用上述脚本来调用相关网站的服务,用了五年多时间,非常感谢这个网站的贴心服务呀。

eye-5814965_960_720.jpg
(图源 :pixabay)

因为我的程序有诸多重试机制,又因为这个网站的贴心服务从未出错,我对程序的运行就疏于检查了,结果前些天偶然去看了一眼,发现我的程序竟然接连失败好几天,损失惨重。

是哪里出了问题呢?我登陆运行程序的服务器,查看了一下程序执行的日志,一看就发现是因为缺少某种前置条件导致的失败。再去看我crontab中设置的脚本的输出,发现出了输出个时间,竟然什么输出都没有。

而正常情况,我应该得到类似:{"result":{"status":"success",....}或者类似的输出。

哪里出了问题呢?我在服务上手动执行了一下相关语句,果然什么输出都没有。于是回Windows下用浏览器访问一下,看看是什么样子,结果返回类似如下的信息:

abb07da344b31996e822ef691cb3f862.png
(类似信息,但不完全相同,当时忘记截图了)

也就是说域名的SSL证书出问题了,仔细查看了一下域名的证书,发现导致这个问题的原因是域名SSL证书已经过期。

curl访问SSL证书过期的域名,直接会报错(我之前加了-s参数,所以直接返回空了),使用curl(不加-s)访问,报错信息类似如下:

curl failed to verify the legitimacy of the server and therefore could not establish a secure connection to it. To learn more about this situation and how to fix it, please visit the web page mentioned above.

这个问题要怎么解决呢?原则上来讲,应该是由站点服务商来续费或者更新域名的SSL证书,而不应该由我来解决。但是我这无法访问,直接导致我的程序无法正常使用,损失惨重呀。

想联系站点服务商,又没有他们直接的联系方式,那就只好从自己这端解决了,简单来讲,既然是域名证书出问题,那么我们访问时不校验证书就好了呗。

echo `date`
`curl  --insecure -s -A "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.0)" https://api.xxxaaa.io/freeservice/myaccount`

没错,就是加了一个--insecure参数,搞定,简单来讲就是绕过检查SSL证书。

iris-9285831_960_720.jpg
(图源 :pixabay)

那这样操作有没有风险呢?答案是有的——这样有可能让连接遭遇这会让连接容易遭到中间人攻击(MITM,Man-In-The-Middle)!

所谓的中间人攻击,简单来讲就是:有人悄悄站在你和服务器之间,把你发出去的数据拦下来、修改,或者伪装成你继续和对方通信。

比如别人冒充这个网站和我通讯,又比如偷看我传送给这个网站的数据,甚至篡改这些数据。😱

我又想了一下,无论是别人冒充这个网站,又或者偷看,又或者篡改我和网站之间的通信数据,在我这个使用场景下,都没啥意义呀。

所以,这样改动,使得我的程序能工作正常,在我这个使用场景下对我而言又完全没有风险,当然就用得心安理得啦。

撰写本文时,我又去看了一眼,发现这个网站证书过期的问题已然修复。
9cbdbcfe2601094bde98a3a364339b53.png

不过我懒得把我指令中的--insecure参数去掉了,就觉得放那挺好的,有备无患哦。

security-1163108_960_720.jpg
(图源 :pixabay)

当然了,还有一种方式是彻底不用第三方网站的服务,自己成程序搞定这个事情(其实几年前,程序我都写好了一大半),但是想想要每次自己处理这项服务,都要花钱(虽然不多),还是算了吧,就继续用着吧。

(重要提示:朋友们遇到网站安全证书失效时,务请谨慎操作,避免信息泄露或者财产损失!)

Leave 每天进步一点点:安全证书(SSL)过期惹的祸 to:

Written by

Programmer, Maker, Freelancer, Witness. Make friends, Make money, Make life better!

Read more #cn posts


Best Posts From oflyhigh

We have not curated any of oflyhigh's posts yet. But you can encourage our curation team to review posts by visiting them regularly and by referring other readers. Because we give priority to frequently read content.

More Posts From oflyhigh