NAS ACME.SH 群晖自动申请部署Let's Encrypt的SSL证书

1 背景知识

在数字安全日益重要的今天,为您的网络存储器(NAS)配置 HTTPS 证书是保护数据传输的关键一步。

Synology NAS 用户可以通过 Let's Encrypt 免费获得 SSL 证书,但是默认的方法需要开放 80443 网络端口,这可能不是每个人都愿意做的。幸运的是,有一种替代方案:使用 DNS API 验证和 acme.sh 脚本。

这篇文章将指导您如何使用 acme.sh 为您的 Synology NAS 设置 HTTPS 证书,而无需开放额外的网络端口。

现有的一些介绍群晖配置免费Let's Encrypt证书的方法,要么是表达不清,要么是需要一些技术功底,对小白并不友好。x现在对官方文档重新整理一下,并且亲测有效,这是目前位置我们认为最好的方案也是唯一全部成功的方案。

2 准备工作

在开始之前,确保您有以下条件:

首先,您需要在您的设备上安装 acme.sh 。通过 SSH 登录到您的 NAS 并执行以下命令:

sudo su 
//输入群辉管理员账号:
#root>
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 "jikcheng@aliyun.com" 
source ~/.profile

如果需要升级 acme.sh 脚本,请执行以下命令。

acme.sh --upgrade

4 配置 DNS

阿里云为例,您需要设置两个环境变量,以便 acme.sh 能够设置 DNS 记录。如果您使用的是其他 DNS 提供商,查阅 acme.shdnsapi 文档来找到正确的设置方法。

  1. 首先您需要登录 阿里云账户 ,获取 RAM 的用户名和API秘钥。
  2. 配置阿里云账户AdministratorAccess , AliyunRAMFullAccess 权限。具体请参考阿里云添加DNS API 的accesskey_阿里云dns access key-CSDN博客
  3. 声明环境变量。
#root>
export Ali_Key="LTAI5tFtaSfKGABt8qorns2X"
export Ali_Secret="QxscMc35sOZaZGp6NDKtbpNhxKJvaT"

5 创建证书

接下来,为您的域名创建证书:

cd /usr/local/share/acme.sh 
export CERT_DOMAIN="aming.work" 
export CERT_DNS="dns_ali" 
./acme.sh --issue --server letsencrypt --home . -d aming.work  -d *.aming.work --dns "$CERT_DNS"
Warning

这里需要写两个 -d 选项第一个是 aming.work 第二个选项 *.aming.work

