-
시놀로지 NAS, Let's Encrypt 와일드카드(WildCard) SSL 인증서 적용기-3Archive/설치-세팅 2021. 5. 6. 13:57
시놀로지 DS218+, DSM 6.2, DNSZi, ACME-DNS, ACME.SH case 입니다.
기존 포스팅[2020.12.14 - [Dev./설치&세팅] - 시놀로지 NAS, Let's Encrypt WildCard SSL 적용기-2]에서는 DuckDNS를 이용한 와일드카드 인증서 발급 및 자동 갱신을 설정하였으나, 발급대상을 *.eunpoong.com으로 했기 때문에 서브도메인 이슈는 없으나 root 도메인에 대한 인증서 validation 이슈가 있어서 dns challenge를 변경함
1. ACME.SH 설치
2. acme-dns에 register하여 고유키, 계정, 비번을 획득
3. CNAME 등록
4. 스케쥴러로 issue / renew 시 시놀로지 NAS에 변경된 인증서 적용
1. ACME.SH 설치 on Synology NAS
# NAS 사용자 계정으로 SSH 접속 후 # 관리자 계정 접속 $ sudo -i # ACME.SH 다운로드 $ git clone https://github.com/acmesh-official/acme.sh.git # 경로 이동 및 ACME.SH 설치 $ cd acme.sh $ ./acme.sh --install --nocron --home /usr/local/share/acme.sh --accountemail "이메일주소" # 설치 후 다운로드 파일 제거 $ cd .. $ rm -rf acme.sh
2. ACME-DNS register
$ curl -X POST https://auth.acme-dns.io/register { "username":"c36f50e8-4632-44f0-83fe-e070fef28a10", "password":"htB9mR9DYgcu9bX_afHF62erXaH2TS7bg9KW3F7Z", "fulldomain":"8e5700ea-a4bf-41c7-8a77-e990661dcc6a.auth.acme-dns.io", "subdomain":"8e5700ea-a4bf-41c7-8a77-e990661dcc6a", "allowfrom":[] }
3. 이용중인 DNS 서비스에서 CNAME 등록
_acme-challenge.eunpoong.com -> 8e5700ea-a4bf-41c7-8a77-e990661dcc6a.auth.acme-dns.io
3. 인증서 발급 command
export ACMEDNS_UPDATE_URL="https://auth.acme-dns.io/update" export ACMEDNS_USERNAME="c36f50e8-4632-44f0-83fe-e070fef28a10" export ACMEDNS_PASSWORD="htB9mR9DYgcu9bX_afHF62erXaH2TS7bg9KW3F7Z" export ACMEDNS_SUBDOMAIN="8e5700ea-a4bf-41c7-8a77-e990661dcc6a" /usr/local/share/acme.sh/acme.sh --issue --force \ --dns dns_acmedns \ -d eunpoong.com -d *.eunpoong.com \ --cert-file /usr/syno/etc/certificate/system/default/cert.pem \ --key-file /usr/syno/etc/certificate/system/default/privkey.pem \ --ca-file /usr/syno/etc/certificate/system/default/chain.pem \ --fullchain-file /usr/syno/etc/certificate/system/default/fullchain.pem \ --reloadcmd "/usr/syno/sbin/synoservicectl --reload nginx"
4. 인증서 적용 command
CERTROOTDIR="/usr/syno/etc/certificate" CERTDIR="system/default" PACKAGECERTROOTDIR="/usr/local/etc/certificate" FULLCERTDIR="$CERTROOTDIR/$CERTDIR" DEFAULT=$(cat $CERTROOTDIR/_archive/DEFAULT) PEMFILES=$(find $CERTROOTDIR -name cert.pem) if [ ! -z "$PEMFILES" ]; then for DIR in $PEMFILES; do # replace the certificates, but never the ones in the _archive folders as those are all the unique # certificates on the system. #if [[ $DIR != *"/_archive/"* ]]; then # rsync -avh "$FULLCERTDIR/" "$(dirname $DIR)/" #fi if [[ $DIR == *"/_archive/"* ]] && [[ $DIR != *"/_archive/$DEFAULT/"* ]]; then continue fi rsync -avh "$FULLCERTDIR/" "$(dirname $DIR)/" done fi /usr/syno/sbin/synoservicectl --reload nginx PEMFILES=$(find $PACKAGECERTROOTDIR -name cert.pem) if [ ! -z "$PEMFILES" ]; then for DIR in $PEMFILES; do #active directory has it's own certificate so we do not update that package if [[ $DIR != *"/ActiveDirectoryServer/"* ]]; then rsync -avh "$FULLCERTDIR/" "$(dirname $DIR)/" /usr/syno/bin/synopkg restart $(echo $DIR | awk -F/ '{print $6}') fi done fi
5. 인증서 갱신 command
export ACMEDNS_UPDATE_URL="https://auth.acme-dns.io/update" export ACMEDNS_USERNAME="c36f50e8-4632-44f0-83fe-e070fef28a10" export ACMEDNS_PASSWORD="htB9mR9DYgcu9bX_afHF62erXaH2TS7bg9KW3F7Z" export ACMEDNS_SUBDOMAIN="8e5700ea-a4bf-41c7-8a77-e990661dcc6a" /usr/local/share/acme.sh/acme.sh --renew --force --dns dns_acmedns \ --dns dns_acmedns \ -d eunpoong.com -d *.eunpoong.com \ --cert-file /usr/syno/etc/certificate/system/default/cert.pem \ --key-file /usr/syno/etc/certificate/system/default/privkey.pem \ --ca-file /usr/syno/etc/certificate/system/default/chain.pem \ --fullchain-file /usr/syno/etc/certificate/system/default/fullchain.pem \ --reloadcmd "/usr/syno/sbin/synoservicectl --reload nginx"
6. NAS 제어판 > 작업 스케줄러에서 root 계정으로 실행하도록 스케줄러 생성
작성일 기준 발급된 SSL 인증서 반응형'Archive > 설치-세팅' 카테고리의 다른 글
시놀로지 NAS, Let's Encrypt 와일드카드(WildCard) SSL 인증서 적용기-3 (9) 2021.05.06 시놀로지 NAS, Let's Encrypt WildCard SSL 적용기-2 (0) 2020.12.14 Ubuntu Git Lastest Version 설치 (0) 2020.11.09 NVM으로 Node.js 설치하기 (0) 2020.11.09 Let's Encrypt Wildcard SSL 인증서 + acme.sh + duckdns 생성 (0) 2020.05.11 WSL Ubuntu Sudo 권한 허용 및 서비스 자동 시작 (0) 2020.04.08
안녕하세요, 자세한 적용 글 감사합니다.
다만 조금 문제가 생겨 질문드립니다.
저는 도메인을 두개 사용중이라 위 커맨드를 쓰면 안될것 같아서,
발급받은 인증서를 /usr/syno/etc/certicifate/_archive 와 system 폴더 안에 붙여넣도록 해놨는데,
시놀로지 제어판 안에서는 제대로 갱신된 걸로 보이는데, 실제로 사이트에 접속하여 인증서 정보를 살펴보면 갱신되지 않고 예전 날짜로 나오네요. 혹시 제가 어디 잘못한게 있을까요?
안녕하세요... 시놀로지 NAS를 운영하기 시작한 초보입니다 ㅠㅠ
제가 duckdns를 쓰고있어 2탄 올리신 글 보고 적용했는데
Verify error:DNS problem: NXDOMAIN looking up TXT for _acme-challenge.xxx.com - check that a DNS record exists for this domain
에러가 떠서요 3탄을 보고 따라하려고 합니다.
3탄을 보고 궁금해졌는데요, 3탄 방식대로 하면 ddns는 어떻게 되는건가요?
3탄 방식으로 진행하실 경우,
cname : _acme-challenge.xxx.com 을
"3. 이용중인 DNS 서비스에서 CNAME 등록"에 있는 것처럼 acme-dns.io에서 register해서 발급받은 fulldomain으로 연결하시면 됩니다
빠르고 친절한 답변 감사드립니다 선생님. 이해가 부족해서 더 여쭤보겠습니다. 그렇다면 acme-dns.io에서 발급받은 fulldomain이 DDNS 기능을 하는건가요?! 아니면 DNSZi에서 제공하는 DDNS기능을 활용하라는 말씀이신가요?
DNS 챌린지는 도메인의 TXT 레코드에 특정 값을 넣어 DNS를 증명하는 방식입니다
이때 '검증'하는 dns 레코드가 _acme-challenge.도메인네임(ex. _acme-challenge.xxx.com, 이하 "_acme~")입니다. 이 "_acme~" txt 레코드에 특정 값을 넣고, 그 값을 체크하여 확인된다면 올바른 도메인 관리자(?)니깐 인증서를 발급해준다 라고 러프하게 생각할 수 있습니다
acme.sh 에서 dns 챌린지 방식으로 진행하면 "_acme~"에서 txt 값을 세팅하고 체크를 하는데 DNSZi dns를 사용한다면, 사이트에 들어가서 수동으로 설정할 순 있지만 api 방식으로 세팅할 수 없습니다.
그래서 "_acme~"를 cname으로 txt값을 설정할수 있는 다른 dns(acme-dns, duckdns 등)에 '연결'해서, dns 챌린지로 txt 값을 설정 또는 체크 할때 "_acme~"에 연결된 ~~~.acme-dns.io 에 저장되는 txt값을 확인하도록 해야합니다.
그러니깐 DNSZi를 dns서버로 사용하신다면, dnszi 사이트의 cname에
"_acme~" 를 ~~~.acme-dns.io 로 연결하셔야겠죠
친절한 답변 다시 감사합니다 선생님. 근데 3탄을 진행중에 Unknown parameter : --sa-file 모르는 파라미터라고 뜨는데 어떻게 해야하나요ㅠㅠ?
아..... 오타였습니다 ㅠㅠ
sa 가 아닌 ca 가 맞습니다
리포팅 감사합니다
인증서 발급 command 단계에서 막히네요... 모두 제대로 입력했는데도 불구하고, txt records 두 개를 주면서
Checking [저의DNSZi도메인].com for -acme_challenge.[저의DNSZi도메인].com
Not valid yet, let's wait 10 seconds and check next one.
Let's wait 10 seconds and check again
이 무한으로 뜹니다 ㅠㅠ 도와주세요 ㅠㅠ
도메인과 연결된 네임서버, cname 설정, cname돠 acme-dns의 fulldomain 연결, acme-dns에 txt가 잘 설정됐는지 등 nslookup 등으로 단계별로 체크해보세요