웹사이트 검색

Ubuntu 18.04에서 Let's Encrypt로 Nginx를 보호하는 방법


소개

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

이 튜토리얼에서는 Certbot을 사용하여 Ubuntu 18.04에서 Nginx용 무료 SSL 인증서를 얻고 인증서가 자동으로 갱신되도록 설정합니다.

이 튜토리얼에서는 기본 파일 대신 별도의 Nginx 서버 블록 파일을 사용합니다. 일반적인 실수를 방지하고 기본 파일을 대체 구성으로 유지하는 데 도움이 되므로 각 도메인에 대해 새 Nginx 서버 블록 파일을 생성하는 것이 좋습니다.

전제 조건

이 자습서를 따르려면 다음이 필요합니다.

  • 루트가 아닌 sudo 사용자 및 방화벽을 포함하여 Ubuntu 18.04 자습서의 초기 서버 설정에 따라 Ubuntu 18.04 서버 1개가 설정되었습니다.\n
  • 완전히 등록된 도메인 이름. 이 자습서에서는 전체적으로 your_domain을 사용합니다. Freenom에서 도메인 이름을 구입하거나 선택한 도메인 등록 기관을 사용할 수 있습니다.\n
  • 다음 DNS 레코드는 모두 서버에 대해 설정됩니다. 추가 방법에 대한 자세한 내용은 이 DigitalOcean DNS 소개를 참조하세요.\n
    • 서버의 공용 IP 주소를 가리키는 your_domain이 있는 A 레코드
    • 서버의 공개 IP 주소를 가리키는 www.your_domain이 있는 A 레코드

    Nginx는 도메인의 다음 서버 블록에 의해 설치됩니다. 이 튜토리얼에서는 /etc/nginx/sites-available/your_domain을 예로 사용합니다.

    1단계 - Certbot 설치

    SSL 인증서를 얻기 위해 Let’s Encrypt를 사용하는 첫 번째 단계는 서버에 Certbot 소프트웨어를 설치하는 것입니다.

    Certbot 프로젝트는 대부분의 사용자가 snap을 통해 소프트웨어를 설치할 것을 권장합니다. 이 소프트웨어는 원래 Canonical(Ubuntu 뒤에 있는 회사)에서 개발했으며 현재 많은 Linux 배포판에서 사용할 수 있는 패키지 관리자입니다.

    1. sudo snap install --classic certbot

    출력에는 Certbot의 현재 버전과 성공적인 설치가 표시됩니다.

    Output
    certbot 1.21.0 from Certbot Project (certbot-eff✓) installed

    다음으로 /usr/bin/ 디렉터리에서 새로 설치된 /snap/bin/certbot 실행 파일에 대한 심볼릭 링크를 만듭니다. 이렇게 하면 certbot 명령이 서버에서 올바르게 실행될 수 있습니다. 이렇게 하려면 다음 ln 명령을 실행합니다. 여기에는 하드 링크가 아닌 기호 또는 소프트 링크를 생성하는 -s 플래그가 포함되어 있습니다.

    1. sudo ln -s /snap/bin/certbot /usr/bin/certbot

    이제 Certbot을 사용할 준비가 되었지만 Nginx용 SSL을 구성하려면 일부 Nginx 구성을 확인해야 합니다.

    2단계 - Nginx 구성 확인

    Certbot은 SSL을 자동으로 구성할 수 있도록 Nginx 구성에서 올바른 server 블록을 찾을 수 있어야 합니다. 특히 인증서를 요청한 도메인과 일치하는 server_name 지시문을 검색하여 이를 수행합니다.

    Nginx 설치 튜토리얼의 권장 서버 블록 설정 단계를 따른 경우 /etc/nginx/sites-available/your_domain에 도메인에 대한 서버 블록이 생깁니다. server_name 지시문이 이미 적절하게 설정되어 있습니다.

    확인하려면 nano 또는 자주 사용하는 텍스트 편집기를 사용하여 도메인의 서버 블록 파일을 엽니다.

    1. sudo nano /etc/nginx/sites-available/your_domain

    기존 server_name 줄을 찾습니다. 다음과 같아야 합니다.

    ...
    server_name your_domain www.your_domain;
    ...
    

    그렇다면 편집기를 종료하고 다음 단계로 이동하십시오.

    그렇지 않은 경우 일치하도록 업데이트하십시오. 그런 다음 파일을 저장하고 편집기를 종료합니다. nano를 사용하는 경우 CTRL + X를 누른 다음 YENTER를 눌러 이 작업을 수행할 수 있습니다.

    이제 구성 편집의 구문을 확인하십시오.

    1. sudo nginx -t

    오류가 발생하면 서버 블록 파일을 다시 열고 오타나 누락된 문자가 있는지 확인하십시오. 구성 파일의 구문이 정확하면 Nginx를 다시 로드하여 새 구성을 로드합니다.

    1. sudo systemctl reload nginx

    Certbot은 이제 올바른 server 블록을 찾아 업데이트할 수 있습니다.

    다음으로 HTTPS 트래픽을 허용하도록 방화벽을 업데이트합니다.

    3단계 - 방화벽을 통한 HTTPS 허용

    전제 조건 가이드에서 권장하는 대로 ufw 방화벽을 활성화한 경우 HTTPS 트래픽을 허용하도록 설정을 조정해야 합니다. 운 좋게도 Nginx는 설치 시 ufw로 몇 개의 프로필을 등록합니다.

    다음을 실행하여 현재 설정을 확인할 수 있습니다.

    1. sudo ufw status

    웹 서버에 대한 HTTP 트래픽만 허용됨을 나타내는 다음과 같은 출력을 수신해야 합니다.

    Output
    Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Nginx HTTP ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Nginx HTTP (v6) ALLOW Anywhere (v6)

    추가 HTTPS 트래픽을 허용하려면 Nginx 전체 프로필을 허용하고 중복 Nginx HTTP 프로필 허용을 삭제합니다.

    1. sudo ufw allow 'Nginx Full'
    2. sudo ufw delete allow 'Nginx HTTP'

    이제 ufw status 명령을 실행하면 다음과 같은 새로운 규칙이 반영됩니다.

    1. sudo ufw status
    Output
    Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Nginx Full ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Nginx Full (v6) ALLOW Anywhere (v6)

    다음으로 Certbot을 실행하고 인증서를 가져옵니다.

    4단계 - SSL 인증서 받기

    Certbot은 플러그인을 통해 SSL 인증서를 얻는 다양한 방법을 제공합니다. Nginx 플러그인은 필요할 때마다 Nginx를 재구성하고 구성을 다시 로드합니다. 이 플러그인을 사용하려면 다음을 실행하십시오.

    1. sudo certbot --nginx -d your_domain -d your_domain

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

    certbot을 처음 실행하는 경우 이메일 주소를 입력하고 서비스 약관에 동의하라는 메시지가 표시됩니다. 이렇게 하면 certbot이 Let’s Encrypt 서버와 통신하여 도메인에 대한 인증서를 요청합니다. 성공하면 다음 출력이 표시됩니다.

    Output
    Successfully received certificate. Certificate is saved at: /etc/letsencrypt/live/your_domain/fullchain.pem Key is saved at: /etc/letsencrypt/live/your_domain/privkey.pem This certificate expires on 2022-01-27. These files will be updated when the certificate renews. Certbot has set up a scheduled task to automatically renew this certificate in the background. Deploying certificate Successfully deployed certificate for your_domain to /etc/nginx/sites-enabled/your_domain Successfully deployed certificate for www.your_domain to /etc/nginx/sites-enabled/your_domain Congratulations! You have successfully enabled HTTPS on https://your_domain and https://www.your_domain - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 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://를 사용하여 웹사이트를 새로고침하고 브라우저의 보안 표시기를 확인하세요. 일반적으로 녹색 자물쇠 아이콘과 함께 사이트가 적절하게 보호되었음을 나타내야 합니다. SSL Labs 서버 테스트를 사용하여 서버를 테스트하면 A 등급을 받습니다.

    이제 SSL 인증서를 얻었으므로 마지막 단계는 갱신 프로세스를 테스트하는 것입니다.

    5단계 - Certbot 자동 갱신 확인

    Let’s Encrypt의 인증서는 90일 동안만 유효합니다. 이는 사용자가 인증서 갱신 프로세스를 자동화하도록 권장하기 위한 것입니다. 설치한 certbot 패키지는 갱신 스크립트를 /etc/cron.d에 추가하여 이를 처리합니다. 이 스크립트는 하루에 두 번 실행되며 만료 30일 이내의 모든 인증서를 자동으로 갱신합니다.

    갱신 프로세스를 테스트하려면 certbot을 사용하여 시험 실행을 할 수 있습니다.

    1. sudo certbot renew --dry-run

    오류가 표시되지 않으면 모든 준비가 된 것입니다. 필요한 경우 Certbot은 인증서를 갱신하고 Nginx를 다시 로드하여 변경 사항을 적용합니다. 자동 갱신 프로세스가 실패하면 Let’s Encrypt는 지정한 이메일로 메시지를 보내 인증서가 만료될 때 경고합니다.

    결론

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