시놀로지 나스 Let’s Encrypt SSL 와일드카드 인증서 발급/자동재발급 하기

원문 Github https://github.com/acmesh-official/acme.sh/wiki/Synology-NAS-Guide

시놀로지 나스의 SSH기능을 활성화 해야합니다.
SSH는 보안 위험이 많으므로 작업이 끝난후 반드시 비활성화 해야합니다.
SSH활성화에대한 내용은 다루지 않겠습니다.

우선 ssh 터미널에 접속하여 루트 권한을 획득합니다.

$ sudo su

그리고 다음 명령어를 입력하여 acme.sh 의 마스터파일을 다운받습니다.

wget https://github.com/Neilpang/acme.sh/archive/master.tar.gz
Code language: JavaScript (javascript)

다운받은 파일의 압축을 풀어줍니다.

tar xvf master.tar.gz
Code language: CSS (css)

압축푼 폴더에서 다음명령어로 acme.sh를 설치합니다.

./acme.sh --install --nocron --home /usr/local/share/acme.sh --accountemail "cloudflare이메일"
Code language: JavaScript (javascript)

설치할때 빨간색으로 나오는 경고문은 무시하셔도 됩니다. 마지막에 OK문구가 나오면 설치는 완료되겁니다.

다음 작업에 자신의 클라우드플레어 글로벌키가 필요합니다.
https://dash.cloudflare.com/profile/api-tokens 에서 확인 가능합니다.

스크립트가 설치된 폴더로 이동합니다.

cd /usr/local/share/acme.sh

터미널에 환경변수를 입력해주시면 됩니다.

export CF_Key="글로벌API키" export CF_Email="이메일" export CERT_DNS="dns_cf"
Code language: JavaScript (javascript)

그후에 인증서를 생성하는 명령어를 입력합니다.

./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 20 --force
Code language: JavaScript (javascript)

정상적으로 실행되면 별다른 오류없이 인증서가 발급됩니다.
오류가 있으면 코드를 다시한번 확인해보고 재시도 해보시기 바랍니다.

이제 시놀로지 기본 인증서가 새로 발급한 인증서로 교체되었습니다.


다음과정은 위의 과정은 제대로 했지만 기본 인증서로 교체되지 않았을때 따라해주시면 됩니다.
만약 인증서가 제대로 교체되었으면 이번 과정은 넘어가셔도 됩니다.

터미널에 아래와같이 순서대로 입력합니다.

export CERT_FOLDER="$(find /usr/syno/etc/certificate/_archive/ -maxdepth 1 -mindepth 1 -type d)" export CERT_DNS="dns_cf"
Code language: JavaScript (javascript)
./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 20 --force
Code language: JavaScript (javascript)

마찬가지로 오류없이 정상적으로 출력되면 끝입니다.

이번 과정을 수행했음에도 인증서가 교체되지 않았으면 브라우저 캐시를 초기화 후 dsm에 재접속 해보시고 그래도 안되면 처음부터 차근차근 다시 따라해보시기 바랍니다.

이제 인증서 발급 과정은 모두 끝났습니다.


이제 인증서가 매달 자동으로 갱신되게 스케줄러를 등록해보도록 하겠습니다.

작업스케줄러에서 생성 -> 예약된작업 -> 사용자 정의 스크립트로 들어갑니다.

일반에는 작업이름을 적어주면 됩니다. 영어로 원하는 이름 아무거나 작성.

다음과 같이 매달 실행되게 스케줄을 설정합니다.

원하는 날짜로 스케줄을 바꿔도 상관없으나 인증서가 제때 갱신이 되도록 해주시기 바랍니다.

아래 코드를 스크립트란에 복사해주시면 됩니다.

CERTDIR="system/default" #CERTDIR="_archive/AsDFgH" CERTROOTDIR="/usr/syno/etc/certificate" PACKAGECERTROOTDIR="/usr/local/etc/certificate" FULLCERTDIR="$CERTROOTDIR/$CERTDIR" /usr/local/share/acme.sh/acme.sh --cron --home /usr/local/share/acme.sh/ 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
Code language: PHP (php)

스케줄러 등록 후 활성화에 체크가 되어있는지 확인바라며 활성화가 되어있어야 갱신기능이 작동합니다.

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

14 − 5 =