收起左侧

飞牛OS使用ACME自动申请更新SSL证书

8
回复
659
查看
[ 复制链接 ]

1

主题

2

回帖

0

牛值

江湖小虾

2025-3-7 21:20:00 显示全部楼层 阅读模式

<br /> <br />

飞牛os本身没有acme功能,需要手动添加证书,现在阿里和腾讯的免费证书全都是3个月到期,很麻烦,写个脚本让它自动更新证书

第一步

SSH连接到飞牛,在用户目录新建一个脚本文件update-certs.sh(名字随便起,自己找得到就行),内容如下

#!/bin/bash
set -e

# 定义变量
ACME_DIR="/home/NICHX/ACME"
DOMAIN="XXX.COM"
SSL_DIR="/usr/trim/var/trim_connect/ssls/${DOMAIN}/1741347821"
ALI_KEY="XXXXX"
ALI_SECRET="XXXXX"

# 运行 Docker 容器
docker run --rm -itd -v "${ACME_DIR}:/acme.sh" -e Ali_Key="${ALI_KEY}" -e Ali_Secret="${ALI_SECRET}" --net=host --entrypoint /bin/sh --name=acme.sh neilpang/acme.sh

# 设置默认 CA
docker exec acme.sh --set-default-ca --server letsencrypt

# 申请证书
docker exec acme.sh --issue --dns dns_ali -d "${DOMAIN}" --force

# 安装证书
docker exec acme.sh --install-cert -d "${DOMAIN}" --key-file "/acme.sh/privkey.pem" --fullchain-file "/acme.sh/fullchain.pem"

# 移动和设置文件权限
cd "${ACME_DIR}"
if [ -f "fullchain.pem" ]; then
    mv fullchain.pem "${DOMAIN}.crt"
    chmod 0755 "${DOMAIN}.crt"
else
    echo "fullchain.pem 文件不存在,无法移动。" >&2
    exit 1
fi

if [ -f "privkey.pem" ]; then
    mv privkey.pem "${DOMAIN}.key"
    chmod 0755 "${DOMAIN}.key"
else
    echo "privkey.pem 文件不存在,无法移动。" >&2
    exit 1
fi

# 创建软链接
if [ -f "${ACME_DIR}/${DOMAIN}.crt" ]; then
    ln -sf "${ACME_DIR}/${DOMAIN}.crt" "${SSL_DIR}/${DOMAIN}.crt"
else
    echo "${DOMAIN}.crt 文件不存在,无法创建软链接。" >&2
    exit 1
fi

if [ -f "${ACME_DIR}/${DOMAIN}.key" ]; then
    ln -sf "${ACME_DIR}/${DOMAIN}.key" "${SSL_DIR}/${DOMAIN}.key"
else
    echo "${DOMAIN}.key 文件不存在,无法创建软链接。" >&2
    exit 1
fi

# 获取新证书的到期日期并更新数据库中的证书有效期
if [ -f "${SSL_DIR}/${DOMAIN}.crt" ]; then
    NEW_EXPIRY_DATE=$(openssl x509 -enddate -noout -in "${SSL_DIR}/${DOMAIN}.crt" | sed "s/^.*=\(.*\)$/\1/")
    NEW_EXPIRY_TIMESTAMP=$(date -d "$NEW_EXPIRY_DATE" +%s%3N)  # 获取毫秒级时间戳

    # 更新数据库中的证书有效期
    psql -U postgres -d trim_connect -c "UPDATE cert SET valid_to = '$NEW_EXPIRY_TIMESTAMP' WHERE domain = '${DOMAIN}'"
    if [ $? -eq 0 ]; then
        echo "数据库更新成功"
    else
        echo "数据库更新失败" >&2
        exit 1
    fi
else
    echo "证书文件 ${SSL_DIR}/${DOMAIN}.crt 不存在,无法获取到期日期。" >&2
    exit 1
fi

# 停止 Docker 容器
docker stop acme.sh

# 重启服务
sudo systemctl restart webdav.service
sudo systemctl restart smbftpd.service
sudo systemctl restart trim_nginx.service

echo '证书替换完成'

文件中的变量改成你自己的对应的值

