본문 바로가기
리눅스

도커 사용시 let's encrypt 인증서 사용 방법

by hyperhand 2023. 12. 3.

OS: 우분투 22.04LTS

서버: Node.js

 

 서버를 개발하면서 인증서없이 개발하고 테스트를 진행해 왔으나 배포 시점이 되면서 https 통신을 해야 했기에 let's encrypt를 통해 무료 인증서를 발급받아 사용하기로 했다.

 

 일반적인 상황에서는 아래 certbot 사이트에서 안내하는 바와 같이 certbot을 snap을 이용해 설치하면 간단히 사용할 수 있다. 해보지는 않았지만 자동 갱신 부분도 알아서 crontab에 등록이 되는 듯 했다.

 

 그런데 docker container에서 돌리는 서버는 이 방법을 사용하지 않고 docker hub에서 certbot 이미지를 다운받아 컨테이너를 실행시켜 컨테이너에서 발급 과정이 처리되도록 한다. 아무래도 컨테이너는 최대한 가볍게 돌아가도록 하는 것이 좋기에 서버 컨테이너에 certbot까지 설치해서 사용하는 것이 도커를 사용하는 목적에 부합하지 않아서 그런게 아닌가 싶다.

 

 관련 링크는 다음과 같다.

https://eff-certbot.readthedocs.io/en/latest/install.html#running-with-docker

 

 

 

 

인증서 발급

  • 우선 외부에서 80번 포트로 서버에 접근 가능하고 응답할 수 있는 환경이 돼야 한다. 왜냐면 아래 실행할 조건에서 standalone 타입을 선택할건데 standalone 타입은 80번 포트에 응답하는 certbot 자체 웹서버를 실행시키므로 네트워크 설정도 그에 맞춰줘야 한다.
  • 서버 컨테이너가 실행되고 있는 호스트로 가서 다음과 같이 명령을 입력한다. 나는 나중에 다시 입력하는 불편함을 덜고자 sh 파일로 작성했다.

run.sh

  • 파일 저장 후 실행하면 다음과 같이 진행된다.
    $ ./run.sh

갱신 또는 보안 관련 이슈 발생시 수신할 이메일 입력

 

  • 동의 부분에 Y 입력 후 패스하고, 발급할 인증서에 대한 도메인명 입력

 

  • 발급 완료

 

 발급이 완료 되면 fullchain.pem, privkey.pem 파일이 /etc/letsencrypt/live/도메인명 디렉토리에 생성된다. 그러면 연결된 볼륨에 접근해 인증서를 사용할 수 있다.

 

 

 

 

 

인증서 갱신

 

 위 절차로 최초 발급 후 만료 기간이 경과되기 전에 다시 재발급 될 수 있도록 조치해야 한다. 뭐 경과되기 전에 메일이 발송되면 수동으로 해도 되지만 자동으로 할 수 있는 방법이 있는데 굳이...

 

  • 혹시나 현재 유효일자가 얼마나 남았는지 확인해보고 싶을 수도 있다. 다음 명령으로 확인할 수 있다. 나는 이 또한 나중에 확인할 일이 생길 수 있기에 sh 파일로 작성했다.

remain.sh

  • $ ./remain.sh

 

  • 갱신 스크립트는 아래와 같이 작성했다.

renew.sh

 

  • 현 시점에 그냥 바로 실행해보면 아직 갱신할 때가 아니라고 나온다.

 

  • 요 스크립트 파일을 crontab에 등록해 주기적으로 실행되도록 한다. 다음 명령 입력해서 맨 아래줄에 작성한다.
    $ crontab -e

원하는 에디터 선택
매월 8일 03시 30분에 실행되도록 설정. 각자의 환경에 맞게 설정하면 됨.

 

  • 작성 후 저장하면 등록된다.

 

  • 등록된 것을 확인해보려면 다음과 같이 명령 입력
    $ crontab -l

기타 certbot 관련 옵션은 아래 링크를 참조하시길.

https://eff-certbot.readthedocs.io/en/latest/using.html#setting-up-automated-renewal

반응형