NAS ACME.SH 群晖自动申请部署Let's Encrypt的SSL证书
1 背景知识
在数字安全日益重要的今天,为您的网络存储器(NAS)配置 HTTPS 证书是保护数据传输的关键一步。
Synology NAS 用户可以通过 Let's Encrypt 免费获得 SSL 证书,但是默认的方法需要开放 80
和 443
网络端口,这可能不是每个人都愿意做的。幸运的是,有一种替代方案:使用 DNS API 验证和 acme.sh 脚本。
这篇文章将指导您如何使用 acme.sh 为您的 Synology NAS 设置 HTTPS 证书,而无需开放额外的网络端口。
现有的一些介绍群晖配置免费Let's Encrypt证书的方法,要么是表达不清,要么是需要一些技术功底,对小白并不友好。x现在对官方文档重新整理一下,并且亲测有效,这是目前位置我们认为最好的方案也是唯一全部成功的方案。
2 准备工作
在开始之前,确保您有以下条件:
- 购买一个域名,并且可以控制其 DNS 记录。此域名
- 对您的 Synology NAS 有管理员权限,端口请设置为默认的
5000
。 - 对您的 Synology NAS 有 SSH 访问权限。
3 安装 acme.sh
首先,您需要在您的设备上安装 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.sh 的 dnsapi 文档来找到正确的设置方法。
- 首先您需要登录 阿里云账户 ,获取 RAM 的用户名和API秘钥。
- 配置阿里云账户 的
AdministratorAccess
,AliyunRAMFullAccess
权限。具体请参考阿里云添加DNS API 的accesskey_阿里云dns access key-CSDN博客 - 声明环境变量。
#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"
这里需要写两个 -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
这里会报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
如果您的管理员账户启用了双因素验证,请确保获取 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)