ACME_DIR="/home/XXX/ACME" #ACME运行目录

DOMAIN="xxx.com" #改成你自己的域名

SSL_DIR="/usr/trim/var/trim_connect/ssls/\${DOMAIN}/1741347821" #第一次运行时忽略,第二次运行时需修改,后文再说

ALI_KEY="XXXXXXX" #阿里云DNS KEY

ALI_SECRET="XXXXXXX" #阿里云DNS SECRET

第二步

然后使用root用户运行一次脚本,第一次运行会报错,因为这时候没有这个证书的文件夹路径

sudo bash update-certs.sh

打开ACME_DIR,下载里面的xxx.com.crt和xxx.com.key,打开飞牛网页,上传证书

上传之后打开飞牛的/usr/trim/var/trim_connect/ssls/ 这时候里面就有xxx.com这个路径了

复制这个数字的路径,类似‘/usr/trim/var/trim_connect/ssls/xxx.com/1741347821’,粘贴到update-certs.sh的SSL_DIR变量。

再运行一次脚本,这时候应该就成功了。

第三步

使脚本定时执行,ssh到飞牛,输入命令crontab -e

最后一行插入

0 0 1 * * /home/NICHX/update-certs.sh >> /home/NICHX/ACME/acmelog.log 2>&1

意思是每个月1号的0点执行一次脚本,并将日志输出到acmelog.log(这里没有写清理日志,时间久了可以手动删一下日志,如果不需要日志,就不要写>>及之后的内容)

然后Ctrl+X退出并保存,Y确认,Enter确认即可

收藏
送赞 1
分享

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

1

主题

2

回帖

0

牛值

江湖小虾

2025-3-11 09:05:09 显示全部楼层
lucky不是更好吗

0

主题

1

回帖

0

牛值

江湖小虾

2025-3-11 13:28:58 显示全部楼层
厉害,学习了

0

主题

4

回帖

0

牛值

江湖小虾

2025-3-14 10:28:58 显示全部楼层
按照教程,为什么我的飞牛证书是申请并更新成功了,但是5667端口彻底打不开了,连用局域网地址 192.168.X.X:5667都打不开了,还好192.168.X.X:5666还能继续打开飞牛登录页。显示证书都是正常的啊
域名要解析到你的公网IP,路由器要做端口转发  详情 回复
2025-3-15 00:54
但是把申请回来的crt和key文件下载下来 手动上传到飞牛的证书中就可以了,不知道问题出在哪里  详情 回复
2025-3-14 10:35

0

主题

4

回帖

0

牛值

江湖小虾

2025-3-14 10:35:38 显示全部楼层
但是把申请回来的crt和key文件下载下来 手动上传到飞牛的证书中就可以了,不知道问题出在哪里

1

主题

2

回帖

0

牛值

江湖小虾

2025-3-15 00:54:43 楼主 显示全部楼层
域名要解析到你的公网IP,路由器要做端口转发
当然做了转发了,软路由玩了5、6年了,这个还是会的  详情 回复
2025-3-21 10:34

0

主题

3

回帖

0

牛值

fnOS系统内测组

2025-3-17 15:36:54 显示全部楼层
请教:我是阿里域名,怎么绑定飞牛的证书?还是怎么操作?现在域名无法https访问。
去阿里云的控制台https://www.aliyun.com/,申请AccessKey ID和密码,填到lucky里面用acme申请证书就可以了  详情 回复
2025-3-21 10:39

0

主题

4

回帖

0

牛值

江湖小虾

2025-3-21 10:34:43 显示全部楼层
ㅤ_KuZVC 发表于 2025-3-15 00:54
域名要解析到你的公网IP,路由器要做端口转发

当然做了转发了,软路由玩了5、6年了,这个还是会的

0

主题

4

回帖

0

牛值

江湖小虾

2025-3-21 10:39:29 显示全部楼层
ChinaXW 发表于 2025-3-17 15:36
请教:我是阿里域名,怎么绑定飞牛的证书?还是怎么操作?现在域名无法https访问。 ...

去阿里云的控制台https://www.aliyun.com/,申请AccessKey ID和密码,填到lucky里面用acme申请证书就可以了
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则