『瀚思彼岸』» 智能家居技术论坛

 找回密码
 立即注册
查看: 9186|回复: 6

[经验分享] hassos acme.sh 自动更新泛域名ssl证书 +(dnspod自动解析教程)

[复制链接]

5

主题

117

帖子

506

积分

高级会员

Rank: 4

积分
506
金钱
389
HASS币
0
发表于 2021-7-25 20:16:04 | 显示全部楼层 |阅读模式
本帖最后由 livebelive 于 2021-7-27 23:04 编辑

已经放弃了acme.sh了....
发现申请的证书还要手动转格式...算了 改用dnspod的免费ssl了..........






首先声明:本人小白一枚-----------------------------------------------
最近折腾 DNS域名 ssl证书+反向代理 期间查阅了很多资料 借鉴了很多文章
首先感谢大神 neroxps的帖子

无 80 端口申请 Letsencrypt 免费 SSL 证书

但帖子年久失修了 acme在更新 hassos也在不停的改机制 用帖子中的方法照搬是不成功的
帖子中的docker命令 已经不能用了 这应该是hassos更新的锅
而且帖子中没有提到非docker方式如何自动更新证书到指定路径
并且docker方式下自动保存证书的命令 会提示read-only 这个是因为HASSOS的ssl目录是挂载的 而挂载权限是read-only...

首先你需要一个域名 不一定是dnspod的域名 只要是能拿到 id和token的都可以 acme.sh支持很多种域名api
这里参考 dnsapi
如果遇到不支持的 也可以手动申请 但是无法自动更新 我是因为家里路由器有插件可以自动解析域名 所以用了这个
关于自动解析域 这里推荐买一台华硕路由器 并刷 koolshare 的梅林系统 系统下有插件可以用 里面有dnspod这个插件 可以设置自动解析当前路由器的IP到域名


然后开始折腾

SSH & Web Terminal登录ssh
首先呢 我们可以使用非docker模式使用以下任意一种命令 安装 acme.sh
之所以我们要先用这种方式更新的原因是 我们后面会需要用户DNS配置文件 account.conf文件 下面会提到
curl https://get.acme.sh | sh -s [email protected]
或者
wget -O -  https://get.acme.sh | sh -s [email protected]
或者
git clone https://github.com/acmesh-official/acme.sh.git
cd acme.sh
./acme.sh --install -m  [email protected]

以上命令选择任一一种 并不是全部执行
都可以用 亲测有效
目前的hassos 会默认安装到~/.acme.sh 下面
cd ~/.acme.sh
安装好后 我们需要做一个alias 便于后面执行命令
alias acme.sh=~/.acme.sh/acme.sh
然后用这两条命令替换你申请到的DNS的API ID和token
dnspod的id和token 是token下面那个 页面里面还有一个key 那个不用管 最开始 我分不清 api和token 两边都有id...试了几次 走了几次弯路
export Ali_Key="4324234"

执行完后 执行申请证书命令
acme.sh --issue --dns dns_dp -d abc.cn -d a.abc.cn -d b.abc.cn --debug --force

这里可以输入你的多个二级域名 同时申请 也可以直接输入你的域名 比如说 abc.cn这样的泛域名 这样的话 只要是abc.cn的下的主机 就都可以使用这个证书
这里是--debug方便你查看运行过程 如果报错 可以排查
--force是强制更新

简单命令

acme.sh --issue --dns dns_dp -d abc.cn --debug --force

ps:这里的dns_dp可以换成你dns服务商的api参数 参考 前面提供的那个链接
申请过程要等一会 期间会有很多输出
申请成功后会有输出 告诉你证书保存在哪里 默认是保存在

cd ~/.acme.sh/abc.cn/

这里我开始不知道怎么把证书拷贝出来 后来知道了 但是这种方式 我不确定是否可以自动更新 貌似也是可以的 但是证书是放在~/.acme.sh下 homeassistant想要访问到的话 需要做软连接比较麻烦 开始我不懂得怎么操作 后来知道了ssl的真实路径 理论上 使用软连接也可以实现 但并不确定是否可以开机运行 所以还是用了docker的方式来做

使用docker方式 更简单

docker run --rm neilpang/acme.sh

等待pull镜像
pull完成后 我们就可以申请证书了
我们先执行证书申请命令

docker run --rm  -it  \
  -v /mnt/data/supervisor/ssl/acme:/acme.sh  \
  neilpang/acme.sh  --issue --dns dns_dp -d abc.cn --debug

