본문 바로가기

취미, 관심/NAS, Server

[Synology] 시놀로지에 Let's Encrypt 와일드카드 인증서 적용[21.8.2 수정]

개인적으로는 최근에 올린 클라우드플레어를 이용한 와일드카드 인증서 사용이 훨씬 편한 것 같습니다.

클플에서도 DDNS 사용이 가능한 만큼, 아래 게시글도 확인해보시고, 더 편리한 방법으로 사용해보세요.

2021.10.01 - [Synology] 시놀로지에서 클라우드플레어 DDNS 설정하고 와일드카드 인증서 받기 #2


NoriDev 님 블로그 게시글 참고. 나중에 초기화할때 쉽게 참고하려고 적어둡니다.

blog.naver.com/jcjee2004/221831609605

 

[Synology] 시놀로지에 Let's Encrypt 와일드카드 인증서 적용하기

시놀로지의 제어판에서 발급 받을 수 있는 Let's Encrypt 인증서는 90일 짜리 SSL 인증서 입니다...

blog.naver.com

추가 참고 문서 : acme.sh github

https://github.com/acmesh-official/acme.sh/wiki/ZeroSSL.com-CA


2021.7.13 현재 다른 NAS 세팅을 하며 와일드카드 인증서 발급을 위해 아래 코드를 그대로 사용하였으나, 오류가 발생함을 확인했습니다.

버전이 올라가면서 zerossl을 기본값으로 사용하게 되면서 생긴 이슈로 보이며, 이메일 계정 등록을 한 후 발행을 하면 되는 것 같습니다.

 

2021.8.2 실행이 안된다는 분이 있어 다시 확인 후 내용 추가합니다.

※ 사용자 홈 서비스가 활성화 되어있어야만 합니다.
(제어판 -> 사용자 및 그룹 -> 고급 -> 사용자 홈 서비스 활성화 체크)

※ zerossl 이 기본값이 되며 인증서 발행에 오류가 있는 것 같습니다. 제 지식에선 해결이 불가능해서 이전 방식인 letsencrypt로 사용을 했습니다.


 

SSH -> acme.sh 스크립트 설치

$ wget https://raw.githubusercontent.com/acmesh-official/acme.sh/master/acme.sh

실행권한 부여

$ sudo chmod a+x acme.sh

[21.7.13 추가]

계정 등록

/var/services/homes/사용자 이름/acme.sh --register-account -m [이메일 주소] --server zerossl

zeroSSL에 계정을 등록하는 과정으로 보입니다 '-'.

ACCOUNT_THUMBPRINT 가 나오는데, 쓸일이 있을지는 모르겠습니다만, 혹시모르니 보관하시는게 좋을 것 같아요.


기본 CA를 letsencrypt로 변경

$ /var/services/homes/사용자 이름/acme.sh --set-default-ca  --server letsencrypt

※ 제가 할 때는 변경을 했음에도 불구하고 이후에 계속 정상적으로 발급이 되지 않았습니다. 그래서 아래 발급, 갱신 명령에 모두 --server letsencrypt가 들어갑니다.

 

인증서 발급

$ /var/services/homes/사용자 이름/acme.sh --issue --dns --force -d 내 도메인 -d *.내 도메인 --yes-I-know-dns-manual-mode-enough-go-ahead-please --server letsencrypt

※ 마지막에 --server letsencrypt 내용이 추가되었습니다. 2021년 8월 1일자로 업데이트되며 zerossl을 기본 CA로 사용하며 인증 오류가 생기는 듯 합니다.

 

위 실행된 내용 중

Domain: '_acme-challenge.내 도메인'

TXT value: "키 값"

확인하여 TXT레코드 추가

TXT 레코드에 _acme-challenge : [TXT value] 추가, 여러개인경우 여러개 추가

 

nslookup으로 TXT레코드 등록이 되어있는지 확인

nslookup
> set type=txt
> _acme-challenge.내 도메인

SSH가 아니라 작업중인 PC에서도 확인 가능

 

DNS 서버에 적용이 된 것을 확인 후 인증서 갱신 명령어를 통해 인증서 발급을 한다.

DNS 서버 적용이 되지 않은상태에서 명령어 실행 시 TXT value가 변경됨

 

아래 페이지에서도 확인이 가능합니다.

확인 시 '이름' 부분에 '_acme-challenge.내 도메인' 으로 넣어야 조회가 됩니다.

https://toolbox.googleapps.com/apps/dig/?lang=ko#TXT/ 

 

Dig(DNS 조회)

 

toolbox.googleapps.com

 

※ txt레코드 등록은 시간이 꽤 걸릴수도 있습니다. 네임서버에서 업데이트한 이후에 전세계의 dns에서 갱신이 되어야 하기 때문이죠.

 

TXT레코드 등록확인 후 최종 갱신(발급)

