이 글은 DSM 6.2환경에서 작성되었으며 클라우드플레어 ddns사용을 전제로 작성되었습니다. 원문을 확인하면 다른 ddns에서도 사용은 가능하지만 이 글에서는 서술하지 않겠습니다.

https://github.com/Neilpang/acme.sh/wiki/Synology-NAS-Guide

원문은 깃헙에서 확인 가능합니다.

우선 시놀로지 나스의 SSH 기능을 활성화 해 주어야 합니다.

SSH는 보안 위협이 상당하므로 작업이 끝난후 반드시 비활성화 하는것을 추천드립니다.

SSH 활성화방법과 접속방법은 서술하지 않겠습니다.

우선 터미널에 sudo -i 를 입력하면 비밀번호를 입력하라는 문구가 올라옵니다.

자신의 로그인 암호 입력후 루트권한을 획득하면 됩니다.

wget https://github.com/Neilpang/acme.sh/archive/master.tar.gz

위 명령어를 입력하여 acme.sh 마스터파일을 다운받습니다.

tar xvf master.tar.gz

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

cd acme.sh-master/

압축푼 마스터파일의 폴더로 들어가

./acme.sh --install --nocron --home /usr/local/share/acme.sh --accountemail "이메일"

위 명령어로 acme.sh를 설치합니다. 이메일란에는 자신의 이메일을 입력해 주세요.

설치할때 빨간글로 나오는 경고문은 지금 하는 작업과는 상관없으니 무시해도 됩니다.

마지막에 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"

를 순서대로 입력해주시면 됩니다.

다음 과정은 매개변수가 많이 나오지만 수정할 부분은 조금뿐이니 잘 읽어만 보시면 됩니다.

./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

터미널에 위와같이 입력해주시면 됩니다.

예를들어 자신의 도메인이 domain.com이라면 ‘*.domain.com’과 ‘domain.com’처럼 입력해주면 됩니다.

정상적으로 입력되었으면 별다른 오류없이 인증서가 발급됩니다.

오류가 있으면 코드를 다시한번 확인해보고 재시도 해보시기 바랍니다.

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

이번 과정은 위의 과정을 제대로 했지만 기본 인증서로 교체되지 않았을때 따라해주시면 됩니다.

만약 인증서가 제대로 교체되었으면 이번 과정은 넘어가셔도 됩니다.

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

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 20 --force

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

이번 과정을 수행했음에도 인증서가 교체되지 않았으면 브라우저 캐시를 초기화 후 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

위의 코드를 스크립트란에 복사해주시면 끝입니다.

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

이상 시놀로지 나스에 와일드카드 인증서 발급하기 강좌를 마칩니다.

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

  1. 감사합니다 이거대로 하니까 잘됩니다!
    한가지 이슈가 있다면,,,
    이 방법 대로 했을때 기존 및 추가 되는 것들은 다 인증서들이 발급받은걸로 잘 적용 되는데
    dsm의 경우에는 구성에서 교체한 인증서로 되어있음에도 불구 하고 웹으로 dsm 접근 시 기존 시놀로지기본인증서로 적용이되어있어 보안되지않는 인증서로 나옵니다… 해결방법이잇을가요
    주소는 https://dsm.mong.io로 접근해보시면
    인증서가 시놀로지기본으로 되어있습니다
    https://mail.mong.io 의 경우는
    인증서가 mong.io로 정상적으로 나옵니다…

댓글 남기기