웹사이트 검색

Lets Encrypt SSL/TLS 인증서를 certbot으로 관리하는 방법


이 페이지에서

  1. 요구 사항\n
  2. 일반 개념
    1. 작동 모드
    2. 도전
    3. 플러그인\n

    1. 인증서 나열
    2. 수동 구성을 위한 인증서 얻기\n
    3. 대화식 HTTPS 설치\n
    4. 인증서 갱신
    5. 인증서 해지\n
    6. 와일드카드 인증서

    Lets Encrypt는 ISRG(Internet Security Research Group)에서 운영하고 EFF(Electronic Frontier Foundation), Mozilla Foundation 등에서 설립한 자동화된 개방형 인증 기관(CA)입니다. 보안 및 개인 정보 보호 목적으로 통신을 암호화하는 데 일반적으로 사용되는 무료 SSL/TLS 인증서를 제공하며 가장 주목할만한 사용 사례는 HTTPS입니다. Lets Encrypt는 ACME(Automatic Certificate Management Environment) 프로토콜을 사용하여 인증서를 발급, 취소 및 갱신합니다. Certbot은 Lets Encrypt 인증 기관에서 SSL/TLS 인증서를 관리하는 데 주로 사용되는 무료 오픈 소스 유틸리티입니다. GNU/Linux, FreeBSD, OpenBSD 및 OS X를 포함한 대부분의 UNIX 및 UNIX 유사 운영 체제에서 사용할 수 있습니다. 이 안내서는 certbot 사용에 대한 플랫폼에 구애받지 않는 소개를 제공합니다.

    참고: certbot은 진행 중인 작업이므로 이 가이드에 설명된 일부 기능 또는 동작은 이전 또는 향후 릴리스에서 다를 수 있습니다.

    요구 사항

    • IPv4 주소를 가리키는 A 레코드가 있는 등록된 도메인 이름. \www.example.com\이 예로 사용됩니다.
    • 권한 있는 셸에 대한 액세스.\n

    일반 개념

    작동 모드

    certbot을 사용하여 HTTPS를 활성화하는 것은 인증과 설치의 두 부분으로 나눌 수 있습니다. 첫 번째는 문제를 해결하고 인증서 및 기타 파일을 저장해야 합니다. 설치 단계에는 웹 서버 구성 및 보안이 포함됩니다. Certbot은 run 하위 명령을 사용하여 둘 다 자동으로 수행할 수 있습니다. certonly 및 install 하위 명령은 각각 인증 및 설치 단계를 위한 것입니다.

    Certbot에는 인증서 갱신 및 해지 기능도 포함되어 있습니다.

    도전

    Lets Encrypt 인증서를 얻으려면 ACME(자동 인증서 관리 환경) 서버에서 발급한 도메인 유효성 검사 문제를 해결해야 합니다. 이 챌린지는 인증서를 얻으려는 도메인의 소유권을 확인합니다. 다양한 챌린지 유형이 존재하며 가장 일반적으로 사용되는 것은 HTTP-01입니다. 이름에서 알 수 있듯이 HTTP 프로토콜을 사용합니다. HTTP 서버는 모든 TCP 포트를 사용하도록 구성할 수 있지만 이 문제는 보안 조치로 인해 포트 80에서만 작동합니다. DNS-01은 DNS 확인을 기반으로 하는 또 다른 덜 인기 있는 챌린지 유형입니다. 와일드카드 인증서는 HTTP-01 챌린지를 통해 얻을 수 없습니다. 이 가이드는 처음에 HTTP-01에 초점을 맞춥니다.

    플러그인

    Certbot은 플러그인을 사용하여 인증 및 설치를 수행합니다. webroot 및 standalone과 같은 플러그인은 인증만 수행하는 반면 Apache 및 Nginx 플러그인과 같은 다른 플러그인은 인증서를 자동으로 가져와 설치하도록 설계되었습니다(예: 웹 서버 구성). 다른 플러그인에는 DNS-01 인증을 위한 여러 벤더별 DNS 플러그인이 포함됩니다. 내장된 webroot 및 standalone 플러그인을 제외하고 대부분의 certbot 플러그인은 별도로 설치됩니다.

    Certbot 설치

    대부분의 Linux 배포판은 공식 리포지토리에서 certbot을 제공합니다. 다음은 널리 사용되는 플랫폼에 대한 설치 지침입니다.

    데비안과 우분투:

    apt update
    apt install -y certbot

    센트OS 7:

    yum install -y certbot

    페도라 및 CentOS 8:

    dnf install -y certbot

    아치 리눅스:

    pacman -Sy certbot

    FreeBSD:

    pkg install py36-certbot

    OpenBSD 6.0 이상:

    pkg_add certbot

    MacOS(홈브류 필요):

    brew install letsencrypt

    다른:

    플랫폼에서 certbot 패키지를 사용할 수 없는 경우 공식 certbot-auto wrapper 스크립트를 사용하여 시스템에 certbot을 자동으로 설치할 수 있습니다. 여기에서 다운로드할 수 있습니다.

    Certbot 사용

    인증서 나열

    서버에서 certbot이 관리하는 인증서 목록을 표시하려면 다음 명령을 실행하십시오.

    certbot certificates

    수동 구성을 위한 인증서 얻기

    웹 서버를 수동으로 구성하도록 선택한 경우 두 가지 방법으로 인증서를 얻을 수 있습니다. 서버의 웹 루트 디렉토리에 certbot 액세스 권한을 부여하거나(예: webroot 플러그인) 포트 80에 임시 독립형 웹 서버를 배포합니다(예: 독립형 플러그인). 후자의 플러그인은 기존 웹 서버와의 통합이 불가능하거나 원하지 않는 경우에 유용합니다. 편리하고 간단한 갱신을 위해 사용된 플러그인과 일관성을 유지하십시오.

    기존 웹 서버 사용

    기존 웹 서버를 사용하려면 다음 명령을 실행하기 전에 웹 서버가 실행 중이고 포트 80에서 수신 대기 중인지 확인하십시오.

    certbot certonly --webroot
    

    다른 정보 중에서 도메인 이름과 웹루트 경로(대부분의 Linux 시스템에서 기본적으로 "/var/www/html/")를 입력하라는 메시지가 표시됩니다. 또는 필요한 정보를 명령 인수로 지정할 수 있습니다. 예를 들어:

    certbot certonly --webroot --webroot-path /var/www/html --agree-tos -m  -d www.example.com
    

    독립형 웹 서버 사용

    독립 실행형 서버를 사용하려면 먼저 포트 80의 가용성을 확인하십시오. 다음을 사용하여 해당 포트에 바인딩된 프로세스를 확인할 수 있습니다.

    ss -lntp 'sport = 80'
    

    필요한 경우 진행하기 전에 잘못된 서비스/프로세스를 중지하십시오. 그런 다음 다음 명령을 실행합니다.

    certbot certonly --standalone
    

    인증서가 발급되면 웹 서버를 수동으로 구성해야 합니다. 관련 파일은 /etc/letsencrypt/live/your_domain에서 찾을 수 있습니다.

    대화식 HTTPS 설치

    앞에서 언급했듯이 certbot은 웹 서버 구성을 포함하여 전체 HTTPS 설정 프로세스를 자동화할 수 있습니다. 플러그인은 Apache와 Nginx 모두에서 사용할 수 있으며 별도의 패키지로 설치해야 할 수도 있습니다. 웹 서버에 특정한 certbot 플러그인을 설치한 다음 "certbot run --PLUGIN_NAME"을 실행합니다. Debian 10 시스템에서 Apache의 전체 프로세스를 잘 보여줍니다. Nginx의 프로세스는 비슷합니다.

    apt install -y python-certbot-apache
    certbot run --apache
    

    웹 서버가 도메인 이름에 대해 이미 구성되어 있다고 가정하면 certbot은 기존 구성을 구문 분석하고 HTTPS를 활성화해야 하는 도메인 이름을 선택하라는 메시지를 표시합니다. 웹 서버가 구성되지 않았거나 certbot이 도메인 이름을 감지하지 못하는 경우 메시지가 표시되면 도메인 이름을 수동으로 입력하십시오. 예를 들어:

    Which names would you like to activate HTTPS for?
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    1: www.example.com
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Select the appropriate numbers separated by commas and/or spaces, or leave input
    blank to select all options shown (Enter 'c' to cancel): 1

    Certbot은 새 HTTPS 가상 호스트에 대한 새 Apache 구성 파일을 생성하고 HTTP 트래픽을 HTTPS로 리디렉션해야 하는지 묻습니다. 특별한 이유가 없다면 HTTPS로의 리디렉션을 활성화해야 합니다.

    Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    1: No redirect - Make no further changes to the webserver configuration.
    2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
    new sites, or if you're confident your site works on HTTPS. You can undo this
    change by editing your web server's configuration.
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2
    Enabled Apache rewrite module
    Redirecting vhost in /etc/apache2/sites-enabled/www.example.com.conf to ssl vhost in /etc/apache2/sites-available/www.example.com-le-ssl.conf
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Congratulations! You have successfully enabled https://www.example.com
    

    인증서 갱신

    수동 갱신

    certbot으로 인증서를 갱신하려면 renew 하위 명령을 사용할 수 있습니다. 갱신하는 동안 certbot은 원래 발급에 사용된 것과 동일한 플러그인 및 옵션을 사용합니다. 인증서는 30일 이내에 만료되는 경우에만 갱신되므로 이 하위 명령은 원하는 만큼 자주 사용할 수 있습니다. 인증서가 만료 날짜에 근접하지 않은 경우 아무 조치도 취하지 않기 때문입니다. 명령은 간단합니다.

    certbot renew
    

    독립 실행형 플러그인을 사용하여 인증서를 발급한 경우 갱신에 성공하려면 웹 서버를 중지해야 합니다. 후크를 사용하여 이를 수행할 수 있습니다. 예를 들어 시스템이 Apache를 실행하는 경우 명령은 다음과 같습니다.

    certbot renew --pre-hook "systemctl stop apache2.service" --post-hook "systemctl start apache2.service"
    

    자동 갱신

    많은 배포판에서 시스템 타이머 또는 cron 작업을 통해 기본적으로 자동 갱신을 활성화했습니다. 다음을 사용하여 시스템 타이머를 확인할 수 있습니다.

    systemctl list-timers
    

    크론 작업의 경우 다음을 사용합니다.

    ls /etc/cron*
    

    발급에 webroot 플러그인이 사용된 경우 웹 서버가 실행되는 한 자동 갱신이 성공해야 합니다. 그러나 독립 실행형 플러그인을 사용하면 certbot이 포트 80에 바인딩할 수 없기 때문에 웹 서버가 실행 중인 경우 기본 자동 갱신 명령이 실패합니다. 따라서 위와 같이 후크를 추가하여 수정해야 합니다.

    인증서 취소

    다음과 같이 인증서 경로 또는 이름을 지정하여 인증서를 해지할 수 있습니다.

    certbot revoke --cert-name cert_name
    (OR)
    certbot revoke --cert-path /path/to/cert.pem
    

    예를 들어:

    certbot revoke --cert-name www.example.net
    

    revoke 하위 명령을 실행한 후 certbot은 인증서 파일을 삭제해야 하는지 묻습니다. 삭제하지 않기로 선택하면 해지된 인증서는 다음 갱신 시 갱신됩니다. revoke 하위 명령에 여러 자체 설명 옵션을 전달할 수 있습니다.

    • --delete-after-revoke(기본적으로 사용자 선택 프롬프트)\n
    • --no-delete-after-revoke(기본적으로 사용자 선택 프롬프트)\n
    • --이유 [지정되지 않음, 키 손상, 제휴 변경됨, 대체됨, 작업 중지](기본값: 지정되지 않음)\n

    와일드카드 인증서

    별도의 일반 인증서 대신 단일 와일드카드 인증서를 사용하여 여러 하위 도메인을 식별할 수 있습니다. 와일드카드 인증서를 얻으려면 DNS-01 챌린지를 사용해야 합니다. ACME 인증 프로세스를 자동화하는 여러 벤더별 플러그인을 사용할 수 있지만 벤더 중립적인 수동 프로세스에 대해 설명하겠습니다. 도메인의 이름 서버에 대한 액세스가 필요합니다.

    와일드카드 인증서를 요청하려면 다음 명령을 사용하십시오.

    certbot certonly --manual --preferred-challenges dns-01 -d *.example.net
    

    Certbot은 DNS TXT 레코드에 배포되어야 하는 값을 표시합니다. 이 TXT 레코드는 필요한 소유권 확인 역할을 합니다.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Please deploy a DNS TXT record under the name
    _acme-challenge.example.net with the following value:
    y77OkxXi89sJLjUgYu-HReYrcVlxt_bfG8yVOVKngBOcU
    Before continuing, verify the record is deployed.
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Press Enter to Continue
    

    계속하기 전에 DNS 제어판에서 지정된 레코드를 생성해야 합니다. 레코드가 생성되면 Enter 키를 누르기 전에 몇 분 정도 기다리십시오. 그러면 ACME 서버가 레코드를 확인합니다. 경우에 따라 새 레코드가 제대로 전파되고 액세스할 수 있으려면 더 긴 대기 시간이 필요할 수 있습니다. 성공하면 인증서, 체인 및 개인 키가 /etc/letsencrypt/live/example.com/에 저장됩니다.

    참조 및 추가 정보

    • 공식 Certbot Github 저장소
    • ACME(자동 인증서 관리 환경) RFC 8555\n
    • EFF Certbot 설명서
    • Certbot(1) 매뉴얼 페이지