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.