ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Synology NAS에서 Let's Encrypt 방급 방법(docker이용)
    Synology NAS 2020. 8. 23. 16:39

    docker를 이용한 Let's encrypt 발급 방법입니다.

     

    Let's encrypt는 무료SSL인증서로 누구나 발급이 가능합니다.

    다만 3개월마다 갱신을 해줘야 하는 불편한이 존재합니다.

     

    Synology NAS(DSM)에서 Let's encrypt를 발급받는 방법은 몇가지가 있는데

    그 중에서 docker를 이용한 방법을 소개합니다.

     

    사실 DSM자체적으로 제어판-보안-인증서메뉴에서 Let's encrypt 인증서를 발급받는 기능이 존재하기는 합니다.

    그런데 포트개방, 방화벽 개방, 기존 인증서 정리, 포트포워딩 정리 등등 해줘야할 작업이 많습니다.

    그리고 에러가 발생해도 뭐 때문인지 나오지 않아서 불편한 경우가 많습니다.

     

    하지만 docker를 활용하면 특별히 미리 뭔가 설정해줘야할 것이 없습니다.

     

    본 방법은 DNS서버를 자체적으로 운영하는 DSM을 기준으로 설명드립니다.

    (외부 네임서버 서비스를 이용하시는 분들은 txt dns 등록시 해당 외부 네임서버 설정 사이트에 가셔서 하시면 됩니다)

     

    1. 먼저 공유폴더를 하나 만들어줍니다.

    저는 /volume2/docker 공유폴더를 하나 만들었습니다.

    그리고 하위에 /volume2/docker/ssl/etc, /volume2/docker/ssl/var 폴더를 생성합니다.

     

    2. 그리고 Synology dsm ssh 콘솔에 접속합니다.

    ex) ssh 주소

    아이디, 패스워드 입력

     

    3. sudo su - 입력해서 root로 들어갑니다.

     

    4. 그리고 아래 명령을 입력합니다.

    docker run -it --rm --name certbot -v '/volume2/docker/ssl/etc:/etc/letsencrypt' -v '/volume2/docker/ssl/var:/var/lib/letsencrypt' certbot/certbot certonly -d '도메인주소' -d '*.도메인주소' --manual --preferred-challenges dns --server https://acme-v02.api.letsencrypt.org/directory

    (도메인주소와 *.도메인주소를 등록해두면 대표도메인 뿐만 아니라. test.도메인주소와 같은 서브도메인도 모두 인증서가 자동으로 사용가능해 집니다)

     

    5. 그러면 아래 메시지가 나타납니다.

    Saving debug log to /var/log/letsencrypt/letsencrypt.log
    Plugins selected: Authenticator manual, Installer None
    Cert is due for renewal, auto-renewing...
    Renewing an existing certificate
    Performing the following challenges:
    dns-01 challenge for 
    dns-01 challenge for 
    
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    NOTE: The IP of this machine will be publicly logged as having requested this
    certificate. If you're running certbot in manual mode on a machine that is not
    your server, please ensure you're okay with that.
    
    Are you OK with your IP being logged?
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    (Y)es/(N)o:

    여기서 Y를 선택합니다.

     

    6. 다음으로 아래 메시지가 나타납니다.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Please deploy a DNS TXT record under the name
    _acme-challenge.xxxx.com with the following value:
    
    WB2CdMnTElhYBvCtqcYfhQW7_pkvOyFpEGeokqtx0js
    
    Before continuing, verify the record is deployed.
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Press Enter to Continue

    이제 DNS 서버에서 위 DNS TXT를 등록합니다.

    1) DNS 서버 - 도메인 선택하고 마우스 우측 클릭 - 리소스 레코드

    2) 생성 - TXT type

    3) 이름에 _acme-challenge 입력, 정보에 WB2CdMnTElhYBvCtqcYfhQW7_pkvOyFpEGeokqtx0js 입력.

    4) 확인을 눌러서 등록합니다.

    5) 약간의 시간이 지난 후에 다른 ssh 콘솔을 열어서 아래 명령을 입력해봅니다.

    dig +short -t txt _acme-challenge.도메인명

    위 정보에 입력한 문자열이 나타나는지 확인해서 잘 나타나면 이전 콘솔에서 엔터를 누릅니다.

    6) 다시 아래 메시지가 나타납니다.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Please deploy a DNS TXT record under the name
    _acme-challenge.도메인명 with the following value:
    
    WGSzkqRPtrLlpn6sx2Vb-7f-amK8kJQx3NLxQEwYABs
    
    Before continuing, verify the record is deployed.
    (This must be set up in addition to the previous challenges; do not remove,
    replace, or undo the previous challenge tasks yet. Note that you might be
    asked to create multiple distinct TXT records with the same name. This is
    permitted by DNS standards.)
    
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Press Enter to Continue

    눈치채셨겠지만 2번의 도메인 검증을 거칩니다.

    아무튼 위에서 했던것처럼 한번더 등록하고 확인합니다. 단, 기존에 등록한 txt dns는 절대 삭제하지 않고 놔둡니다.

    7) 5번 명령어로 확인해서 두번째 정보코드도 나타나면 다시 엔터를 누릅니다.

    8) 그러면 아래와 같은 메시지가 나타나고 종료됩니다.

    Waiting for verification...
    Cleaning up challenges
    
    IMPORTANT NOTES:
     - Congratulations! Your certificate and chain have been saved at:
       /etc/letsencrypt/live/도메인명/fullchain.pem
       Your key file has been saved at:
       /etc/letsencrypt/live/도메인명/privkey.pem
       Your cert will expire on 2020-11-21. To obtain a new or tweaked
       version of this certificate in the future, simply run certbot
       again. To non-interactively renew *all* of your certificates, run
       "certbot renew"
     - If you like Certbot, please consider supporting our work by:
    
       Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
       Donating to EFF:                    https://eff.org/donate-le

    개인키,인증서,체인,풀체인키는 아까 생성한 디렉토리에 저장됩니다.

    그리고 해당 인증서는 발급일 기준으로 정확히 3달간 유효합니다.

    당연히 3달이 지나기전에 다시 인증서를 발급받아서 적용해야 사이트 접속시 인증서 만료 메시지가 나타나지 않습니다.

    9) 아까 생성한 공유폴더 디렉토리에 들어가 봅니다.

    privkey - 개인키

    cert - 인증서

    chain - 중간인증서

    fullchain - 인증서와 중간인증서 묶음

    파일이 있을겁니다.

    여기서 privkey, cert, chain을 로컬pc에 다운받습니다.

    10) 제어판-보안-인증서에 들어갑니다.

    추가를 선택합니다.

    기존에 인증서등록된게 없다면 새 인증서 추가를 기존에 등록된 인증서가 있다면 기존 인증서 교체를 선택합니다.

    그리고 인증서 가져오기를 선택하고 각각의 인증서를 불러옵니다.

    마지막으로 확인을 누르면 인증서 갱신 또는 등록이 완료 된겁니다.

    반응형
Designed by Tistory.