570
文章
·
28714
阅读
570
文章
·
28714
阅读

有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

自动执行脚本:

renew_SSL.sh

解压后上传到服务器

image.png

获取解析服务器accessKEY信息,例如DNSpod的在这里生成:

image.png

创建计划任务:

cd 脚本路径
bash renew_SSL.sh


* 初次使用请修改描述内容和域名一致

image.png


附脚本内容:

#!/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到该目录

image.png

ACME默认使用ZeroSSl申请证书,说明在这里:ZeroSSL.com CA · acmesh-official/acme.sh Wiki · GitHub

设置accessKEY信息,参考:dnsapi · acmesh-official/acme.sh Wiki · GitHub

文章中有说明每一家的API参数怎么设置及使用方法,例如DNSpod的:

image.png

按说明,先执行

export DP_Id="xxxx"

export DP_Key="xxxxxxxxxxxxxxxxxxxxxxxx"

image.png

目录内会生成一个account.conf文件,里面储存着上面设置的accessKEY信息,

下次执行申请证书时,不需要运行export,直接执行申请命令即可。

此时基础信息已配置完,以后就不需要配置了。


然后执行获取证书命令进行测试,域名改成自己的

./acme.sh --issue --dns dns_dp -d giraff.fun --home .

注:此命令在官方说明的后面加上了 --home . 参数,使生成的证书文件保存在工作目录中

image.png

log中的红字提示不用管,不出意外的话,会在目录中生成以域名为名的文件夹,里面储存着证书等文件

image.png

更新证书到群晖,

ACME官方提供的替换证书方式。

修改account.conf,添加以下信息。ACME将模拟登陆进行自动更换证书:

注意:

端口SYNO_PORT使用http的,例如5000,如未修改还是5000,那这一行就不需要写了

证书名称留空则替换默认证书。

SYNO_PORT="DSM的端口"

SYNO_CERTIFICATE="证书名称" 

SYNO_CREATE=1

SYNO_USE_TEMP_ADMIN=1

image.png

替换群晖证书,参考:deployhooks · acmesh-official/acme.sh Wiki · GitHub

./acme.sh --deploy --home . -d giraff.fun --deploy-hook synology_dsm

如果开启二次验证,第一次执行时,会要求输入OPT code, 这里是要设置这个OPT来跳过二次验证,输入后回车,会提示输入设备名称,直接回车用默认值。

image.png

还需要在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]
扫一扫,手机浏览手机访问本站