블로그 | NGINX

업데이트: NGINX에서 무료 Let's Encrypt SSL/TLS 인증서 사용

NGINX-F5-수평-검정-유형-RGB의 일부
아미르 라우드닷 썸네일
아미르 라우드다트
2021년 1월 28일 게시

편집자 - NGINX에서 Let's Encrypt를 사용하는 원래 절차를 자세히 설명하는 블로그 게시물(2016년 2월)이 여기로 리디렉션됩니다. 해당 게시물의 지침은 더 이상 지원되지 않습니다.

이 게시물은 certbot‑auto 에 대한 의존성을 제거하기 위해 업데이트되었습니다 . Electronic Frontier Federation(EFF)은 Debian 및 Ubuntu용 Certbot 1.10.0 에서, 다른 모든 운영 체제용 Certbot 1.11.0 에서 certbot‑auto를 더 이상 사용하지 않습니다. 추가 세부 정보와 대체 설치 방법에 대해서는 EFF의 이 게시물을 참조하세요.

또한 Peter Eckersley와 Electronic Frontier Foundation의 Yan Zhu가 당시 새로운 Let's Encrypt 인증 기관을 소개하는 nginx.conf 2015의 블로그 게시물도 참조하세요.

웹사이트에 SSL/TLS 암호화를 적용하면 검색 순위가 높아지고 사용자의 보안이 강화된다는 것은 잘 알려진 사실입니다. 하지만 웹사이트 소유자가 SSL을 도입하는 데에는 여러 가지 장벽이 있습니다.

인증서를 받는 데 있어 가장 큰 장벽 두 가지는 비용과 수작업 절차입니다. 하지만 이제 Let's Encrypt 덕분에 이런 문제는 더 이상 걱정할 필요가 없습니다. Let's Encrypt는 SSL/TLS 암호화를 모든 사람에게 무료로 제공합니다.

Let’s Encrypt는 무료, 자동화, 개방형 인증 기관(CA)입니다. 네, 맞습니다: 무료 SSL/TLS 인증서. Let's Encrypt에서 발급한 인증서는 오늘날 대부분의 브라우저에서 신뢰되며 여기에는 Windows XP SP3의 Internet Explorer와 같은 이전 브라우저도 포함됩니다. 또한 Let’s Encrypt는 인증서 발급과 갱신을 모두 완전 자동화합니다.

이 블로그 게시물에서는 Let's Encrypt 클라이언트를 사용하여 인증서를 생성하는 방법과 이를 사용하도록 NGINX Open Source 및 NGINX Plus를 자동으로 구성하는 방법에 대해 다룹니다.

Let's Encrypt의 작동 방식

인증서를 발급하기 전에 Let’s Encrypt는 도메인 소유권을 검증합니다. 호스트에서 실행되는 Let's Encrypt 클라이언트는 필요한 정보가 포함된 임시 파일(토큰)을 생성합니다. 그런 다음 Let's Encrypt 검증 서버는 파일을 검색하기 위한 HTTP 요청을 하고 토큰을 검증합니다. 이를 통해 도메인의 DNS 레코드가 Let's Encrypt 클라이언트를 실행하는 서버로 확인되는지 확인합니다.

필수 조건

Let's Encrypt를 시작하기 전에 다음이 필요합니다.

  • NGINX 또는 NGINX Plus가 설치되어 있어야 합니다.
  • 인증서에 등록된 도메인 이름을 소유하거나 제어합니다. 등록된 도메인 이름이 없는 경우 GoDaddydnsexit 같은 도메인 이름 등록 기관을 이용할 수 있습니다.
  • 도메인 이름과 서버의 공용 IP 주소를 연결하는 DNS 레코드를 만듭니다.

이제 NGINX Open Source 또는 NGINX Plus를 사용하여 Let's Encrypt를 쉽게 설정할 수 있습니다(읽기의 편의를 위해 지금부터는 간단히 NGINX 라 지칭하겠습니다).

메모 : 이 블로그 게시물에 설명된 절차를 Ubuntu 16.04(Xenial)에서 테스트했습니다.

1. Let's Encrypt 클라이언트 다운로드

먼저 Let's Encrypt 클라이언트인 certbot을 다운로드합니다.

바로 위에 언급했듯이, 우리는 Ubuntu 16.04에서 지침을 테스트했으며, 해당 플랫폼에 적합한 명령은 다음과 같습니다.

$ apt-get 업데이트 $ sudo apt-get 설치 certbot $ apt-get 설치 python-certbot-nginx

Ubuntu 18.04 이상에서는 Python 3 버전으로 바꾸세요.

$ apt-get 업데이트 $ sudo apt-get 설치 certbot $ apt-get 설치 python3-certbot-nginx

2. NGINX 설정