ps:这里的dns_dp可以换成你dns服务商的api参数 参考 前面提供的那个链接


PS:这里一个坑就是我开始用的路径是/ssl  /root/ssl这样的路径 但执行命令时 就会提示read-only...网上搜是说 hassos是把这些路径以read-only的方式挂载的 所以是只读
后来参考了最新版本的hassos的挂载路径真实路径 找到的

执行一次后 他会在你的samba下的ssl文件夹创建一个acme文件夹,并且里面有一个Amazon
的默认证书...

文件夹中还有一个account.conf的文本文件
但显然这个不是们需要的
那么我们如何来获得自己域名的证书呢?
这里就需要上面提到的account文件了
我们直接查看文件将文件内容拷贝下来 放到你samba/ssl/acme下面那个account.conf文件中 直接替换就好了
cat ~/.acme.sh/account.conf

那么我们再来执行一次docker命令
docker run --rm -it \
-v /mnt/data/supervisor/ssl/acme:/acme.sh \
neilpang/acme.sh --issue --dns dns_dp -d abc.cn --debug
等一会 我们可以看到证书已经申请成功了...

这个证书是自动更新的 不用管他了
下面我们需要把docker加入到守护进程 不然每次重启机器 他就不运行了...
docker run --rm  -itd  \
  -v /mnt/data/supervisor/ssl/acme:/acme.sh  \
  --net=host \
  --name=acme.sh \
  -v /var/run/docker.sock:/var/run/docker.sock \
  neilpang/acme.sh daemon


至此所有工作完成 之前非docker方式安装的那个 应该也是在运行中的 而且自动运行 我不知道如何卸载他 索性就把 ~/.acme.sh 这个目录删除了...强迫症的 可以去翻一下资料查查如何卸载
接下来 如果反向代理 参考

hassio配置SSL及反向代理最简单的方法:Nginx Proxy Manager
或者使用Simple Proxy
具体方法就不说了 很多教程的 主要是 我还没做到那一步 等弄完了 再更新下帖子








回复

使用道具 举报

8

主题

366

帖子

3985

积分

论坛元老

Rank: 8Rank: 8

积分
3985
金钱
3619
HASS币
10
发表于 2021-7-25 21:15:50 | 显示全部楼层
Nginx Proxy Manager   的证书要手动导入吧,不知acme.sh配合Nginx能否实现证书的自动更新,目前搁浅了

期待大佬后续教程
回复

使用道具 举报

5

主题

295

帖子

3992

积分

论坛元老

Rank: 8Rank: 8

积分
3992
金钱
3697
HASS币
0
发表于 2021-7-26 09:21:29 | 显示全部楼层
s2233 发表于 2021-7-25 21:15
Nginx Proxy Manager   的证书要手动导入吧,不知acme.sh配合Nginx能否实现证书的自动更新,目前搁浅了

...

直接在web设置好key和secret就行了
回复

使用道具 举报

16

主题

168

帖子

1409

积分

金牌会员

Rank: 6Rank: 6

积分
1409
金钱
1241
HASS币
0
发表于 2021-7-26 20:53:19 | 显示全部楼层
s2233 发表于 2021-7-25 21:15
Nginx Proxy Manager   的证书要手动导入吧,不知acme.sh配合Nginx能否实现证书的自动更新,目前搁浅了

...

不用,install直接覆盖文件即可
回复

使用道具 举报

16

主题

168

帖子

1409

积分

金牌会员

Rank: 6Rank: 6

积分
1409
金钱
1241
HASS币
0
发表于 2021-7-26 21:17:27 来自手机 | 显示全部楼层
pikaq 发表于 2021-7-26 20:53
不用,install直接覆盖文件即可

install覆盖文件 reload_cmd重启生效 实现自动更新
回复

使用道具 举报

15

主题

636

帖子

2203

积分

金牌会员

Rank: 6Rank: 6

积分
2203
金钱
1567
HASS币
0
发表于 2021-9-12 11:07:37 | 显示全部楼层
我还是在用cloudflare的ddns+acme的lets证书,每3个月手动申请一次泛域名的,然后一个命令转换格式,再更新到nginx 反代+群晖。。。留下了没有技术的泪水。
回复

使用道具 举报

0

主题

67

帖子

314

积分

中级会员

Rank: 3Rank: 3

积分
314
金钱
247
HASS币
0
发表于 2021-10-28 13:43:37 | 显示全部楼层
谢谢分享
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-11-27 16:40 , Processed in 0.085731 second(s), 28 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表