本帖最后由 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文件 下面会提到
或者
或者
git clone https://github.com/acmesh-official/acme.sh.git
cd acme.sh
./acme.sh --install -m [email protected]
以上命令选择任一一种 并不是全部执行
都可以用 亲测有效
目前的hassos 会默认安装到~/.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
具体方法就不说了 很多教程的 主要是 我还没做到那一步 等弄完了 再更新下帖子
|