昨天一个朋友跟说他的 Let’s Encrypt 证书续签失败,今天老王看到自己也有一个网站出现了类似的问题,看 acme.sh 的续签日志,发现错误都是 timeout,详细的信息是 Could not get nonce, let’s try again。下面就分享下解决方法。
一、问题描述
老王服务器的环境是 LNMP,默认的 ssl 证书是用 acme.sh 申请并管理 Let’s Encrypt 证书。
查看 acme.sh.log(路径在 /usr/local/acme.sh
),错误信息如下:
[Wed Jul 7 00:58:49 CST 2021] Could not get nonce, let’s try again.
[Wed Jul 7 00:58:51 CST 2021] GET
[Wed Jul 7 00:58:51 CST 2021] url=’https://acme-v01.api.letsencrypt.org/directory’
[Wed Jul 7 00:58:51 CST 2021] timeout=
[Wed Jul 7 00:58:51 CST 2021] _CURL=’curl -L –silent –dump-header /usr/local/acme.sh/http.header -g ‘
[Wed Jul 7 00:58:51 CST 2021] ret=’0’
[Wed Jul 7 00:58:51 CST 2021] Could not get nonce, let’s try again.
似乎是访问 https://acme-v01.api.letsencrypt.org/directory’ 这个链接超时,之后返回了 Could not get nonce, let’s try again 的错误信息。
于是老王尝试了用 acme.sh 手动续签 SSL 证书,同样返回了错误,并且错误信息更模糊:Sleep 10 and retry。
二、解决办法
首先分享解决方法:更新 LNMP、更新 acme.sh -> 删除已经过期的 SSL 证书 -> 重新生成 SSL 证书。
1、更新 LNMP
目前 LNMP 最新版本是 1.8,并且增加了 BuyPass、ZeroSSL SSL 证书。
首先下载最新的 1.8 版本:
wget http://soft.vpser.net/lnmp/lnmp1.8.tar.gz -cO lnmp1.8.tar.gz && tar zxf lnmp1.8.tar.gz && cd lnmp1.8
从旧版本更新成 1.8 版本:
upgrade1.x-1.8.sh
详细介绍:《LNMP 1.8:增加 PHP 8.0 支持,增加 BuyPass、ZeroSSL SSL 证书,附安装和升级方法》
2、更新 acme.sh
这个在《解决 acme.sh 更新 Let’s Encrypt 证书失败,证书过期问题》已经分享过升级方法了。
1、官方一键升级脚本
acme.sh --upgrade
2、手动升级方法
mkdir temp && git clone https://github.com/acmesh-official/acme.sh.git temp mv acme.sh acme.sh_backup && mv temp/acme.sh .
3、删除过期的 SSL 证书
LNMP 脚本下的 SSL 证书默认是在 /usr/local/nginx/conf/ssl/
,删除对应的 SSL 证书。
4、重新生成 SSL 证书
最简单的方式就是用 lnmp 先删除站点(lnmp del
),之后再添加对应的站点(lnmp add
)。
经过这 4 步,这个“Could not get nonce, let’s try again”续签失败的问题就成功解决了。