惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

D
DataBreaches.Net
N
Netflix TechBlog - Medium
P
Proofpoint News Feed
D
Docker
J
Java Code Geeks
L
LangChain Blog
Microsoft Security Blog
Microsoft Security Blog
The GitHub Blog
The GitHub Blog
I
InfoQ
Stack Overflow Blog
Stack Overflow Blog
云风的 BLOG
云风的 BLOG
Engineering at Meta
Engineering at Meta
MongoDB | Blog
MongoDB | Blog
月光博客
月光博客
T
Tailwind CSS Blog
M
MIT News - Artificial intelligence
Blog — PlanetScale
Blog — PlanetScale
Google DeepMind News
Google DeepMind News
腾讯CDC
罗磊的独立博客
U
Unit 42
爱范儿
爱范儿
Vercel News
Vercel News
MyScale Blog
MyScale Blog

破袜子

喜力星银·2026大连草莓音乐节第一场 水中的荷花它的叶子已残 每夫吐槽(119) 看图不说话20260819 长安二十时辰 每夫吐槽(118) 家长会之暗人不说明话 世界杯瞎话第六季——好球 世界杯瞎话第六季——滚滚滚滚滚滚长江东逝水 世界杯瞎话第六季——鸿雁飞啊一双双 每夫吐槽(117) 终结者2:审判日 世界杯瞎话第六季——苟死以利国家生 魍魉战记 为什么不用相机把屏幕上的接关密码拍下来? 张屠户必须死 梦四十八 超级马里奥全明星 每夫吐槽(116) 无人岛物语 每夫吐槽(115) 乙巳观影记录 梦四十七 一次跳槽 每夫吐槽(114) 重温老片《非常突然》 你刚刚好像S了 2025阅读记录
acme.sh 从Webroot改为 NameSilo DNS 申请通配符证书踩坑记
大致 · 2026-08-21 · via 破袜子

我这边虽然用的是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 就会每天去检查证书的有效时间,在到期前自动更新证书并安装到指定位置,具体的参数与上面最后两条命令相同。

使用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坑惨了。