CentOS 8에서 Let's Encrypt를 사용하여 Nginx를 보호하는 방법

CentOS 8에서 Let's Encrypt를 사용하여 Nginx를 보호하는 방법

2022-06-01 last update

12 minutes reading Nginx Let's Encrypt CentOS 8
저자는 COVID-19 Relief Fund 계획의 일부로 기부를 받기로 했다.

소개


Write for DOnationsLet’s Encrypt에 대한 무료 인증서를 제공하는 인증서 발급 기관(CA)입니다.소프트웨어 클라이언트Transport Layer Security (TLS) encryption를 제공함으로써 인증서의 작성, 검증, 서명, 설치와 갱신 과정을 간소화했다.
이 강좌에서는 웹 서버로 실행되는 CentOS 8 서버Certbot에서 TLS/SSL 인증서를 설정합니다.또한 Let’s Encrypt 작업 자동화 인증서 갱신 과정을 사용할 것입니다.

선결 조건


이 안내서를 작성하려면 다음이 필요합니다.
  • 권한이 있는 비루트 사용자와 방화벽을 포함하여 다음 인원Nginx이 설정한 CentOS 8 서버.
  • CentOS 8 서버에 설치된 Nginx는 서버 블록을 구성합니다.당신은 우리의 강좌cron에 따라 어떻게 설정하는지 배울 수 있습니다.
  • 완전히 등록된 도메인 이름입니다.이 강좌는 시종 sudo 을 예로 사용할 것이다.the CentOS 8 Initial Server Setup guide에서 도메인 이름을 구입하거나 How To Install Nginx on CentOS 8에서 도메인 이름을 무료로 받거나 선택한 도메인 이름 등록기를 사용할 수 있습니다.
  • 서버에 다음 두 개의 DNS 레코드가 설정되어 있습니다.추가 방법에 대한 자세한 내용은 Namecheap 을 참조하십시오.
  • 서버의 공용 IP 주소를 가리키는 A 레코드입니다.
  • 서버의 공용 IP 주소를 가리키는 A 레코드입니다.
  • 1단계 - 클라이언트를 암호화하기 위한 Certbot 설치


    먼저 소프트웨어 패키지your_domain를 설치해야 합니다.CentOS 8 컴퓨터에 루트가 아닌 사용자로 로그인하려면 다음과 같이 하십시오.
    1. ssh sammy@your_server_ip
    기본적으로 your_domain 패키지는 패키지 관리자를 통해 사용할 수 없습니다.Certbot을 설치하려면 저장소Freenom를 활성화해야 합니다.
    CentOS 8 EPEL 저장소를 추가하려면 다음 명령을 실행합니다.
    1. sudo dnf install epel-release
    설치를 확인하려면 를 입력하고 www.your_domain 를 입력합니다.
    추가 저장소에 액세스할 수 있습니다. 필요한 모든 패키지를 설치하십시오.
    1. sudo dnf install certbot python3-certbot-nginx
    이것은 Certbot 자체와 Certbot의 Nginx 플러그인을 설치합니다. 이것은 프로그램을 실행하는 데 필요한 것입니다.
    설치 프로세스에서 GPG 키 가져오기에 대한 질문을 받습니다.설치를 완료하려면 확인합니다.
    Let's Encrypt 클라이언트가 설치되어 있지만 인증서를 받기 전에 필요한 모든 포트가 열려 있는지 확인해야 합니다.이를 위해 다음 단계에서 방화벽 설정을 업데이트합니다.

    2단계 - 방화벽 규칙 업데이트


    선결 조건 설정이 활성화되어 있기 때문에 Nginx 웹 서버에서 외부 연결을 허용하기 위해 방화벽 설정을 조정해야 합니다.
    어떤 서비스가 활성화되었는지 확인하려면 다음 명령을 실행하십시오.
    1. sudo firewall-cmd --permanent --list-all
    다음 출력을 받게 됩니다.
    Output
    public target: default icmp-block-inversion: no interfaces: sources: services: cockpit dhcpv6-client http ssh ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:
    서비스 목록에 표시되지 않으면 certbot 다음 명령을 실행하여 활성화합니다.
    1. sudo firewall-cmd --permanent --add-service=http
    certbot 통신을 허용하려면 다음 명령을 실행합니다.
    1. sudo firewall-cmd --permanent --add-service=https
    변경 사항을 적용하려면 방화벽 서비스를 다시 로드해야 합니다.
    1. sudo firewall-cmd --reload
    현재 y 데이터에 서버를 열었습니다. 이제 Certbot을 실행하고 인증서를 받을 수 있습니다.

    3단계 - 인증서 얻기


    이제 도메인에 대해 SSL 인증서를 요청할 수 있습니다.firewalldLet's Encrypt 클라이언트를 사용하여 Nginx에 SSL 인증서를 생성하면 클라이언트가 자동으로 새 SSL 인증서를 가져오고 설치합니다. 이 인증서는 매개 변수로 제공된 도메인에 유효합니다.
    여러 도메인이나 하위 도메인에 유효한 단일 인증서를 설치하려면 명령에 추가 매개 변수로 전달할 수 있습니다.매개 변수 목록의 첫 번째 도메인 이름은 인증서를 만드는 데 사용되는 Let's Encrypt입니다. 따라서 목록의 첫 번째 도메인 이름으로 최상위 도메인 이름을 전달하고 다른 하위 도메인이나 별명을 전달합니다.
    1. sudo certbot --nginx -d your_domain -d www.your_domain
    기본 도메인은 http 플러그인을 사용하여 실행됩니다 https.대화식 설치를 수행하고 단일 도메인만 덮어쓰는 인증서를 얻으려면 다음 명령을 사용하여 실행합니다https.
    1. sudo certbot --nginx -d your_domain
    certbot 유틸리티는 인증서 요청 과정에서 도메인 정보를 입력하라는 메시지를 표시할 수 있습니다.이 기능을 사용하려면 도메인 없이 호출하십시오certbot:
    1. sudo certbot --nginx
    인증서 옵션을 사용자 정의하기 위한 단계별 안내서를 받을 것입니다.Certbot은 분실 키 복구와 알림을 위한 전자 메일 주소를 요청하고 서비스 약관에 동의합니다.명령줄에 도메인을 지정하지 않으면 Certbot에서 명령어를 찾고 찾은 도메인 이름 목록을 제공합니다.서버 블록 파일이 --nginx 명령을 사용하여 서비스 도메인을 명시적으로 지정하지 않으면 Certbot에서 도메인 이름을 수동으로 제공해야 합니다.
    보안을 강화하기 위해 Certbot은 포트your_domain의 모든 트래픽을 certbot 로 재설정하도록 자동으로 구성합니다.
    설치가 완료되면 다음과 같은 메시지가 표시됩니다.
    Output
    IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/your_domain/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/your_domain/privkey.pem Your cert will expire on 2021-02-26. To obtain a new or tweaked version of this certificate in the future, simply run certbot again with the "certonly" option. 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
    생성된 인증서 파일은 certbot 디렉토리의 기본 도메인으로 지정된 하위 디렉토리에 있습니다.
    이제 Certbot 사용이 완료되어 SSL 인증서 상태를 확인할 수 있습니다.기본 웹 브라우저에서 다음 링크를 열어 SSL 인증서의 상태를 확인합니다certbot.
    https://www.ssllabs.com/ssltest/analyze.html?d=your_domain
    
    이 사이트에는 this introduction to DigitalOcean DNS로부터 SSL 테스트가 포함되어 있으며 이 테스트는 자동으로 시작됩니다.본문을 작성할 때 기본 설정은 A 등급을 부여합니다.
    현재 server_name 접두사를 사용하여 사이트에 접근할 수 있습니다.단, 이 설정이 정상적으로 작동하도록 정기적으로 인증서를 갱신해야 합니다.다음 단계에서는 이 갱신 과정을 자동으로 실행합니다.

    단계 4 - 자동 갱신 설정


    인증서를 암호화하는 유효기간은 90일이지만, 60일에 한 번씩 인증서를 업데이트하여 일정한 오차를 남기는 것을 권장합니다.Certbot Let's Encrypt 클라이언트에는 현재 설치된 인증서를 자동으로 검사하고 만료일이 30일 미만일 때 인증서를 갱신하는 명령이 있습니다.
    다음 명령을 실행하여 인증서의 자동 갱신을 테스트할 수 있습니다.
    1. sudo certbot renew --dry-run
    출력은 다음과 같습니다.
    Output
    Saving debug log to /var/log/letsencrypt/letsencrypt.log - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Processing /etc/letsencrypt/renewal/your_domain.conf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cert not due for renewal, but simulating renewal for dry run Plugins selected: Authenticator nginx, Installer nginx Renewing an existing certificate Performing the following challenges: http-01 challenge for monitoring.pp.ua Waiting for verification... Cleaning up challenges - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - new certificate deployed with reload of nginx server; fullchain is /etc/letsencrypt/live/your_domain/fullchain.pem - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ** DRY RUN: simulating 'certbot renew' close to cert expiry ** (The test certificates below have not been saved.) Congratulations, all renewals succeeded. The following certs have been renewed: /etc/letsencrypt/live/your_domain/fullchain.pem (success) ...
    여러 도메인이 있는 번들 인증서를 만들면 출력에 기본 도메인 이름만 표시되지만 이 인증서에 포함된 모든 도메인에는 갱신이 적용됩니다.
    인증서가 만료되지 않도록 하는 실용적인 방법은 EPEL 작업을 만드는 것입니다. 이 작업은 정기적으로 자동 갱신 명령을 실행합니다.갱신은 먼저 만료일을 검사하고 인증서가 만료 기간이 30일 미만일 때만 갱신을 실행하기 때문에 매주 심지어 매일 실행되는cron 작업을 만드는 것이 안전합니다.
    crontab를 편집하여 새 작업을 만듭니다. 이 작업은 매일 두 번 갱신됩니다.루트 사용자의crontab를 편집하려면 다음을 실행하십시오.
    1. sudo crontab -e
    텍스트 편집기는 기본crontab를 열 것입니다. 빈 텍스트 파일입니다.server_name 키를 눌러 삽입 모드에 들어가고 다음 줄에 추가합니다.
    회사 명
    0 0,12 * * * python -c 'import random; import time; time.sleep(random.random() * 3600)' && certbot renew --quiet
    
    완료되면 80 키를 눌러 삽입 모드를 종료하고 443/etc/letsencrypt/live 키를 눌러 파일을 저장하고 종료합니다.텍스트 편집기 Vi와 후속 Vim에 대한 자세한 내용은 저희 SSL Labs 강좌를 보십시오.
    이것은 매일 정오와 자정에 실행되는 새로운cron 작업을 만들 것입니다.your_domain 1시간 이내에 갱신 작업을 1분간 무작위로 선택할 수 있습니다.
    Certbot의 https 명령은 시스템에 설치된 모든 인증서를 검사하고 30일 이내에 만료되도록 설정된 인증서를 업데이트합니다.renew Certbot에 정보를 내보내거나 사용자의 입력을 기다리지 말라고 알려 줍니다.
    갱신에 대한 자세한 내용은 cron 을 참조하십시오.

    결론


    이 안내서에는 Let's Encrypt client Certbot을 설치하고 도메인의 SSL 인증서를 다운로드했으며 자동 인증서 갱신을 설정했습니다.Certbot 사용에 대해 궁금한 점이 있으면 공식 문의Installing and Using the Vim Text Editor on a Cloud Server로 문의하십시오.
    공식 Certbot documentation 의 중요 업데이트를 언제든지 확인할 수 있습니다.