Synology SSL 인증서 자동 갱신 (2) - acme.sh
이전 포스팅에 이어 인증서 자동갱신을 위해 acme.sh를 이용한 시놀로지 개인도메인 와일드카드 SSL 인증서 자동 갱신방법을 설명 합니다.
1. SSH 접속
- Let's Encrypt 인증서 자동 갱신을 위해 SSH 접속이 필요합니다. (root 계정 접속)
- 방법을 모르신다면 아래의 글을 참고하여 주세요.
2024.03.04 - [Synology NAS/Settings] - [시놀로지] Synology NAS SSH 접속하기
[시놀로지] Synology NAS SSH 접속하기
Synology NAS SSH 접속하기 1. SSH 서비스 활성화 및 포트 설정 SSH 포트는 포트포워딩 기능을 사용하지 않는 것을 권장 (외부 접근 시 보안상 문제) 2. PuTTY 프로그램 설치 https://www.putty.org/ 접속하여 운
devitamin.tistory.com
2. acme.sh 설치
Acme.sh ?
Let's Encrypt 인증서를 발급 및 갱신, 관리하기 위한 오픈소스 쉘 스크립트
1) 설치 전 root 계정으로 접속 !!
user@NAS:~$ sudo -i
Password: 비밀번호입력
root@NAS:~#
2) acme.sh 설치 및 실행 권한 부여
- acme.sh를 전역적으로 사용하기 위해 /usr/local/bin 경로에 설치
- 설치 후 권한 부여 및 확인
# 디렉토리 이동 및 설치
root@NAS:~# cd /usr/local/bin
root@NAS:/usr/local/bin# wget https://raw.githubusercontent.com/acmesh-official/acme.sh/master/acme.sh
# 설치 확인
root@NAS:/usr/local/bin# ll acme.sh
# [실행결과]
-rw------- 1 root root 222908 Mar 24 22:13 acme.sh
# 실행 권한 부여 및 권한 확인
root@NAS:/usr/local/bin# sudo chmod a+x acme.sh
root@NAS:/usr/local/bin# ll acme.sh
# [실행결과]
-rwx--x--x 1 root root 222908 Mar 24 20:18 acme.sh
3. acme.sh 설정
- 인증서 발급 전 acme.sh를 사용하기 위해서 /root/.acme.sh 디렉토리를 생성해줘야 합니다.
- 디렉토리 생성 후 인증기관(CA)을 Let's Encrypt로 설정합니다.
- 인증기관 설정 후 acme.sh 를 업데이트 받습니다.
# /root/.acme.sh 디렉토리 생성
root@NAS:/usr/local/bin# mkdir /root/.acme.sh
# 인증기관 Let's Encrypt 설정
root@NAS:/usr/local/bin# acme.sh --set-default-ca --server letsencrypt
[Fri Jun 7 01:39:41 PM KST 2024] Changed default CA to: https://acme-v02.api.letsencrypt.org/directory
# acme.sh 업데이트
root@NAS:/usr/local/bin# acme.sh --upgrade
[Fri Jun 7 02:39:02 PM KST 2024] Installing from online archive.
[Fri Jun 7 02:39:02 PM KST 2024] Downloading https://github.com/acmesh-official/acme.sh/archive/master.tar.gz
[Fri Jun 7 02:39:03 PM KST 2024] Extracting master.tar.gz
[Fri Jun 7 02:39:03 PM KST 2024] It is recommended to install socat first.
[Fri Jun 7 02:39:03 PM KST 2024] We use socat for standalone server if you use standalone mode.
[Fri Jun 7 02:39:03 PM KST 2024] If you don't use standalone mode, just ignore this warning.
[Fri Jun 7 02:39:03 PM KST 2024] Installing to /root/.acme.sh
[Fri Jun 7 02:39:03 PM KST 2024] Installed to /root/.acme.sh/acme.sh
[Fri Jun 7 02:39:03 PM KST 2024] Good, bash is found, so change the shebang to use bash as preferred.
[Fri Jun 7 02:39:05 PM KST 2024] OK
[Fri Jun 7 02:39:05 PM KST 2024] Install success!
[Fri Jun 7 02:39:05 PM KST 2024] Upgrade success!
4. 와일드 카드 인증서 발급 및 다운로드
1) 와일드 카드 인증서 발급
- CloudFlare 변수로 로그인 이메일, 발급받은 토큰을 설정하고 명령어를 입력하면 자동으로 CloudFlare API를 통해 TXT 레코드를 업데이트하여 도메인 인증을 하고 인증서를 발급받습니다.
# acme.sh에서 사용하기위한 CloudFlare 계정 변수 설정
root@NAS:/usr/local/bin# export CF_Email="Your CloudFlare Email"
root@NAS:/usr/local/bin# export CF_Token="Your CloudFlare Token"
# 인증서 발급
root@NAS:/usr/local/bin# acme.sh --issue --force --dns dns_cf -d YOURDOMAIN.COM -d *.YOURDOMAIN.COM
[Fri Jun 7 02:46:32 PM KST 2024] Using CA: https://acme-v02.api.letsencrypt.org/directory
[Fri Jun 7 02:46:32 PM KST 2024] Create account key ok.
[Fri Jun 7 02:46:33 PM KST 2024] Registering account: https://acme-v02.api.letsencrypt.org/directory
[Fri Jun 7 02:46:34 PM KST 2024] Registered
[Fri Jun 7 02:46:34 PM KST 2024] ACCOUNT_THUMBPRINT='XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
[Fri Jun 7 02:46:34 PM KST 2024] Creating domain key
[Fri Jun 7 02:46:34 PM KST 2024] The domain key is here: /root/.acme.sh/YOURDOMAIN.COM_ecc/YOURDOMAIN.COM.key
[Fri Jun 7 02:46:34 PM KST 2024] Multi domain='DNS:YOURDOMAIN.COM,DNS:*.YOURDOMAIN.COM'
[Fri Jun 7 02:46:36 PM KST 2024] Getting webroot for domain='YOURDOMAIN.COM'
[Fri Jun 7 02:46:36 PM KST 2024] Getting webroot for domain='*.YOURDOMAIN.COM'
[Fri Jun 7 02:46:36 PM KST 2024] Adding txt value: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX for domain: _acme-challenge.YOURDOMAIN.COM
[Fri Jun 7 02:46:38 PM KST 2024] Adding record
[Fri Jun 7 02:46:38 PM KST 2024] Added, OK
[Fri Jun 7 02:46:38 PM KST 2024] The txt record is added: Success.
[Fri Jun 7 02:46:38 PM KST 2024] Adding txt value: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX for domain: _acme-challenge.YOURDOMAIN.COM
[Fri Jun 7 02:46:39 PM KST 2024] Adding record
[Fri Jun 7 02:46:40 PM KST 2024] Added, OK
[Fri Jun 7 02:46:40 PM KST 2024] The txt record is added: Success.
[Fri Jun 7 02:46:40 PM KST 2024] Let's check each DNS record now. Sleep 20 seconds first.
[Fri Jun 7 02:47:01 PM KST 2024] You can use '--dnssleep' to disable public dns checks.
[Fri Jun 7 02:47:01 PM KST 2024] See: https://github.com/acmesh-official/acme.sh/wiki/dnscheck
[Fri Jun 7 02:47:01 PM KST 2024] Checking YOURDOMAIN.COM for _acme-challenge.YOURDOMAIN.COM
[Fri Jun 7 02:47:01 PM KST 2024] Domain YOURDOMAIN.COM '_acme-challenge.YOURDOMAIN.COM' success.
[Fri Jun 7 02:47:01 PM KST 2024] Checking YOURDOMAIN.COM for _acme-challenge.YOURDOMAIN.COM
[Fri Jun 7 02:47:02 PM KST 2024] Domain YOURDOMAIN.COM '_acme-challenge.YOURDOMAIN.COM' success.
[Fri Jun 7 02:47:02 PM KST 2024] All success, let's return
[Fri Jun 7 02:47:02 PM KST 2024] Verifying: YOURDOMAIN.COM
[Fri Jun 7 02:47:02 PM KST 2024] Pending, The CA is processing your order, please just wait. (1/30)
[Fri Jun 7 02:47:06 PM KST 2024] Success
[Fri Jun 7 02:47:06 PM KST 2024] Verifying: *.YOURDOMAIN.COM
[Fri Jun 7 02:47:07 PM KST 2024] Pending, The CA is processing your order, please just wait. (1/30)
[Fri Jun 7 02:47:11 PM KST 2024] Success
[Fri Jun 7 02:47:11 PM KST 2024] Removing DNS records.
[Fri Jun 7 02:47:11 PM KST 2024] Removing txt: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX for domain: _acme-challenge.YOURDOMAIN.COM
[Fri Jun 7 02:47:12 PM KST 2024] Removed: Success
[Fri Jun 7 02:47:12 PM KST 2024] Removing txt: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX for domain: _acme-challenge.YOURDOMAIN.COM
[Fri Jun 7 02:47:14 PM KST 2024] Removed: Success
[Fri Jun 7 02:47:14 PM KST 2024] Verify finished, start to sign.
[Fri Jun 7 02:47:14 PM KST 2024] Lets finalize the order.
[Fri Jun 7 02:47:14 PM KST 2024] Le_OrderFinalize='https://acme-v02.api.letsencrypt.org/acme/finalize/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
[Fri Jun 7 02:47:15 PM KST 2024] Downloading cert.
[Fri Jun 7 02:47:15 PM KST 2024] Le_LinkCert='https://acme-v02.api.letsencrypt.org/acme/cert/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
[Fri Jun 7 02:47:15 PM KST 2024] Cert success.
-----BEGIN CERTIFICATE-----
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXX
-----END CERTIFICATE-----
[Fri Jun 7 02:47:15 PM KST 2024] Your cert is in: /root/.acme.sh/YOURDOMAIN.COM_ecc/YOURDOMAIN.COM.cer
[Fri Jun 7 02:47:15 PM KST 2024] Your cert key is in: /root/.acme.sh/YOURDOMAIN.COM_ecc/YOURDOMAIN.COM.key
[Fri Jun 7 02:47:15 PM KST 2024] The intermediate CA cert is in: /root/.acme.sh/YOURDOMAIN.COM_ecc/ca.cer
[Fri Jun 7 02:47:15 PM KST 2024] And the full chain certs is there: /root/.acme.sh/YOURDOMAIN.COM_ecc/fullchain.cer
- 위와 같이 출력되었다면 /root/.acme.sh/YOURDOMAIN.COM_ecc 라는 경로에 인증서가 발급되었습니다.
- 일단 최초 한번은 이 인증서를 일단 시놀로지에 추가해야합니다.
- 시놀로지에 추가하기 위해서 인증서를 다운받을 수 있도록 사용자 폴더로 복사합니다.
# 사용자 디렉토리로 이동 (USER_NAME 에 사용자 명)
root@NAS:/usr/local/bin# cd /var/services/homes/USER_NAME
# 발급된 인증서 디렉토리 복사
root@NAS:/var/services/homes/USER_NAME# cp -R /root/.acme.sh/ ./
2) 인증서 다운로드
- NAS에 접속하여 복사한 자신의 home 디렉토리 안에 USERDOMAIN.COM_ecc 폴더를 다운로드합니다.
5. 발급받은 인증서 시놀로지에 추가
1) 다운받은 인증서 압축 풀기
2) 시놀로지 제어판 > 보안 > 인증서 > 추가 > 새 인증서 추가 클릭
3) 인증서 가져오기 클릭
4) 인증서 파일 가져오기
- 개인키 : YOURDOMAIN.COM.key
- 인증서 : YOURDOMAIN.COM.cer
- 중간 인증서 : ca.cer
- 위에 적힌 파일을 참고하여 본인의 인증서를 불러오고 확인 버튼을 클릭하면 인증서가 추가됩니다.
6. 추가된 인증서 경로 찾기
- SSH로 돌아와서 아래 명령어를 실행합니다.
- DEFAULT, SERVICES, INFO를 제외하고 가장 최근 시간에 등록된 인증서가 방금 전 본인이 추가한 인증서 디렉토리입니다. 해당 경로를 복사해둡니다
# 시놀로지 인증서 저장 디렉토리로 이동
root@NAS:~# cd /usr/syno/etc/certificate/_archive
# 시놀로지에 등록된 인증서 확인
root@NAS:/usr/syno/etc/certificate/_archive# ls -lrt
# [결과확인]
total 36
-rw------- 1 root root 7 Mar 4 21:41 DEFAULT
drwx------ 2 root root 4096 Mar 21 23:37 AAAAAA
drwx------ 2 root root 4096 Jun 7 15:25 XXXXXX
-rwx------ 1 root root 3899 Mar 24 20:54 SERVICES
-rw------- 1 root root 5165 Mar 24 22:57 INFO
# 가장 최근에 추가된 디렉토리가 방금 전에 추가한 인증서임
# 디렉토리 이동 및 디렉토리 경로 복사
root@NAS:/usr/syno/etc/certificate/_archive# cd XXXXXX
root@NAS:/usr/syno/etc/certificate/_archive/XXXXXX# pwd
/usr/syno/etc/certificate/_archive/XXXXXX
7. 자동 인증서 갱신을 위한 스크립트 작성
- 자동 인증서 갱신을 위해 스크립트를 작성하여 원하는 위치에 저장합니다. (사용자 폴더에 저장)
- 아래 쉘 스크립트 작성시 YOURDOMAIN.COM, XXXXXX 부분은 본인의 것으로 변경
root@NAS:~# cd /var/services/homes/USERNAME
root@NAS:/var/services/homes/USERNAME# vi renew_cert.sh
#!/bin/bash
# acme.sh에서 사용하기위한 CloudFlare 계정 변수 설정
export CF_Email="Your CloudFlare Email"
export CF_Token="Your CloudFlare Token"
# 인증서 갱신 명령어
acme.sh --issue --force --dns dns_cf -d YOURDOMAIN.COM -d *.YOURDOMAIN.COM
# 갱신된 인증서 파일 시놀로지 인증서 디렉토리로 복사
cp /root/.acme.sh/YOURDOMAIN.COM_ecc/YOURDOMAIN.COM.cer /usr/syno/etc/certificate/_archive/XXXXXX/cert.pem
cp /root/.acme.sh/YOURDOMAIN.COM_ecc/ca.cer /usr/syno/etc/certificate/_archive/XXXXXX/chain.pem
cp /root/.acme.sh/YOURDOMAIN.COM_ecc/fullchain.cer /usr/syno/etc/certificate/_archive/XXXXXX/fullchain.pem
cp /root/.acme.sh/YOURDOMAIN.COM_ecc/YOURDOMAIN.COM.key /usr/syno/etc/certificate/_archive/XXXXXX/privkey.pem
# nginx 서비스 reload
synosystemctl reload nginx
- 해당 스크립트를 저장 후 실행하여 정상적으로 잘 동작하는지 확인합니다.
# 작성한 스크립트 실행권한 부여
root@NAS:/var/services/homes/USERNAME# chomod a+x renew_cert.sh
# 스크립트 실행
root@NAS:/var/services/homes/USERNAME# ./renew_cert.sh
8. 작업 스케줄러 등록 및 테스트
1) 위에서 작성한 스크립트를 1개월 주기로 실행하기 위해서 시놀로지 작업 스케줄러에 등록합니다.
- 제어판 > 작업 스케줄러 > 생성 > 예약된 작업 > 사용자 정의 스크립트
2) 작업 생성 팝업에서 작업 명과 사용자를 root를 선택하고 스케줄 탭을 선택합니다.
3) 스케줄 탭에서 다음 일수 후 실행을 누르고 월간, 마지막, 일요일을 선택하고 시간은 23:30 을 선택합니다.
- 사진을 참고하여 본인이 원하는 스케줄을 설정합니다.
4) 작업설정 탭에서 사용자 정의 스크립트 부분에 위에서 생성한 스크립트 실행 명령어를 입력합니다.
5) 스케줄러가 등록이 되었으면 테스트를 위해 수동으로 실행을 합니다.
- 정상적으로 스케줄러가 실행이 되었다면 SSL 인증서 자동갱신을 성공적으로 완료되었습니다.
'Synology NAS' 카테고리의 다른 글
[시놀로지] SSL 인증서 자동 갱신하기 (1) - DDNS(CloudFlare) (4) | 2024.05.26 |
---|---|
[시놀로지] http 요청 https로 리다이렉트 설정하기 (0) | 2024.03.24 |
[시놀로지] 역방향 프록시 설정하기 (포트번호 숨기기) (0) | 2024.03.04 |
[시놀로지] SSL 인증서 발급하기 - Let's Encrypt (0) | 2024.03.04 |
[시놀로지] Synology NAS SSH 접속하기 (0) | 2024.03.04 |