인프라/시스템 보안

[ SSL ] Certbot

김붕어87 2023. 4. 25. 12:13
반응형
개요
Let`s Encrypt 비영리 기관을 통해 무료로 SSL 인증서를 발급 받을 수 있습니다.

인증서는 3가지 형태로 발급 가능합니다.
루트 도메인 인증서
서브 도메인 인증서
* 와일드카드 도메인 인증서

인증서 발급은 Certbot을 사용해서 도메인 인증 후 발급 됩니다.

링크

 

SSL 인증서 발급 방법 4가지

  • webroot
    • 사이트 디렉토리 내에 인증서 유효성을 확인할 수 있는 파일을 업로드하여 인증서를 발급
    • 실제 작동하고 있는 웹서버의 특정 디렉토리의 특정 파일 쓰기 작업을 통해서 인증
    • 이 방식의 장점은 nginx를 중단시킬 필요가 없음
    • 이 방법의 단점은 인증 명령에 하나의 도메인 인증서만 발급 가능
  • 웹서버
    • 운영중인 웹서버에서 SSL 인증을 진행하고 SSL 인증을 발급 및 자동 셋팅 해준다.
    • 발급이나 갱신을 위해 웹서버를 중단시킬 필요가 없음
    • 인증서 갱신 시 상황에 맞게 셋팅을 자동으로 업데이트
  • Standalone
    • 사이트 작동을 멈추고 이 사이트의 네크워킹을 이용해 사이트 유효성을 확인해 Let’s Encrypt SSL 인증서를 발급하는 방식
    • 80포트로 가상 Standalone 웹서버를 띄워서 인증서를 발급
    • 이 방식은 동시에 여러 도메인을 발급 받을 수 있음
    • 그렇지만 인증서 발급 전에 Nginx를 중단하고 발급 완료 후 다시 Nginx를 시작해야 함
  • DNS
    • 도메인을 쿼리해 확인되는 TXT 레코드로 사이트 유효성을 확인하는 방법
    • 와일드 카드 방식으로 인증서를 발급 가능
    • 이 방법은 당연하게도 서버 관리자가 도메인 DNS를 관리/수정할 수 있어야 하며 . 인증서 갱신 시마다 DNS에서 TXT값을 변경해야 하므로 외부에서 TXT 레코드를 입력할 수 있도록 DNS가 API를 제공하는 경우만 갱신 과정을 자동으로 처리(클라우두플레어 API가 대표적인 사례)

 

 

Certbot 인증서 발급

 

1. Certbot docker으로 실행

  • certbot을 설치해서 실행하는 방법과 certbot docker를 실행하는 방법 2가지가 있습니다.
  • 와일드 카드로 생성하기 위해서는 도메인 2개를 동시에 설정해줘야합니다.
    • xxx.com
    • *.xxx.com
docker run -it --rm --name certbot \
    -v 'etc:/etc/letsencrypt' \
    -v 'var:/var/lib/letsencrypt' \
    certbot/certbot certonly \
    -d 'xxx.com' \
    -d '*.xxx.com' \
    --manual --preferred-challenges dns --server https://acme-v02.api.letsencrypt.org/directory

 

 

2. 도메인에 TXT 레코드 설정

  • AWS Route53 및 도메인 구입한 곳에서 txt 레코드 등록하기
    • xxx.com
    • *.xxx.com

3. 도메인에 TXT 레코드 설정 확인

 

  • local에서 레코드 확인
dig _acme-challenge.xxx.com txt +short

 

 

 

 

4. private, cert key 확인

  • 맥북에서는 docker volume에 접근이 안되어서 VM 띄어서 접근해야합니다.
 
docker start dockervm_instance -i || docker run --name=dockervm_instance -it --privileged --pid=host debian nsenter -t 1 -m -u -n -i sh

 

  • MAC docker 어플리케이션에서 공유 volume 으로 접근하면됩니다.

 

 

 

 

 

 

5. Nginx에서 도메인 설정

... 중간 생략 ...
    ssl_certificate /etc/letsencrypt/live/test.dev.blockgenie.app/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/test.dev.blockgenie.app/privkey.pem; # managed by Certbot
... 중간 생략 ...
반응형