웹사이트 검색

CentOS 7에서 Let's Encrypt로 Nginx를 보호하는 방법


소개

Let’s Encrypt는 무료 TLS/SSL 인증서를 얻고 설치하여 웹 서버에서 암호화된 HTTPS를 활성화하는 방법을 제공하는 새로운 인증 기관(CA)입니다. 필요한 단계의 대부분(전부는 아님)을 자동화하려고 시도하는 소프트웨어 클라이언트인 Certbot을 제공하여 프로세스를 간소화합니다. 현재 인증서를 얻고 설치하는 전체 프로세스는 Apache 및 Nginx 웹 서버 모두에서 완전히 자동화되어 있습니다.

이 튜토리얼에서는 certbot Let's Encrypt 클라이언트를 사용하여 무료 SSL 인증서를 얻고 CentOS 7에서 Nginx와 함께 사용하는 방법을 보여줍니다. SSL 인증서를 자동으로 갱신하는 방법도 보여줍니다. .

전제 조건

이 튜토리얼을 따르기 전에 몇 가지가 필요합니다.

  • sudo 권한이 있는 루트가 아닌 사용자가 있는 CentOS 7 서버. CentOS 7 자습서의 초기 서버 설정에서 1-3단계를 수행하여 이러한 사용자 계정을 설정하는 방법을 배울 수 있습니다.
  • 인증서를 사용하려는 등록된 도메인 이름을 소유하거나 제어해야 합니다. 아직 등록된 도메인 이름이 없는 경우 많은 도메인 이름 등록 기관(예: Namecheap, GoDaddy 등) 중 하나에 등록할 수 있습니다.
  • 도메인을 서버의 공개 IP 주소로 가리키는 DNS A 레코드. 이는 Let’s Encrypt가 인증서를 발급하는 도메인을 소유하고 있음을 확인하는 방법 때문에 필요합니다. 예를 들어 example.com에 대한 인증서를 얻으려면 유효성 검사 프로세스가 작동하려면 해당 도메인이 서버로 확인되어야 합니다. 설정에서는 www.example.com을 도메인 이름으로 사용하므로 두 DNS 레코드가 모두 필요합니다.

모든 필수 구성 요소가 준비되면 Let’s Encrypt 클라이언트 소프트웨어 설치로 이동하겠습니다.

1단계 - Certbot Let’s Encrypt 클라이언트 설치

SSL 인증서를 얻기 위해 Let’s Encrypt를 사용하는 첫 번째 단계는 서버에 certbot 소프트웨어를 설치하는 것입니다. 현재 이를 설치하는 가장 좋은 방법은 EPEL 저장소를 이용하는 것입니다.

다음을 입력하여 서버에서 EPEL 저장소에 대한 액세스를 활성화합니다.

  1. sudo yum install epel-release

리포지토리가 활성화되면 다음을 입력하여 certbot-nginx 패키지를 얻을 수 있습니다.

  1. sudo yum install certbot-nginx

이제 certbot Let’s Encrypt 클라이언트가 설치되어 사용할 준비가 되었습니다.

2단계 - Nginx 설정

아직 Nginx를 설치하지 않았다면 지금 설치할 수 있습니다. EPEL 리포지토리는 이전 섹션에서 이미 활성화되어 있어야 하므로 다음을 입력하여 Nginx를 설치할 수 있습니다.

  1. sudo yum install nginx

그런 다음 systemctl을 사용하여 Nginx를 시작합니다.

  1. sudo systemctl start nginx

Certbot은 Nginx용 SSL을 자동으로 구성할 수 있지만 구성에서 올바른 server 블록을 찾을 수 있어야 합니다. 인증서를 요청하는 도메인과 일치하는 server_name 지시문을 찾아 이를 수행합니다. 새로운 Nginx 설치로 시작하는 경우 vi 또는 선호하는 텍스트 편집기를 사용하여 기본 구성 파일을 업데이트할 수 있습니다.

  1. sudo vi /etc/nginx/nginx.conf

기존 server_name 줄을 찾습니다.

server_name _;

_ 밑줄을 도메인 이름으로 바꿉니다.

server_name example.com www.example.com;

파일을 저장하고 편집기를 종료하십시오. vi를 사용하는 경우 :x를 입력한 다음 프롬프트가 표시되면 y를 입력하여 저장하고 종료합니다. 다음을 사용하여 구성 편집 구문을 확인합니다.

  1. sudo nginx -t

오류 없이 실행되면 Nginx를 다시 로드하여 새 구성을 로드합니다.

  1. sudo systemctl reload nginx

