可能很多人像我一样,把运行博客的主机放在了 cloudflare 后面,这样的好处是别人不容 易知道主机的实际 ip,恶意流量先过一波 cloudflare,是不是就安全了一点,不过代价是 配置又复杂了一些。
前阵子 Let’s Encrypt 发邮件说,他们后面会终止域名到期提醒的邮件通知,估计大量的 邮件发送对他们来说也是个不小的成本,我以前确实也是看邮件提醒再去更新的,所以这个 邮件通知对我还是有一定作用的,不过我作为一个免费用户也没什么资格抱怨,虽说我不爱 用 crontab,倒也不是什么大事,给自己设个日历不就好了。
这不,我今天收到了我的「crontab」提示,于是我去看了下我的证书。

觉得很奇怪,这不还有两个月到期,怎么就提醒我更新了。当时没有想到 cloudflare 这一 层。不过我还是去更新了证书。
更新完证书,我又去浏览器那边检查了下我的证书,发现日期还是没变,我就大概意识到这 个问题所在了。
由于我的主机在 CF 背后,所以终端用户访问到的,其实是 CF,而不是我的主机,那么这 个证书很显然就是 CF 帮我签发的,所以这也是另一个疑点的原因:这个证书的颁发者 是 google,而不是 Let’s Encrypt。
那么这么一来,既然终端用户访问不到我原来的证书,我们是否还有必要更新我们的证书, 简单来说,我觉得需要,但是实际上也可以不用。
为什么说需要,因为我很清楚记得上次我没更新证书时,从浏览器访问我的网站报错了, CF 很明确地告诉终端用户,你访问我没问题,但是我访问网站主机有问题。所以如果主机 的证书有问题,也是会影响到用户访问的。
那为什么说实际也可以不用,CF 有提供几个档次的配置,某些配置可以接受不加密或自签 名的证书,这两种情况,我们应该就可以不用定期维护我们的证书了, 不过注意:这不是推荐做法,推荐做法还是需要我们去定期维护证书的。
既然我们需要定期维护证书,但是从终端用户的角度又无法看到我们维护的证书的到期时 间,这就不方便我们检查我们自己证书的到期时间了。
一个比较直观的方案是登到服务器上去检查证书的时间,这绝对没问题,不过我不太想登, 因为我以前检查证书也只是去浏览器上看看,所以我比较希望有一个不登入服务器的方案。
简单分析下我的需求,其实就是,我需要强制把 tricks.one 解析 到我的原始主机上,这样我就可以拿到主机的原始证书。
我的主机并没有限制只能从 CF 访问,这相对会有一些 ip 泄露的风险,但是相应的也简单
一点,我可以强制把 tricks.one 解析到我的主机上去,要做到这
个,使用 curl 就可以了:
curl -v -I --resolve tricks.one:443:123.123.123.123 https://tricks.one
查看 curl 的结果,就可以知道证书的到期时间:
- Server certificate:
- subject: CN=tricks.one
- start date: Jul 8 00:03:14 2025 GMT
- expire date: Oct 6 00:03:13 2025 GMT
- subjectAltName: host “tricks.one” matched cert’s “tricks.one”
如果我们把网站隐藏在 CF 背后,那么终端用户看到的证书,其实是 CF 的证书,而不是我
们的证书,CF 和我们的网站沟通时,才会使用我们的证书。一般说来,我们的证书还是需
要我们自己维护的。如果你可以直连服务的 443 端口,那么可以通过 curl,强制解析
域名到我们的服务器,来查询证书的到期时间。