❌

普通视图

acme.sh 从Webroot改为 NameSilo DNS 申请通配符证书踩坑记

作者 大致
2026年8月21日 12:18

我这边虽然用的是BT面板,但其在某次升级之后自动申请SSL证书功能就不好用了,所以一直用的是crontab + acme.sh自行更新证书。
当时的教程在这里:
https://itlanyan.com/use-acme-sh-get-free-cert/

前情提要

不说清楚我之前干了什么,就说不清楚我改了什么。其实都是照着上面的教程搞的,只不过沿用了宝塔的文件结构,相当简单。
安装

curl https://get.acme.sh | sh

acme.sh安装成功后,会自动创建一个cron任务
运行`crontab -l`能够进行查看,`crontab -e`能编辑。

41 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null

切换CA到letsencrypt

~/.acme.sh/acme.sh --set-default-ca --server letsencrypt

因为我是一切都弄好以后才装的acme.sh,所以是以Webroot 方式申请证书

~/.acme.sh/acme.sh --issue -d 域名 --webroot web 目录

最后要执行一次–install-cert。

~/.acme.sh/acme.sh --install-cert -d 域名 \
--key-file 密钥存放路径(在宝塔nginx配置文件里查找【ssl_certificate_key】) \
--fullchain-file 证书存放路径(在宝塔nginx配置文件里查找【ssl_certificate】) \
--reloadcmd "/etc/init.d/nginx reload" (宝塔要改成这个)

这样之后,crontab 就会每天去检查证书的有效时间,在到期前自动更新证书并安装到指定位置,具体的参数与上面最后两条命令相同。

改为使用namesilo DNS

使用Webroot 有个缺点,就是【-d 域名】这里必须列出每一个具体的域名,比如-d examle.com -d chat.examle.com 需要分别添加,不支持*.examle.com。
偶然看到我的域名服务商namesilo 是可以以DNS API 的方式支持通配符证书更新的。于是按照下面教程的提示,将Webroot 方式改成 namesilo 的DNS API 方式。
http://www.gmloc.me/50.html
因为acme 是会自动记录配置的,所以其实只要改之前的申请那一步的命令就好。

申请一个 namesilo 的 DNS API key

登录namesilo,进入API Manager 选项卡。
右侧页面有两个checkbox 选项:

□ Generate key for read-only access
□ Submitting this form constitutes your acceptance of our API terms of use

坑1:不要勾选“Generate key for read-only access” !!!
注意这个API key 只在这一时刻可见,好好保存好,如果再申请就是新key 了。
(此处可以有截图,但我就是不想放)

使用API key


export Namesilo_Key="你的APIKEY"

想不到吧,我第二个坑踩在这里,而且花了很久才解决。
是这样的,我想,你光export 不行啊,重启以后不就没了嘛,这不行啊,所以自作主张,加了一句
echo ‘export Namesilo_Key=”你的APIKEY”‘ >> ~/.bashrc
第一次不是申请了个只读的key 嘛,放的也是只读的key 。
后来重新申请了key ,嫌修改麻烦,就想反正是重登录才生效,我等一切理顺了再改。
问题就出在这里。acme.sh 也怕出事,对于key 的查找逻辑应该是 source ~/.bashrc >> 使用$Namesilo_Key >>如果没有就用自己上一次存的。
对,它用我自己存的旧key 把我export 的新key 给覆盖掉了。
所以这里正确的做法是只做一次 export Namesilo_Key 就好了,放.bashrc里纯画蛇添足,人家acme会自动记录你的配置,不用担心重启问题。

申请证书


acme.sh --issue \
--dns dns_namesilo \
-d 域名 \
-d '*.域名' \
--ecc \
--force

执行。
这里要说一下为什么readonly 不行。acme 申请证书时要先往DNS里增加一条临时的txt记录,申请结束后再给删掉。
还有个小点,就是acme增加txt记录后,要等这条记录生效。namesilo 这里生效挺慢的,大概要等接近2分钟,所以千万不要以为进程挂了。也可以增加 –dnssleep 参数限制等待时间。

再次配置证书

从Webroot 模式切换到 DNS 模式,不是acme 的常规更新方式,所以不会自动执行配置动作。把上面的安装命令再手动执行一次就好。

~/.acme.sh/acme.sh --install-cert -d 域名 \
--key-file 密钥存放路径(在宝塔nginx配置文件里查找【ssl_certificate_key】) \
--fullchain-file 证书存放路径(在宝塔nginx配置文件里查找【ssl_certificate】) \
--reloadcmd "/etc/init.d/nginx reload" (宝塔要改成这个)

更新Nginx配置

把主域名配置关于SSL部分粘到子域名相同位置,并且子域名照主域名的样子增加
listen 443 ssl http2;
就行了。

其实本来很简单的事,被export坑惨了。


  • (1):阿肆的成名作:《我在人民广场吃炸鸡》
  • (2):后海大鲨鱼主唱
  • (3):万能青年旅社代表作《杀死那个石家庄人》
  • (4):老婆有影院次数卡,看啥都20。

几个docker应用

作者 大灰
2025年12月8日 00:00
以前看别人搞的各种docker应用,甚是羡慕,奈何自己水平有限,总是无法完成docker应用的安装。 现在我用好几个机器练习安装docker,已经有了一点眉目,虽然还很生涩,但是总比不会要强,我自己的数据我自己做主。 下面就是我部署的docker应用: mtab mTab是一款完全免费、无广告的浏览器书签助手。它的设计理念就是要让我们这些每天都要和浏览器打交道的人,能够更加轻松地管理自己的网页收藏。说白了,就是要帮我们把乱糟糟的书签变得井井有条,让我们找起东西来不再抓瞎!   lsky_pro Lsky Pro+ 是一个使用 PHP 语言,采用 Laravel 框架开发的一款 Web […]

最近搞的小玩意

作者 大灰
2025年7月27日 11:00
建站不息,折腾不止。最近我搞了umami、Vaultwarden、AllinSSL。这三个全部都是Docker部署的。 umami 先说umami,去年的时候折腾过一个PHP的统计,加载速度过于缓慢,用了几个月只能放弃。当时也看到过umami,怕麻烦懒得折腾,推迟到了现在。按道理CloudFlare的统计也是不错的,我这纯属“爱好”了。   Vaultwarden Vaultwarden的话以前就玩过,Bitwarden单纯的创建成功,从来没有投入使用。现在懒得记那么多密码了,自建Vaultwarden省心省力也安全。   AllinSSL AllinSSL完全是看着还不错 […]

迁移之后升级

作者 大灰
2025年6月29日 15:15
天气热了,我就完全没有心情更新,烦躁的心情、湿透的衣服,都让我无法专心做某一件事…… 睡不着起来折腾网站环境,nginx、php、redis等等升级到了最新版,运行也没啥问题,但是对于老一点的程序来说还是不兼容。discuz、typecho就会报错懒得解决果断又安装了低版本的php,目前php有两个版本在使用,就这样了。 今天收到一张vps待付账单,果断不续费了。因为手里还有其他机器,目前的配置是2核2G 100GB硬盘价格贵,新的配置(买了好几个月)是2核3G 300GB硬盘。这彻底解决了我的硬盘恐惧症。 再说说SSL,目前免费证书是90天有效期,后面会越来越短,真是造孽!感觉在割韭菜,还好 […]
❌