Certbot은 이제 올바른 server 블록을 찾아 업데이트할 수 있습니다. 이제 HTTPS 트래픽을 허용하도록 방화벽을 업데이트합니다.

3단계 - 방화벽 업데이트

방화벽이 활성화된 경우 포트 80 및 443이 수신 트래픽에 열려 있는지 확인하십시오. 방화벽을 실행하고 있지 않다면 건너뛸 수 있습니다.

방화벽이 실행 중인 경우 다음을 입력하여 이러한 포트를 열 수 있습니다.

  1. sudo firewall-cmd --add-service=http
  2. sudo firewall-cmd --add-service=https
  3. sudo firewall-cmd --runtime-to-permanent

iptables 방화벽이 실행 중인 경우 실행해야 하는 명령은 현재 규칙 세트에 크게 의존합니다. 초기 규칙 세트의 경우 다음을 입력하여 HTTP 및 HTTPS 액세스를 추가할 수 있습니다.

  1. sudo iptables -I INPUT -p tcp -m tcp --dport 80 -j ACCEPT
  2. sudo iptables -I INPUT -p tcp -m tcp --dport 443 -j ACCEPT

이제 Certbot을 실행하고 인증서를 가져올 준비가 되었습니다.

4단계 - 인증서 받기

Certbot은 다양한 플러그인을 통해 SSL 인증서를 얻는 다양한 방법을 제공합니다. Nginx 플러그인은 필요할 때마다 Nginx를 재구성하고 구성을 다시 로드합니다.

  1. sudo certbot --nginx -d example.com -d www.example.com

이것은 --nginx 플러그인과 함께 certbot을 실행하고 -d를 사용하여 인증서가 유효하기를 원하는 이름을 지정합니다.

certbot을 처음 실행하는 경우 이메일 주소를 입력하고 서비스 약관에 동의하라는 메시지가 표시됩니다. 이렇게 하면 certbot이 Let’s Encrypt 서버와 통신한 다음 인증서를 요청하는 도메인을 제어하는지 확인하기 위해 챌린지를 실행합니다. 구성이 업데이트되고 Nginx가 다시 로드하여 새 설정을 선택합니다. 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 certificate will expire on 2022-10-20. 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

인증서가 다운로드, 설치 및 로드됩니다. https://를 사용하여 웹사이트를 새로고침하고 브라우저의 보안 표시기를 확인하세요. 일반적으로 녹색 자물쇠 아이콘으로 사이트가 제대로 보호되고 있음을 나타내야 합니다.

5단계 - 자동 갱신 설정

Let’s Encrypt의 인증서는 90일 동안만 유효합니다. 이는 사용자가 인증서 갱신 프로세스를 자동화하도록 권장하기 위한 것입니다. 만료되는 인증서를 확인하고 자동으로 갱신하려면 정기적으로 실행되는 명령을 설정해야 합니다.

갱신 확인을 매일 실행하기 위해 주기적 작업 실행을 위한 표준 시스템 서비스인 cron을 사용합니다. 우리는 crontab이라는 파일을 열고 편집하여 cron에게 해야 할 일을 알려줍니다.

  1. sudo crontab -e

텍스트 편집기는 이 시점에서 빈 텍스트 파일인 기본 crontab을 엽니다. 다음 줄을 붙여넣은 다음 저장하고 닫습니다.

. . .
15 3 * * * /usr/bin/certbot renew --quiet

이 줄의 15 3 * * * 부분은 "매일 오전 3:15에 다음 명령 실행\을 의미합니다. 언제든지 선택할 수 있습니다.

Certbot의 갱신 명령은 시스템에 설치된 모든 인증서를 확인하고 30일 이내에 만료되도록 설정된 인증서를 업데이트합니다. --quiet는 Certbot이 정보를 출력하지 않거나 사용자 입력을 기다리지 않도록 지시합니다.

cron은 이제 이 명령을 매일 실행합니다. 설치된 모든 인증서는 만료되기까지 30일 이하가 남았을 때 자동으로 갱신되고 다시 로드됩니다.

cron 작업을 생성하고 예약하는 방법에 대한 자세한 내용은 VPS 가이드에서 Cron을 사용하여 작업을 자동화하는 방법을 확인할 수 있습니다.

결론

이 튜토리얼에서는 Let’s Encrypt 클라이언트 certbot을 설치하고, 도메인용 SSL 인증서를 다운로드하고, 이러한 인증서를 사용하도록 Nginx를 구성하고, 자동 인증서 갱신을 설정했습니다. Certbot 사용에 대한 추가 질문이 있는 경우 해당 문서에서 시작하는 것이 좋습니다.