<

카테고리 없음

certbot 인증서 발급 방법

hanseongjun 2025. 7. 24. 03:57
728x90
반응형

Certbot 인증서 발급 및 관리 Cheat Sheet

Certbot은 Let's Encrypt를 통해 무료 SSL/TLS 인증서를 발급받고 관리하는 데 사용되는 도구입니다. 웹 서비스의 보안을 강화하고 사용자에게 신뢰를 제공하는 데 필수적입니다.

1. Certbot 설치

대부분의 리눅스 배포판에서 Certbot은 패키지 관리자를 통해 쉽게 설치할 수 있습니다.

  • Ubuntu/Debian:

    Bash

      sudo snap install core
      sudo snap refresh core
      sudo snap install --classic certbot
      sudo ln -s /snap/bin/certbot /usr/bin/certbot

2. 인증서 발급 (일반적인 방법)

가장 일반적인 방법은 웹 서버 플러그인을 사용하여 인증서를 발급받고 자동으로 설정하는 것입니다.

  • Nginx 웹 서버의 경우:

    Bash

      sudo certbot --nginx
    • 설명: 이 명령어는 Nginx 설정 파일을 자동으로 분석하여 도메인을 찾고, 인증서 발급 및 HTTPS 설정을 자동으로 처리합니다. 대화형으로 진행되며, 이메일 주소, 약관 동의, 리다이렉트 설정 여부 등을 묻습니다.

    • 근거 자료: Certbot Nginx 플러그인 공식 문서 (https://certbot.eff.org/docs/using.html#nginx)

  • Apache 웹 서버의 경우:

    Bash

      sudo certbot --apache
    • 설명: Nginx와 유사하게 Apache 설정 파일을 분석하여 인증서 발급 및 HTTPS 설정을 자동으로 처리합니다.

    • 근거 자료: Certbot Apache 플러그인 공식 문서 (https://certbot.eff.org/docs/using.html#apache)

  • 웹 서버 플러그인 없이 수동으로 발급 (웹루트 인증):

    Bash

      sudo certbot certonly --webroot -w /var/www/html -d your_domain.com -d www.your_domain.com
    • 설명: $ -w 옵션 뒤에는 웹사이트의 루트 디렉터리(웹 서버가 정적 파일을 제공하는 경로)를 지정합니다. $ -d 옵션으로 인증서를 발급받을 도메인을 지정합니다. 여러 도메인을 하나의 인증서에 포함할 수 있습니다.

    • 근거 자료: Certbot 사용자 가이드 (https://certbot.eff.org/docs/using.html#webroot)

3. 발급받은 인증서를 자동으로 갱신/관리하는 방법

Let's Encrypt 인증서는 90일마다 갱신해야 합니다. Certbot은 이 과정을 자동으로 처리하도록 설계되었습니다.

  • 자동 갱신 설정: Certbot 설치 시 대부분의 경우 자동 갱신을 위한 cron job 또는 systemd 타이머가 자동으로 설정됩니다. Certbot은 매일 2회(systemd 타이머 기준) 또는 주 2회(cron job 기준) 갱신이 필요한 인증서가 있는지 확인하고, 만료 기한이 30일 미만으로 남은 인증서를 자동으로 갱신합니다.

    • 갱신 테스트 (Dry Run):

      Bash

        sudo certbot renew --dry-run
      • 설명: 실제로 인증서를 갱신하지 않고 갱신 프로세스가 성공적으로 작동하는지 테스트합니다. 이 명령어가 성공하면 자동 갱신도 문제없이 작동할 가능성이 높습니다. 개발자로서 서비스를 운영할 때 이러한 사전 테스트는 매우 중요합니다.

      • 근거 자료: Certbot 공식 문서 - Renewal (https://certbot.eff.org/docs/using.html#renewing-certificates)

    • 갱신 강제 실행:

      Bash

        sudo certbot renew --force-renewal
  • 갱신 주기 확인 (Ubuntu/Debian의 systemd 타이머의 경우):

    Bash

      sudo systemctl list-timers | grep certbot
    • 설명: 이 명령어를 통해 Certbot 갱신 타이머가 설정되어 있는지, 그리고 다음 실행 예정 시간이 언제인지 확인할 수 있습니다. 보통 certbot.timer라는 이름으로 등록되어 있습니다.

4. TXT 레코드 인증 방식을 이용해 도메인 인증서를 발급받는 방법 (DNS-01 챌린지)

이 방식은 웹 서버에 접근할 수 없거나, 여러 서브도메인 또는 와일드카드 인증서(*.your_domain.com)를 발급받을 때 유용합니다. DNS 제공 업체의 웹 인터페이스를 통해 DNS TXT 레코드를 수동으로 추가해야 합니다.

  • TXT 레코드 방식 발급 명령어:

    Bash

      sudo certbot certonly --manual --preferred-challenges dns -d your_domain.com -d *.your_domain.com
    • 설명:

      • --manual: 수동 인증 방식을 사용합니다.

      • --preferred-challenges dns: DNS 챌린지를 선호함을 명시합니다.

      • your_domain.com, *.your_domain.com: 인증서를 발급받을 도메인을 지정합니다. 와일드카드 인증서(*.your_domain.com)는 DNS-01 챌린지를 통해서만 발급 가능합니다.

    • 진행 과정:

      1. 명령어를 실행하면 Certbot이 특정 TXT 레코드(_acme-challenge.your_domain.com)와 그 값을 생성하여 보여줍니다.

      2. 사용자는 이 정보를 DNS 제공 업체의 웹 인터페이스에 로그인하여 해당 도메인에 대한 TXT 레코드를 추가해야 합니다.

      3. DNS 전파에는 시간이 걸릴 수 있으므로, 레코드를 추가한 후 Certbot에서 Enter를 눌러 계속 진행하기 전에 DNS 전파가 완료될 때까지 잠시 기다려야 합니다.

      4. Certbot이 DNS 레코드를 확인하고 인증서를 발급합니다.

    • 근거 자료: Let's Encrypt 챌린지 타입 설명 (https://letsencrypt.org/docs/challenge-types/#dns-01-challenge), Certbot 사용자 가이드 - Manual Mode (https://certbot.eff.org/docs/using.html#manual)

5. TXT 레코드를 이용해 발급받은 인증서를 다시 일반적인 방법으로 되돌리는 방법

DNS-01 챌린지를 사용하여 발급받은 인증서를 나중에 웹 서버 플러그인(HTTP-01 챌린지) 방식으로 갱신하고 싶을 수 있습니다. 이는 Certbot이 인증서를 갱신할 때 기본적으로 이전에 성공했던 챌린지 방식을 사용하려고 시도하기 때문입니다.

Certbot은 각 인증서에 대해 마지막으로 성공한 챌린지 방식을 기록해둡니다. 따라서 TXT 레코드 방식으로 발급받은 인증서를 HTTP-01 방식으로 갱신하려면, Certbot에게 명시적으로 HTTP-01 챌린지를 사용하도록 지시해야 합니다.

  • 방법 1: 특정 도메인에 대한 갱신 시 챌린지 방식 변경 (가장 권장) 해당 인증서에 연결된 도메인에 대해 웹 서버 플러그인(예: --nginx 또는 --apache)을 사용하여 갱신 명령어를 다시 실행합니다. Certbot은 이전에 DNS-01 챌린지로 발급받았더라도, 해당 플러그인이 사용 가능한 상태이고 유효한 웹 서버 설정이 있다면 HTTP-01 챌린지를 시도합니다.

    • Nginx 웹 서버의 경우 (예시):

      Bash

        sudo certbot renew --cert-name your_domain.com --nginx --preferred-challenges http
      • 설명:

        • --cert-name your_domain.com: 갱신하고자 하는 인증서의 이름을 지정합니다. (일반적으로 메인 도메인 이름과 동일합니다. sudo certbot certificates 명령어로 확인 가능)

        • --nginx: Nginx 플러그인을 사용하여 HTTP-01 챌린지를 시도합니다.

        • --preferred-challenges http: HTTP-01 챌린지를 선호하도록 명시합니다. 이전에 DNS-01 챌린지로 발급받았다 할지라도, Certbot이 웹 서버 접근이 가능함을 감지하면 HTTP-01로 전환하여 갱신할 수 있습니다.

      • 근거 자료: Certbot 공식 문서 - Command Line Options (https://certbot.eff.org/docs/using.html#command-line-options)

    • Apache 웹 서버의 경우 (예시):

      Bash

        sudo certbot renew --cert-name your_domain.com --apache --preferred-challenges http
  • 방법 2: 기존 인증서를 삭제하고 재발급 (최후의 수단) 만약 위 방법으로 갱신 방식 전환이 어렵거나, 설정이 복잡하다고 판단될 경우, 기존 인증서를 삭제하고 HTTP-01 방식으로 새로 발급받는 것도 방법입니다. 단, 이 경우 기존 HTTPS 서비스가 일시적으로 중단될 수 있으므로 주의해야 합니다.

    • 기존 인증서 삭제:

      Bash

        sudo certbot delete --cert-name your_domain.com
      • 설명: your_domain.com은 삭제할 인증서의 이름입니다. sudo certbot certificates 명령어로 정확한 이름을 확인하세요.
    • 새로운 인증서 발급 (일반적인 방법):

      Bash

        sudo certbot --nginx # 또는 sudo certbot --apache 또는 sudo certbot certonly --webroot ...
      • 설명: 삭제 후에는 2번 항목의 일반적인 방법으로 다시 인증서를 발급받으면 됩니다.
  • 왜 이 과정이 필요한가요? (마스터의 배경에 맞춰 설명) master께서는 웹/앱 개발을 공부하시고 지속 가능한 서비스를 만들고자 하신다고 하셨습니다. Certbot이 인증서를 갱신할 때, 이전에 성공했던 챌린지 방식을 기억하는 것은 안정성과 효율성 때문입니다. 웹 서버에 접근할 수 없는 환경에서 DNS 챌린지를 통해 인증서를 발급받았다면, Certbot은 다음 갱신 시에도 웹 서버에 접근할 수 없을 가능성이 높다고 판단하여 다시 DNS 챌린지를 시도하는 것이 더 효율적이라고 생각합니다.

    하지만 서비스 환경이 바뀌어 이제 웹 서버 접근이 가능하다면, 명시적으로 HTTP-01 챌린지를 선호한다고 알려주어야 Certbot이 해당 방식으로 전환을 시도합니다. 이는 일종의 "환경 변화에 따른 전략 변경"이라고 이해하시면 됩니다. 사용자의 피드백(여기서는 사용자가 원하는 챌린지 방식)을 수용하여 더 적절한 방식으로 동작하도록 지시하는 과정이라고 볼 수 있습니다.

#리눅스 #서버 #certbot #인증서 #https

728x90
반응형
LIST