시놀로지 NAS Let's Encrypt WildCard SSL 적용

2020-06-01 기준 Manual DNS 방법 으로는 renew 가 정상적으로 적용 되지 않습니다.
따라서, 본 글은 Cloudflare DNS 방법으로 서술 하였으며, 반드시 CloudFlare DNS 로 설정이 되어 있어야 합니다.
이 글에서는 CloudFlare DNS 설정 방법은 포함되지 않았으며, 아래 링크에서 확인 가능 합니다.
개인 도메인 클라우드 플레어로 네임서버 변경 : https://blog.mong.io/3
원문 : https://github.com/Neilpang/acme.sh/wiki/Synology-NAS-Guide
출처 : https://blog.naver.com/clove7802/221703655436

 

Summary
1. acme.sh 설치
2. acme.sh 로 인증서 발급 및 등록
3. 인증서 자동 갱신 스케줄러 등록

 


 

acme.sh 설치
  • 루트 권한으로 로그인 합니다.
sudo -i

 

  • 홈 디렉토리로 이동 합니다.
cd ~

 

  • acme.sh 파일을 wget 을 통해 다운로드 받습니다.
wget https://github.com/Neilpang/acme.sh/archive/master.tar.gz

 

  • 다운받은 tar 압축 해제 합니다.
tar xvf master.tar.gz

 

  • 압축이 풀린 acme.sh-master 디렉토리로 이동 합니다.
cd acme.sh-master

 

  • acme.sh 를 설치 합니다.
  • * 이메일로 표시 된 부분은 본인의 이메일을 입력
./acme.sh --install --nocron --home /usr/local/share/acme.sh --accountemail "이메일"

빨간 글씨로 나오는 경고문은 무시해도 됩니다.마지막에 OK 문구만 확인 하시면 설치는 완료되었습니다.

 

 

acme.sh 로 인증서 발급 및 등록

Global API Key 를 확인하여 메모장에 복사

 

  • acme.sh 이 설치 된 디렉토리로 이동합니다.
cd /usr/local/share/acme.sh

 

  • 해당 경로에서 환경변수를 등록 합니다.
export CF_Key="글로벌 API 키" 
export CF_Email="이메일" 
export CERT_DNS="dns_cf"

 

  • 아래 명령어를 통하여 인증서를 등록 및 교체 합니다.
  • * 도메인으로 표시 된 부분은 본인의 도메인을 입력 (ex: *.mong.io, mong.io)
  • * WebRoot 인증 이기 때문에 반드시 외부에서 해당 도메인으로 80 port 접근이 가능 해야 합니다.
./acme.sh --issue -d *.도메인 -d 도메인 --dns $CERT_DNS --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" --dnssleep 30 --force

수고하셨습니다. 정상적으로 인증서가 발급 되었습니다.

 

  • 만일, 위의 과정대로 진행 하여도 기본 인증서가 새로 발급 한 인증서로 교체 되지 않았다면
  • 아래 과정을 따라해주시면 되고, 정상적으로 인증서가 교체 되었다면 아래 과정은 패스 하셔도 됩니다.
export CERT_FOLDER="$(find /usr/syno/etc/certificate/_archive/ -maxdepth 1 -mindepth 1 -type d)"
export CERT_DNS="dns_cf"
./acme.sh --issue -d *.도메인 -d 도메인 --dns "$CERT_DNS" --cert-file "$CERT_FOLDER/cert.pem" --key-file "$CERT_FOLDER/privkey.pem" --fullchain-file "$CERT_FOLDER/fullchain.pem" --capath "$CERT_FOLDER/chain.pem" --reloadcmd "/usr/syno/sbin/synoservicectl --reload nginx" --dnssleep 30 --force

 

 

인증서 자동 갱신 스케줄러 등록
  • [제어판 > 작업 스케줄러 > 생성 > 예약된 작업 > 사용자 정의 스크립트] 순으로 들어 갑니다.

 

  • 일반 탭에서는 작업이름은 영어로 원하는대로 작성 해주시면 됩니다.
  • 스케줄 탭에서는 현재 날짜 +1개월 부터 하여 매월 반복 해주시면 됩니다.

 

  • 작업 설정에서는 아래의 스크립트를 작성해주시면 됩니다.
# Note: The $CERT_FOLDER must be hardcoded here since the running environment is unknown. Don't blindly copy&paste!
# if you used the normal method the certificate will be installed in the system/default directory CERTDIR="system/default"
# if you used the alternative method it is copied to an unknown path, change the following example to the output of the creation process and uncomment.
#CERTDIR="_archive/AsDFgH"

# do not change anything beyond this line!
CERTROOTDIR="/usr/syno/etc/certificate"
PACKAGECERTROOTDIR="/usr/local/etc/certificate"
FULLCERTDIR="$CERTROOTDIR/$CERTDIR"

# renew certificates, this used to be explained as a custom cronjob but works just as well within this script according to the output of the task.
/usr/local/share/acme.sh/acme.sh --cron --home /usr/local/share/acme.sh/

# find all subdirectories containing cert.pem files
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

# reload
/usr/syno/sbin/synoservicectl --reload nginx

# update and restart all installed packages
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


'NAS' 카테고리의 다른 글

시놀로지 NAS Let's Encrypt WildCard SSL 적용  (0) 2020.06.03

댓글(0)

Designed by JB FACTORY