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

in HIVE CN 中文社区13 hours ago

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

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)

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

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

Sort:  

我发现小狐狸插件也不能用了,不知道和这个SSL有没有关系。

Obrigado por promover a Língua Portuguesa em suas postagens.

Vamos seguir fortalecendo a comunidade lusófona dentro da Hive.

Metade das recompensas dessa resposta serão destinadas ao autor do post.

Vote no @perfilbrasil para Testemunha Hive.