Synology NAS 무료 Wildcard SSL 인증서 발급받고 자동 갱신 스크립트 적용하기

Last Updated
2023/08/11
Tag
Tech
NAS
Synology
2024.02.10 Update 해당 글에서 소개하고 있는 NS 매뉴얼 모드를 통한 자동 갱신은 더이상 지원되지 않습니다. Cloudflare API를 사용한 인증서 발급 및 자동 갱신 방법 글을 새로 작성해놓았으니, 아래 글을 참고해주세요.
acme.sh 스크립트를 이용해서 Let’s Encrypt Wildcard SSL 인증서를 무료로 발급받고, DSM의 작업 스케줄러를 이용해서 3개월 단위로 해주어야 하는 인증서 갱신 작업도 자동화할 수 있다.

준비

아래 과정은 DSM 7.x 버전을 기준으로 한다.
1.
DSM에서 SSH 서비스가 활성화되어 있어야 한다. 경로: DSM 제어판 → 터미널 및 SNMP → SSH 서비스 활성화
2.
Terminal이나 PuTTY로 NAS에 SSH 접속한다.
ssh [관리자 ID]@[나스 IP주소]
Bash
복사

Wildcard SSL 인증서 발급

아래 [나의 도메인], [기본 인증서 경로] 부분은 수정하고 Command 입력해야 한다.

0. root 권한으로 전환

sudo -i
Bash
복사

1. acme.sh 스크립트 다운로드

wget https://raw.githubusercontent.com/acmesh-official/acme.sh/master/acme.sh
Bash
복사

2. 권한 설정

chmod a+x acme.sh
Bash
복사

3. CA 변경

mkdir /root/.acme.sh
Bash
복사
sh acme.sh --set-default-ca --server letsencrypt
Bash
복사

4. Domain TXT값 받아오기

sh acme.sh --issue --dns --force -d [나의 도메인] -d *.[나의 도메인] --yes-I-know-dns-manual-mode-enough-go-ahead-please
Bash
복사
# result [Fri Aug 11 07:59:21 KST 2023] Using CA: https://acme-v02.api.letsencrypt.org/directory [Fri Aug 11 07:59:21 KST 2023] Multi domain='DNS:[나의 도메인],DNS:*.[나의 도메인]' [Fri Aug 11 07:59:21 KST 2023] Getting domain auth token for each domain [Fri Aug 11 07:59:21 KST 2023] Getting webroot for domain='[나의 도메인]' [Fri Aug 11 07:59:21 KST 2023] Getting webroot for domain='*.[나의 도메인]' [Fri Aug 11 07:59:21 KST 2023] Add the following TXT record: [Fri Aug 11 07:59:21 KST 2023] Domain: '_acme-challenge.[나의 도메인]' [Fri Aug 11 07:59:21 KST 2023] TXT value: '-' [Fri Aug 11 07:59:21 KST 2023] Please be aware that you prepend _acme-challenge. before your domain [Fri Aug 11 07:59:21 KST 2023] so the resulting subdomain will be: _acme-challenge.[나의 도메인] [Fri Aug 11 07:59:21 KST 2023] Add the following TXT record: [Fri Aug 11 07:59:21 KST 2023] Domain: '_acme-challenge.[나의 도메인]' [Fri Aug 11 07:59:21 KST 2023] TXT value: '-' [Fri Aug 11 07:59:21 KST 2023] Please be aware that you prepend _acme-challenge. before your domain [Fri Aug 11 07:59:21 KST 2023] so the resulting subdomain will be: _acme-challenge.[나의 도메인] [Fri Aug 11 07:59:21 KST 2023] Please add the TXT records to the domains, and re-run with --renew. [Fri Aug 11 07:59:21 KST 2023] Please add '--debug' or '--log' to check more details. [Fri Aug 11 07:59:21 KST 2023] See: https://github.com/acmesh-official/acme.sh/wiki/How-to-debug-acme.sh
Bash
복사
받아온 TXT value를 도메인 DNS의 TXT 레코드에 추가해준다.

5. Domain TXT값 변경 여부 확인

nslookup > set type=txt > _acme-challenge.[나의 도메인] exit
Bash
복사

6. 변경이 확인되면 인증서 발급

