有322人阅读过
群晖使用ACME签发证书
发布于2024/01/24 更新于2024/12/18
[ 教程仅保证更新时有效,请自行测试。]
[ 教程仅保证更新时有效,请自行测试。]
下载CAME程序,GitHub - acmesh-official/acme.sh: A pure Unix shell script implementing ACME client protocol
备用下载:acme.sh-master.zip
自动执行脚本:
解压后上传到服务器
获取解析服务器accessKEY信息,例如DNSpod的在这里生成:
创建计划任务:
cd 脚本路径 bash renew_SSL.sh
* 初次使用请修改描述内容和域名一致
附脚本内容:
#!/bin/bash # 群晖登陆http端口 port="xxx" # 要更新的域名列表 domains=("域名1" "域名2") # DNS提供商 dns_dp,dns_ali DNS_server="dns_dp" # DNSpod 信息 DP_Id="xxxxxx" DP_Key="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" # Ali DNS信息 Ali_Key="xxx" Ali_Secret="xxx" # 企业微信群机器人webhook Webhook="https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxxxxxxxxxxxxxxxxxxxxx" ##################### # 以下为程序代码,不懂勿动 # ##################### if [ "$DNS_server" == "dns_dp" ]; then export DP_Id="${DP_Id}" export DP_Key="${DP_Key}" elif [ "$DNS_server" == "dns_ali" ]; then export Ali_Key="${Ali_Key}" export Ali_Secret="${Ali_Secret}" fi # 生成随机邮箱 generate_random_email() { local random_str=$(head /dev/urandom | tr -dc a-z0-9 | head -c 8) echo "${random_str}@163.com" } email=$(generate_random_email) # 注册CA if [ ! -d "./ca" ]; then ./acme.sh --register-account -m "${email}" --server zerossl --home . fi # 循环处理每个域名 for domain in "${domains[@]}"; do echo "正在处理域名: ${domain}" echo "证书申请中..." # 删除旧的证书文件 if [ -d "${domain}" ]; then echo "检测到旧目录 ${domain},正在删除..." rm -rf "${domain}" echo "旧目录已删除" fi # 创建独立的目录 mkdir -p "${domain}" cp -rf ca "${domain}" echo "证书申请中..." # 申请证书,指定独立的 home 目录 ./acme.sh --issue --dns ${DNS_server} -d "${domain}" --home "${domain}" echo "证书申请成功!" # 写入登陆信息 cat <<EOF > "./${domain}/account.conf" SYNO_USE_TEMP_ADMIN=1 SYNO_CREATE=1 SYNO_PORT=${port} SYNO_CERTIFICATE="${domain}" EOF echo "登陆信息已保存!" # 重命名证书目录名 mv "${domain}/${domain}_ecc" "${domain}/${domain}" echo "已为 ${domain} 整理好所需文件!" echo "正在为 ${domain} 更新证书到系统..." # 更新证书,指定独立的 home 目录 ./acme.sh --deploy --home "${domain}" --deploy-hook synology_dsm -d "${domain}" echo "域名 ${domain} 的证书已更新完成" # 微信通知 curl -s "${Webhook}" -H "Content-Type: application/json" -d "{\"msgtype\": \"text\", \"text\": {\"content\": \"${domain}证书已更新。\"}}" > /dev/null 2>&1 done
以下为讲解,仅供研究,可能有错误未修正!!
第一次使用需要配置一下基础信息
3.1 SSH连接服务器,切换到root账户,cd到该目录
ACME默认使用ZeroSSl申请证书,说明在这里:ZeroSSL.com CA · acmesh-official/acme.sh Wiki · GitHub
设置accessKEY信息,参考:dnsapi · acmesh-official/acme.sh Wiki · GitHub
文章中有说明每一家的API参数怎么设置及使用方法,例如DNSpod的:
按说明,先执行
export DP_Id="xxxx"
export DP_Key="xxxxxxxxxxxxxxxxxxxxxxxx"
目录内会生成一个account.conf文件,里面储存着上面设置的accessKEY信息,
下次执行申请证书时,不需要运行export,直接执行申请命令即可。
此时基础信息已配置完,以后就不需要配置了。
然后执行获取证书命令进行测试,域名改成自己的
./acme.sh --issue --dns dns_dp -d giraff.fun --home .
注:此命令在官方说明的后面加上了 --home . 参数,使生成的证书文件保存在工作目录中
log中的红字提示不用管,不出意外的话,会在目录中生成以域名为名的文件夹,里面储存着证书等文件
更新证书到群晖,
ACME官方提供的替换证书方式。
修改account.conf,添加以下信息。ACME将模拟登陆进行自动更换证书:
注意:
端口SYNO_PORT使用http的,例如5000,如未修改还是5000,那这一行就不需要写了
证书名称留空则替换默认证书。
SYNO_PORT="DSM的端口"
SYNO_CERTIFICATE="证书名称"
SYNO_CREATE=1
SYNO_USE_TEMP_ADMIN=1
替换群晖证书,参考:deployhooks · acmesh-official/acme.sh Wiki · GitHub
./acme.sh --deploy --home . -d giraff.fun --deploy-hook synology_dsm
如果开启二次验证,第一次执行时,会要求输入OPT code, 这里是要设置这个OPT来跳过二次验证,输入后回车,会提示输入设备名称,直接回车用默认值。
还需要在account.conf中添加OPT信息
SYNO_OTP_CODE="XXXXXX"
SYNO_DEVICE_NAME="CertRenewal"
SYNO_DEVICE_ID=""
执行后,会用指定证书替换掉默认证书
如果需要更新远程证书,则
删除:
SYNO_USE_TEMP_ADMIN=1
添加:
SYNO_USERNAME='DSM用户名'
SYNO_PASSWORD='DSM密码'
使用计划任务申请证书及替换默认证书,可设置每月运行一次
# DSM7
# 设置ACME路径 ACME_local="/volume3/web/acme.sh-master" #设置证书对应的域名 domain="giraff.fun" # 切换至ACME路径 cd $ACME_local ./acme.sh --issue --dns dns_dp -d $domain --force --home . # 替换RSA证书 ./acme.sh --deploy --home . -d $domain --deploy-hook synology_dsm
# DSM6.2 及以下 !不支持ecc
# 设置ACME路径 ACME_local="/volume1/docker/ACME" #设置证书对应的域名 domain="giraff.fun" # 切换至ACME路径 cd $ACME_local # 申请RSA证书(2048) ./acme.sh --issue --dns dns_dp -d $domain --keylength 2048 --force --home . # 替换RSA证书 ./acme.sh --deploy --home . -d $domain --deploy-hook synology_dsm
- 一般[0]
- 很赞[0]
- 没用[0]
- 垃圾[0]
- 无语[0]