ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 시놀로지 NAS, Let's Encrypt 와일드카드(WildCard) SSL 인증서 적용기-3
    Archive/설치-세팅 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 \
    	--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"
    
    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
        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 \
    	--fullchain-file /usr/syno/etc/certificate/system/default/fullchain.pem \
    	--reloadcmd "/usr/syno/sbin/synoservicectl --reload nginx"

     

    6. NAS 제어판 > 작업 스케줄러에서 root 계정으로 실행하도록 스케줄러 생성

     

     

     

    작성일 기준 발급된 SSL 인증서

    반응형

    댓글 1

    • KimPig 2021.05.28 10:24

      안녕하세요, 자세한 적용 글 감사합니다.
      다만 조금 문제가 생겨 질문드립니다.

      저는 도메인을 두개 사용중이라 위 커맨드를 쓰면 안될것 같아서,
      발급받은 인증서를 /usr/syno/etc/certicifate/_archive 와 system 폴더 안에 붙여넣도록 해놨는데,
      시놀로지 제어판 안에서는 제대로 갱신된 걸로 보이는데, 실제로 사이트에 접속하여 인증서 정보를 살펴보면 갱신되지 않고 예전 날짜로 나오네요. 혹시 제가 어디 잘못한게 있을까요?



Designed by Tistory.