sh acme.sh --renew --dns --force -d [나의 도메인] -d *.[나의 도메인] --yes-I-know-dns-manual-mode-enough-go-ahead-please
Bash
복사
# result [Fri Aug 11 07:59:21 PM KST 2023] The domain '[나의 도메인]' seems to have a ECC cert already, lets use ecc cert. [Fri Aug 11 07:59:21 PM KST 2023] Renew: '[나의 도메인]' [Fri Aug 11 07:59:21 PM KST 2023] Renew to Le_API=https://acme-v02.api.letsencrypt.org/directory [Fri Aug 11 07:59:22 PM KST 2023] Using CA: https://acme-v02.api.letsencrypt.org/directory [Fri Aug 11 07:59:23 PM KST 2023] Multi domain='DNS:[나의 도메인],DNS:*.[나의 도메인]' [Fri Aug 11 07:59:23 PM KST 2023] Getting domain auth token for each domain [Fri Aug 11 07:59:26 PM KST 2023] Getting webroot for domain='[나의 도메인]' [Fri Aug 11 07:59:26 PM KST 2023] Getting webroot for domain='*.[나의 도메인]' [Fri Aug 11 07:59:26 PM KST 2023] [나의 도메인] is already verified, skip dns-01. [Fri Aug 11 07:59:26 PM KST 2023] *.[나의 도메인] is already verified, skip dns-01. [Fri Aug 11 07:59:26 PM KST 2023] Verify finished, start to sign. [Fri Aug 11 07:59:26 PM KST 2023] Lets finalize the order. [Fri Aug 11 07:59:26 PM KST 2023] Le_OrderFinalize='https://acme-v02.api.letsencrypt.org/acme/finalize/-/-' [Fri Aug 11 07:59:28 PM KST 2023] Downloading cert. [Fri Aug 11 07:59:28 PM KST 2023] Le_LinkCert='https://acme-v02.api.letsencrypt.org/acme/cert/-' [Fri Aug 11 07:59:29 PM KST 2023] Cert success. -----BEGIN CERTIFICATE----- ... -----END CERTIFICATE----- [Fri Aug 11 07:59:29 PM KST 2023] Your cert is in: /root/.acme.sh/[나의 도메인]_ecc/[나의 도메인].cer [Fri Aug 11 07:59:29 PM KST 2023] Your cert key is in: /root/.acme.sh/[나의 도메인]_ecc/[나의 도메인].key [Fri Aug 11 07:59:29 PM KST 2023] The intermediate CA cert is in: /root/.acme.sh/[나의 도메인]_ecc/ca.cer [Fri Aug 11 07:59:29 PM KST 2023] And the full chain certs is there: /root/.acme.sh/[나의 도메인]_ecc/fullchain.cer
Bash
복사

7. 기본 인증서 경로 확인

cat /usr/syno/etc/certificate/_archive/DEFAULT
Bash
복사
# result 28Qwe3
Bash
복사
확인된 기본 인증서 경로를 아래 Command의 [기본 인증서 경로] 부분에 입력한다.

8. 인증서 등록

cp /root/.acme.sh/[나의 도메인]_ecc/[나의 도메인].cer /usr/syno/etc/certificate/_archive/[기본 인증서 경로]/cert.pem cp /root/.acme.sh/[나의 도메인]_ecc/ca.cer /usr/syno/etc/certificate/_archive/[기본 인증서 경로]/chain.pem cp /root/.acme.sh/[나의 도메인]_ecc/fullchain.cer /usr/syno/etc/certificate/_archive/[기본 인증서 경로]/fullchain.pem cp /root/.acme.sh/[나의 도메인]_ecc/[나의 도메인].key /usr/syno/etc/certificate/_archive/[기본 인증서 경로]/privkey.pem
Bash
복사

9. 기본 인증서로 등록

cp /root/.acme.sh/[나의 도메인]_ecc/[나의 도메인].cer /usr/syno/etc/certificate/system/default/cert.pem cp /root/.acme.sh/[나의 도메인]_ecc/ca.cer /usr/syno/etc/certificate/system/default/chain.pem cp /root/.acme.sh/[나의 도메인]_ecc/fullchain.cer /usr/syno/etc/certificate/system/default/fullchain.pem cp /root/.acme.sh/[나의 도메인]_ecc/[나의 도메인].key /usr/syno/etc/certificate/system/default/privkey.pem
Bash
복사

10. 웹서버 서비스 재시작

synosystemctl restart nginx
Bash
복사

Disclaimer

본 사이트의 글은 개인적인 의견과 경험을 바탕으로 작성되었으며, 일반적인 참고용으로만 사용해야 합니다. 여기서 제공하는 정보를 바탕으로 한 결정이나 행동은 신중하게 고려해 주세요. 외부 사이트의 내용에 대해서는 책임지지 않으며, 외부 사이트의 정책과 조건에 따릅니다. 모든 콘텐츠는 저작권법에 의해 보호되며, 무단 복제나 도용을 금지합니다. 사용 시 사전 동의를 구해 주세요. 감사합니다.
2024 Hyeonho. All Rights Reserved.