시놀로지 NAS, Let's Encrypt 와일드카드(WildCard) SSL 인증서 적용기-3
Archive/설치-세팅

시놀로지 NAS, Let's Encrypt 와일드카드(WildCard) SSL 인증서 적용기-3

시놀로지 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 인증서

반응형