You've successfully subscribed to 完美的胖达
Great! Next, complete checkout for full access to 完美的胖达
Welcome back! You've successfully signed in.
Success! Your account is fully activated, you now have access to all content.
Ghost博客网站证书过期,怎么办?

Ghost博客网站证书过期,怎么办?

. 2 min read

嗯,又到了周一,打开自己的博客,居然不能访问了!

浏览器提示证书过期,今天11月4号,证书11月3号过期,这可真是……

按道理ghost是会自动刷新证书有效期的,为什么会这样呢?

输入
sudo crontab -l
可以查看ghost自动刷新证书的命令行。

ubuntu@ip-x-x-x-x:/etc/letsencrypt$ sudo crontab -l
36 0 * * * "/etc/letsencrypt"/acme.sh --cron --home "/etc/letsencrypt" > /dev/null

于是进入\etc\letsencrypt目录,试图按照crontab里的命令手动运行acme.sh命令,报错失败。

经过若干尝试和debug,发现抱错原因是timeout,这……

 15 [Mon Nov  4 10:40:12 CST 2019] Le_API='https://acme-v01.api.letsencrypt.org/directory
 16 [Mon Nov  4 10:40:12 CST 2019] Using config home:/etc/letsencrypt        
 17 [Mon Nov  4 10:40:12 CST 2019] ACME_DIRECTORY='https://acme-v02.api.letsencrypt.org/d
 18 [Mon Nov  4 10:40:12 CST 2019] _main_domain='wmdpd.com'                       
 19 [Mon Nov  4 10:40:12 CST 2019] _alt_domains='no'                       
 20 [Mon Nov  4 10:40:12 CST 2019] Using ACME_DIRECTORY: https://acme-v02.api.letsencrypt
 21 [Mon Nov  4 10:40:12 CST 2019] _init api for server: https://acme-v02.api.letsencrypt
 22 [Mon Nov  4 10:40:12 CST 2019] GET                              
 23 [Mon Nov  4 10:40:12 CST 2019] url='https://acme-v02.api.letsencrypt.org/directory'  
 24 [Mon Nov  4 10:40:12 CST 2019] timeout=               
 25 [Mon Nov  4 10:40:12 CST 2019] _CURL='curl -L --silent --dump-header /etc/letsencrypt 

经过多方搜索和排查,最后ls -lh,发现本地acme.sh是建站时的日期,于是怀疑可能是acme.sh版本落后导致。

运行sudo acme.sh --upgrade进行升级,不过升级后的文件被放置在~/.acme.sh/目录下。

于是备份原有acme.sh,并将升级后的acme.sh移动到\etc\letsencrypt目录,再重新试图运行刷新证书的命令。

结果直接运行报permission deniedsudo运行报错,让查wiki。

查了wiki也没看出个啥,再加-f参数试图强制sudo运行一次,证书更新成功。

事实证明ghost update也管杀不管埋,重要的证书更新脚本的版本停滞不前,导致了这次错误。

所以记录下来,供有缘人参考。

至于升级后是否仍会自动更新证书,需要等两个月后查看证书情况,不行的话可能得手动更新,无论如何如果再出错可以尝试先更新acme.sh到最新版本再试试。

这个故事告诉我们,没有动手能力的人慎重考虑自建博客服务,有时候托管也是不错的选择。

完毕。