certbot은 SSL/TLS에 맞게 NGINX를 자동으로 구성할 수 있습니다. 이 명령은 인증서를 요청하는 도메인 이름이 포함된 server_name 지시어가 포함된 NGINX 구성의 서버 블록을 찾아 수정합니다. 우리의 예에서 도메인은 www.example.com 입니다.

  1. 새로 NGINX를 설치했다고 가정하고 텍스트 편집기를 사용하여 /etc/nginx/conf.d 디렉토리에 domain‑name .conf 라는 이름의 파일을 만듭니다(따라서 우리의 예에서는 www.example.com.conf ).

  2. server_name 지시문을 사용하여 도메인 이름(및 변형 이름, 있는 경우)을 지정하세요.

    서버 { listen 80 default_server;
    listen [::]:80 default_server;
    root /var/www/html;
    server_name example.com www.example.com;
    }
  3. 파일을 저장한 다음 이 명령을 실행하여 구성 구문을 확인하고 NGINX를 다시 시작합니다.

    $ nginx -t && nginx -s 다시 로드

3. SSL/TLS 인증서 획득

certbot 용 NGINX 플러그인은 NGINX를 재구성하고 필요할 때마다 구성을 다시 로드합니다.

  1. NGINX 플러그인으로 인증서를 생성하려면 다음 명령을 실행하세요.

    $ sudo certbot --nginx -d example.com -d www.example.com
  2. certbot 의 메시지에 응답하여 HTTPS 설정을 구성합니다. 여기에는 이메일 주소를 입력하고 Let's Encrypt 서비스 약관에 동의하는 작업이 포함됩니다.

  3. 인증서 생성이 완료되면 NGINX가 새로운 설정으로 다시 로드됩니다. certbot은 인증서 생성이 성공적이었고 서버에서 인증서의 위치를 지정했다는 메시지를 생성합니다.

    축하해요! https://example.com 및 https://www.example.com을 성공적으로 활성화했습니다. 
    -----------------------------------------------------------------------------------------------
    중요 참고 사항: 
    
    축하해요! 귀하의 인증서와 체인은 다음 위치에 저장되었습니다: 
    /etc/letsencrypt/live/example.com/fullchain.pem 
    귀하의 키 파일은 다음 위치에 저장되었습니다: 
    /etc/letsencrypt/live/example.com//privkey.pem
    귀하의 인증서는 2017-12-12에 만료됩니다.

    메모 : Let's Encrypt 인증서는 90일 후(이 예에서는 2017년 12월 12일)에 만료됩니다. 인증서 자동 갱신에 대한 자세한 내용은 아래의 Let's Encrypt 인증서 자동 갱신을 참조하세요.

domain‑name .conf 를 살펴보면 certbot이 이를 수정한 것을 확인할 수 있습니다.

서버 { listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
server_name example.com www.example.com;

listen 443 ssl; # Certbot에서 관리

# RSA 인증서
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # Certbot에서 관리

ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # Certbot에서 관리

include /etc/letsencrypt/options-ssl-nginx.conf; # Certbot에서 관리

# https가 아닌 트래픽을 https로 리디렉션
if ($scheme != "https") {
return 301 https://$host$request_uri;
} # Certbot에서 관리
}

4. Let's Encrypt 인증서 자동 갱신

Let's Encrypt 인증서는 90일 후 만료됩니다. 자동으로 인증서를 갱신하는 것이 좋습니다. 여기서는 기존 crontab 파일에 cron 작업을 추가하여 이를 수행합니다.

  1. crontab 파일을 엽니다.

    $ 크론탭 -e
  2. 매일 실행하는 certbot 명령을 추가합니다. 이 예에서는 매일 정오에 명령을 실행합니다. 이 명령은 서버의 인증서가 앞으로 30일 이내에 만료되는지 확인하고, 그렇다면 인증서를 갱신합니다. --quiet 명령어는 certbot에 출력을 생성하지 말라고 지시합니다.

    0 12 * * * /usr/bin/certbot 갱신 --조용함
  3. 파일을 저장하고 닫습니다. 설치된 모든 인증서는 자동으로 갱신되고 다시 로드됩니다.

  4. 요약

    등록된 도메인 이름에 대한 SSL/TLS 인증서를 생성하기 위해 Let's Encrypt 에이전트를 설치했습니다. NGINX를 구성하여 인증서를 사용하고 인증서 자동 갱신을 설정했습니다. NGINX 및 NGINX Plus용 Let’s Encrypt 인증서를 사용하면 몇 분 안에 간단하고 안전한 웹사이트를 구축하고 실행할 수 있습니다.

    NGINX Plus에서 Let's Encrypt를 직접 사용해보려면 오늘 무료 30일 평가판을 시작하거나 저희에게 연락하여 사용 사례에 대해 논의하세요 .

    관련 문서

    업스트림 서버에 대한 HTTP 트래픽 보안
    업스트림 서버에 대한 TCP 트래픽 보안
    NGINX SSL 종료


"이 블로그 게시물에는 더 이상 사용할 수 없거나 더 이상 지원되지 않는 제품이 참조될 수 있습니다. 사용 가능한 F5 NGINX 제품과 솔루션에 대한 최신 정보를 보려면 NGINX 제품군을 살펴보세요. NGINX는 이제 F5의 일부가 되었습니다. 이전의 모든 NGINX.com 링크는 F5.com의 유사한 NGINX 콘텐츠로 리디렉션됩니다."