参数 说明
--issue 签发证书
--server ACME 目录资源 URI. (默认: https://acme.zerossl.com/v2/DV90) ,这里使用letsencrypt。
--home 指定 acme.sh 的家目录。
CERT_DOMAIN 指定要签发的证书域名。
CERT_DNS 指定签发证书域名的DNS 类型,具体值请参考[[#4 配置 DNS]]小结。
[Wed Jun  5 12:40:14 CST 2024] Domains have changed.
[Wed Jun  5 12:40:16 CST 2024] Using CA: https://acme-v02.api.letsencrypt.org/directory
[Wed Jun  5 12:40:16 CST 2024] Multi domain='DNS:aming.work,DNS:*.aming.work'
[Wed Jun  5 12:40:21 CST 2024] Getting webroot for domain='aming.work'
[Wed Jun  5 12:40:21 CST 2024] Getting webroot for domain='*.aming.work'
[Wed Jun  5 12:40:21 CST 2024] aming.work is already verified, skip dns-01.
[Wed Jun  5 12:40:21 CST 2024] *.aming.work is already verified, skip dns-01.
[Wed Jun  5 12:40:21 CST 2024] Verify finished, start to sign.
[Wed Jun  5 12:40:21 CST 2024] Lets finalize the order.
[Wed Jun  5 12:40:22 CST 2024] Le_OrderFinalize='https://acme-v02.api.letsencrypt.org/acme/finalize/1764231537/275577288087'
[Wed Jun  5 12:40:23 CST 2024] Downloading cert.
[Wed Jun  5 12:40:23 CST 2024] Le_LinkCert='https://acme-v02.api.letsencrypt.org/acme/cert/0404dae0f6fb952c87a7e08037d7df0035aa'
[Wed Jun  5 12:40:25 CST 2024] Cert success.
-----BEGIN CERTIFICATE-----
MIIEJDCCAwygAwIBAgISBATa4Pb7lSyHp+CAN9ffADWqMA0GCSqGSIb3DQEBCwUA
MDIxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQswCQYDVQQD
EwJSMzAeFw0yNDA2MDUwMzQwMjNaFw0yNDA5MDMwMzQwMjJaMBUxEzARBgNVBAMT
CmFtaW5nLndvcmswWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQ2nO/fBBfxEDuf
51narnMuLBls9m8kXDcwYIo6CSaQEbRD6+aLlejTRaUSclVsb3JQdJgPlNPkdzan
kTIQKQUlo4ICGjCCAhYwDgYDVR0PAQH/BAQDAgeAMB0GA1UdJQQWMBQGCCsGAQUF
BwMBBggrBgEFBQcDAjAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBRDUqjAwxi73TyI
o/aFzPTZc9FJfTAfBgNVHSMEGDAWgBQULrMXt1hWy65QCUDmH6+dixTCxjBVBggr
BgEFBQcBAQRJMEcwIQYIKwYBBQUHMAGGFWh0dHA6Ly9yMy5vLmxlbmNyLm9yZzAi
BggrBgEFBQcwAoYWaHR0cDovL3IzLmkubGVuY3Iub3JnLzAjBgNVHREEHDAaggwq
LmFtaW5nLndvcmuCCmFtaW5nLndvcmswEwYDVR0gBAwwCjAIBgZngQwBAgEwggEE
BgorBgEEAdZ5AgQCBIH1BIHyAPAAdQBIsONr2qZHNA/lagL6nTDrHFIBy1bdLIHZ
u7+rOdiEcwAAAY/msrf1AAAEAwBGMEQCICyhRhkyEiOK73kJkVKMnJzXT9Qc5vDT
ggLh1kxS6rMmAiBvovmn1TR7VjdaKOJu0ECZM+9dXMXc/VB01u8rQYE2ZQB3AO7N
0GTV2xrOxVy3nbTNE6Iyh0Z8vOzew1FIWUZxH7WbAAABj+ayt+4AAAQDAEgwRgIh
APp+e9lR7TcbZGhYueWRsLmMcmDgWJ3B1ANG7isFxZ/3AiEAmg7qN3UgQship4gC
uLnkDroPRaFfaLtVe9qL2jV+zPowDQYJKoZIhvcNAQELBQADggEBAFJ4j52cl0r5
CivFevbpEe0tRbHsqy+a0uB2gMXsk3Y5J8KpMADmIUbPpdCj2xlKQcfPnrqutld/
fzAPntCH19QKsmBgOXZVrSQKLOQz3uh3oGO1LZQyvaw2RECi/p0/fJCJrzY3Tj1I
NxuWhl3XyWNnpkcHVnJqhQcbtvHq4tuFdSrO0gQF975DSrHC/JGVzHf11JXjN/t2
GYbxEGUN+rPR7t6cZlr+kE5gNxBka41MhXi5dpWHpOO5Jzh1OVe+/iTC2VwKu2X4
TR3T7rETZDvKErZgpYRtfTiaQ8GyMcuv8w/GWvvPmfjqaClPRWBJBD/Ofn92vLMb
WW0LmXZnt1w=
-----END CERTIFICATE-----
[Wed Jun  5 12:40:25 CST 2024] Your cert is in: ./aming.work_ecc/aming.work.cer
[Wed Jun  5 12:40:25 CST 2024] Your cert key is in: ./aming.work_ecc/aming.work.key
[Wed Jun  5 12:40:25 CST 2024] The intermediate CA cert is in: ./aming.work_ecc/ca.cer
[Wed Jun  5 12:40:25 CST 2024] And the full chain certs is there: ./aming.work_ecc/fullchain.cer
Warning

这里会报DNS 无法添加的错误,请确保云账户的权限能够访问 DNS API,否则会报以下错误。

[Wed Jun  5 09:47:10 CST 2024] Using CA: https://acme-v02.api.letsencrypt.org/directory
[Wed Jun  5 09:47:10 CST 2024] Creating domain key
[Wed Jun  5 09:47:11 CST 2024] The domain key is here: ./www.aming.work_ecc/www.aming.work.key
[Wed Jun  5 09:47:11 CST 2024] Single domain='www.aming.work'
[Wed Jun  5 09:47:15 CST 2024] Getting webroot for domain='www.aming.work'
[Wed Jun  5 09:47:15 CST 2024] Adding txt value: tCd782GaIld2qQhUIvUX2mLpHX71Q5rMjAjwb1MAFQE for domain:  _acme-challenge.www.aming.work
[Wed Jun  5 09:47:21 CST 2024] Error add txt for domain:_acme-challenge.www.aming.work
[Wed Jun  5 09:47:21 CST 2024] Please add '--debug' or '--log' to check more details.
[Wed Jun  5 09:47:21 CST 2024] See: https://github.com/acmesh-official/acme.sh/wiki/How-to-debug-acme.sh

6 部署证书

使用 Synology DSM deployhook 部署您的证书。这将替换默认的证书:

#root>
cd /usr/local/share/acme.sh 
export SYNO_Username='aming' 
export SYNO_Password='Xj3345091@'
export SYNO_Port=2000
export SYNO_Certificate="aming.work" 
./acme.sh --deploy --home . -d "$CERT_DOMAIN" --deploy-hook synology_dsm
[Wed Jun  5 12:40:36 CST 2024] The domain 'aming.work' seems to have a ECC cert already, lets use ecc cert.
[Wed Jun  5 12:40:37 CST 2024] Logging into localhost:2000...
[Wed Jun  5 12:40:39 CST 2024] Getting certificates in Synology DSM...
[Wed Jun  5 12:40:40 CST 2024] Generating form POST request...
[Wed Jun  5 12:40:40 CST 2024] Upload certificate to the Synology DSM.
[Wed Jun  5 12:41:24 CST 2024] Restart HTTP services succeeded.
[Wed Jun  5 12:41:25 CST 2024] Success
Note

如果您的管理员账户启用了双因素验证,请确保获取 SYNO_DID 值并设置相应的环境变量。

7 配置证书自动续订

在 DSM 的任务计划程序中创建一个新任务,以便自动续订证书:

参数 说明
执行用户 root
执行周期 一月一次
#root>
/usr/local/share/acme.sh/acme.sh --cron --home /usr/local/share/acme.sh/

8 修复环境

如果您的 acme.sh 环境在 DSM 升级后损坏,您可以通过以下命令修复:

cd /usr/local/share/acme.sh 
./acme.sh --force --upgrade --nocron --home /usr/local/share/acme.sh

或者,您可以手动添加以下内容到您的 `/root/.profile` 文件中:

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

通过以上步骤,您可以轻松地为您的 Synology NAS 配置 HTTPS 证书,提高您的数据安全性。acme.sh 提供了一个灵活且强大的方式来管理 SSL 证书,而不需要在路由器上开放端口,为您的网络安全添加了一层额外的保护。

9 参考链接

通过ACME让群晖(Synology)自动申请部署Let's Encrypt的SSL证书 - M学院 (mornlong.com)