大家好,我是开心哥!

阿里和腾讯在今年陆续的把免费版ssl证书有效期从1年改为了3个月,使我们从原来的一年一换证书变为了现在的3个月一换,很不方便,后续就在网上找各种方法来避免自己手动更换ssl证书;

最后决定用acme来自动更新群晖(Synology)的ssl证书

1、首先,在群晖上安装acme脚本

你需要用ssh连接工具连接上nas,然后执行 sudo su命令,进入管理员模式

然后到当前用户根目录下载脚本

执行脚本安装到本地并指定申请ssl证书的邮箱

sudo su
cd ~
wget https://github.com/acmesh-official/acme.sh/archive/master.tar.gz
tar xvf master.tar.gz
cd acme.sh-master/
./acme.sh --install --nocron --home /usr/local/share/acme.sh --accountemail "email@gmail.com"
source ~/.profile

 2、配置 域名服务商DNS信息

我的域名是注册在腾讯的,因此选择的是dnspod.cn的参数指定

你需要到dnspod.cn登录后新建dnspod token

export DP_Id="<id>"
export DP_Key="<key>"

DP_Id 和 DP_Key 将保存在 ~/.acme.sh/account.conf 中,并在需要时重复使用。

 3、创建ssl证书

到acme对应目录下

填写需要申请ssl证书的域名

填写对应dns名称

cd /usr/local/share/acme.sh
export CERT_DOMAIN="your-domain.com"
export CERT_DNS="dns_dp"
./acme.sh --issue --server letsencrypt --home . -d "$CERT_DOMAIN" --dns "$CERT_DNS" --keylength 2048

4、部署默认证书

对环境进行一些配置,一般默认就行,如果对默认端口进行过改动,修改SYNO_PORT参数就行

SYNO_CREATE字段是如果没有证书则自动创建,设置一下较好。

SYNO_CERTIFICATE是证书注释信息。

export SYNO_SCHEME="http"
export SYNO_HOSTNAME="localhost"
export SYNO_PORT="5000"
export SYNO_CREATE=1
export SYNO_CERTIFICATE=""

export SYNO_USE_TEMP_ADMIN=1

这一行是设置为使用自动创建的临时管理员用户来执行命令,

设置完毕后

执行命令 ./acme.sh --deploy --deploy-hook synology_dsm -d example.com 将 example.com 的证书部署到 DSM。

注意:可以根据SYNO_CERTIFICATE的不同,部署不同的证书到DSM

(推荐)通过执行 export SYNO_USE_TEMP_ADMIN=1 来使用自动创建的临时管理员用户。这样,您无需提供任何管理员凭据,部署脚本本身将利用 Synology 内置实用程序完成身份验证,因此它设计为仅支持本地部署,不能用于在 docker 中部署或远程部署。

执行命令 ./acme.sh --deploy --deploy-hook synology_dsm -d example.com 将 example.com 的证书部署到 DSM。

5、部署其他证书

通过指定不同的 SYNO_CERTIFICATE(并设置 SYNO_CREATE=1 进行创建),我们可以将多个证书部署到 DSM。

# SYNO_Certificate is the description shown under Security -> Certificates in the DSM Control Panel
export SYNO_CERTIFICATE="A different certificate description"
export SYNO_CREATE=1 # Says to create the certificate if it doesn't exist
./acme.sh --deploy --home . -d "subdomain.$CERT_DOMAIN" --deploy-hook synology_dsm

6、配置证书续订

要在将来自动续订证书,您需要在任务计划程序中配置任务。不建议将其设置为自定义 cronjob(如本 wiki 页面之前所述),因为 DSM 安全顾问会告诉您有关于未知 cronjob 的严重警告。

在 DSM 控制面板中,打开 Task Scheduler 并为用户定义的脚本创建新的计划任务。

常规设置:任务 - 更新默认证书用户 - 根

计划:设置每周续订。例如,每周六上午 11:00。

任务设置:用户自定义脚本:

# renew certificates 
/usr/local/share/acme.sh/acme.sh --cron --home /usr/local/share/acme.sh

7、修复 Synology DSM 升级后损坏的环境

./acme.sh --force --upgrade --nocron --home .

或手动将以下行添加到 /root/.profile 中

. "/usr/local/share/acme.sh/acme.sh.env"

参考链接

https://github.com/acmesh-official/acme.sh/wiki/Synology-NAS-Guide

https://github.com/acmesh-official/acme.sh/wiki/dnsapi#dns_dp

https://github.com/acmesh-official/acme.sh/wiki/deployhooks#20-deploy-the-certificate-to-synology-dsm