$ /var/services/homes/사용자 이름/acme.sh --renew --dns --force -d 내 도메인 -d *.내 도메인 --yes-I-know-dns-manual-mode-enough-go-ahead-please --server letsencrypt

※위의 발급과 동일하게  --server letsencrypt 문구가 추가되었습니다.

 

인증서 갱신 시 /root/.acme.sh/내 도메인 에 저장이 되고 갱신됨을 반복한다고 하는데.. 스크립트로 갱신 시 해당 위치를 찾을 수 없다는 오류가 떴다. 해결방법은 아래에..

 

발급한 인증서를 DSM에 추가

 

home폴더 -> '.acme.sh'폴더 내 '내 도메인' 폴더 우클릭 -> 다운로드

 

내 도메인.key / 내 도메인.cer / ca.cer 파일 확인

 

제어판 -> 보안 -> 인증서 -> 추가

 

새 인증서 -> 인증서 가져오기

 

개인키 : 내 도메인.key

인증서 : 내 도메인.cer

중간 인증서 : ca.cer

 

확인 클릭

기존 인증서가 있었다면 구성을 눌러서 추가한 인증서로 변경

 

추가한 인증서 경로 확인

$ sudo -i
# cat /usr/syno/etc/certificate/_archive/DEFAULT
ABC

 

 

제어판에 추가한 인증서는 '/usr/syno/etc/cetificate/_archive' 에 랜덤한 이름으로 저장되고 이 인증서 중 기본 인증서가 '/usr/syno/etc/certificate/system/default' 에 복사됨

 

이 경로는 인증서 제거하기 전까지만 유효

 

작업 스케줄러 등록(자동갱신)

제어판 -> 작업 스케줄러 -> 생성 -> 예약된 작업 -> 사용자 정의 스크립트

 

작업 : 편한 이름 / 사용자 : root

 

날짜 : 작업 주기 설정. 매주 혹은 매월 정도로 설정하면 될듯

 

작업 설정 탭 -> 실행 명령에 아래 내용 추가

# 인증서 갱신
/var/services/homes/사용자 이름/acme.sh --renew --dns --force -d 내 도메인 -d *.내 도메인 --yes-I-know-dns-manual-mode-enough-go-ahead-please --server letsencrypt

# 갱신된 인증서를 시놀로지에 등록
/bin/cp /root/.acme.sh/내 도메인/내 도메인.cer /usr/syno/etc/certificate/_archive/폴더 이름/cert.pem
/bin/cp /root/.acme.sh/내 도메인/ca.cer /usr/syno/etc/certificate/_archive/폴더 이름/chain.pem
/bin/cp /root/.acme.sh/내 도메인/fullchain.cer /usr/syno/etc/certificate/_archive/폴더 이름/fullchain.pem
/bin/cp /root/.acme.sh/내 도메인/내 도메인.key /usr/syno/etc/certificate/_archive/폴더 이름/privkey.pem

# nginx 서비스 재시작
/usr/syno/sbin/synoservicectl --reload nginx

※ 갱신 명령에 --server letsencrypt 가 추가되었습니다.

 

#은 주석

폴더 이름은 추가한 인증서 경로 확인에서 나온 폴더명 입력

갱신이 제대로 되었는지 확인을 위해 알림 -> 실행 상세 정보 이메일로 보내기 설정해도 됨

 

추가

여기까지 하면 완료...인데, 갱신 시 No such file or directory 에러가 뜰 수 있다.

1. 'not a issued domain, skip' 메시지가 뜨는 경우 갱신 기간(잔여기간 30일 이내)가 되지 않아 스킵을 하며, root의 .acme.sh 폴더 내에 파일이 없으므로 파일을 찾을 수 없다는 문구가 뜨게 된다. 

2. 갱신 기간임에도 No such file or directory 문구가 뜨는 경우

/root/.acme.sh 를 /var/services/homes/계정명/.acme.sh 로 대체한다.

 

[2021. 08. 02] 클리앙의 어떤 분께서 이 내용으로 진행이 되지 않는다고 하여 VMM으로 직접 갱신을 해 보며 수정했습니다. 인증서 발급 및 적용이 문제없음을 확인했으나, 갱신이 된다고 장담하긴 어렵습니다.;; 제가 전문가가 아니다보니..;;

 

제대로 발행이 되었는지 확인을 하기 위해 사용자이름/.acme.sh/내 도메인 폴더 내에 파일이 정상적으로 있는지 확인을 해야 합니다. ca 파일이 없다면 사용할 수 없습니다.

 

클라우드플레어를 이용한 와일드카드 인증서 발행 방법이 훨씬 간단합니다. 저는 DNSzi의 DDNS 기능 때문에..;; 근 1년간 IP가 단 한번도 변경되진 않았지만요..

 

아무쪼록 다른 분들께 도움이 되길 바랍니다.