웹사이트 검색

Ubuntu 및 Debian에서 Let's Encrypt를 사용하여 Nginx를 보호하는 방법


Apache SSL에 관한 이전 Let's Encrypt 튜토리얼에 이어, 이 문서에서는 Let's Encrypt CA에서 발급한 무료 SSL/TLS 인증서를 생성하고 설치하는 방법에 대해 설명합니다. Ubuntu 또는 DebianNginx 웹 서버용.

또한 읽어보세요
  1. Ubuntu 및 Debian에서 무료 Let's Encrypt로 Apache를 보호하세요
  2. RHEL 및 CentOS에서 Apache를 보호하기 위해 Let’s Encrypt SSL을 설치합니다.
샘플 환경 테스트

요구사항

  1. 서버의 IP 주소를 다시 가리키는 유효한 DNS A 레코드가 있는 등록된 도메인.
  2. 여러 도메인이나 하위 도메인을 호스팅하려는 경우 SSL 및 Vhost가 활성화된 설치된 Nginx 웹 서버.

1단계: Nginx 웹 서버 설치

1. 첫 번째 단계에서 아직 설치되지 않은 경우 Nginx 웹 서버를 설치하려면 아래 명령을 실행하십시오.

sudo apt-get install nginx

2단계: Nginx용 Let's Encrypt SSL 인증서 생성

2. 무료 SSL/TLS 인증서를 생성하기 전에 Let's Encrypt 소프트웨어를 /usr/local/ 파일 시스템 계층 구조에 설치하세요. >git 클라이언트에 아래 명령을 실행하여:

sudo apt-get -y install git
cd /usr/local/
sudo git clone https://github.com/letsencrypt/letsencrypt

3. Nginx 인증서를 받는 절차는 자동화되어 있지만 Let's Encrypt Standalone 플러그인을 사용하여 Nginx용 무료 SSL 인증서를 수동으로 만들고 설치할 수 있습니다.

이 방법을 사용하려면 Let's Encrypt 클라이언트가 인증서를 생성하기 전에 서버의 ID를 검증하는 동안 짧은 시간 동안 시스템에서 포트 80을 사용해서는 안 됩니다.

이미 Nginx를 실행 중인 경우 다음 명령을 실행하여 서비스를 중지합니다.


sudo service nginx stop
OR
sudo systemctl stop nginx

포트 80에 바인딩된 다른 서비스를 실행 중인 경우 해당 서비스도 중지하세요.

4. netstat 명령을 실행하여 포트 80이 사용 가능한지 확인합니다.

sudo netstat -tlpn | grep 80

5. 이제 SSL 인증서를 얻기 위해 letsencrypt를 실행할 차례입니다. /usr/local/letsencrypt 시스템 경로에 있는 Let's Encrypt 설치 디렉터리로 이동하고 인증서 전용 <코드를 제공하여 letencrypt-auto 명령을 실행합니다. 인증서를 생성하려는 각 도메인 또는 하위 도메인에 대한 >--standalone 옵션 및 -d 플래그입니다.

cd /usr/local/letsencrypt
sudo ./letsencrypt-auto certonly --standalone -d your_domain.tld 

6. 분실된 키 복구 또는 긴급 알림을 위해 Let’s Encrypt에서 사용할 이메일 주소를 입력하세요.

7. Enter 키를 눌러 라이센스 조건에 동의합니다.

8. 마지막으로 모든 것이 성공적으로 완료되면 아래 스크린샷과 유사한 메시지가 터미널 콘솔에 표시됩니다.

3단계: Nginx에 Let's Encrypt SSL 인증서 설치

9. 이제 SSL 인증서가 생성되었으므로 이를 사용하도록 Nginx 웹서버를 구성할 차례입니다. 새 SSL 인증서는 도메인 이름을 딴 디렉터리 아래 /etc/letsencrypt/live/에 저장됩니다. ls 명령을 실행하여 도메인에 대해 발급된 인증서 파일을 나열합니다.

sudo ls /etc/letsencrypt/live/
sudo ls -al /etc/letsencrypt/live/caeszar.tk

10. 그런 다음 텍스트 편집기로 /etc/nginx/sites-available/default 파일을 열고 시작 부분을 지정하는 첫 번째 주석 처리된 줄 뒤에 다음 블록을 추가합니다. SSL 블록. 아래 스크린샷을 지침으로 사용하세요.

sudo nano /etc/nginx/sites-enabled/default

Nginx 블록 발췌:

SSL configuration
        #
        listen 443 ssl default_server;
        ssl_certificate /etc/letsencrypt/live/caeszar.tk/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/caeszar.tk/privkey.pem;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;
        ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';
        ssl_dhparam /etc/nginx/ssl/dhparams.pem;

이에 따라 SSL 인증서의 도메인 이름 값을 바꾸십시오.

11. 다음 단계에서는 서버를 보호하기 위해 /etc/nginx/ssl/ 디렉토리에 강력한 Diffie-Hellman 암호를 생성합니다. 다음 명령을 실행하여 Logjam 공격을 방지합니다.

sudo mkdir /etc/nginx/ssl
cd /etc/nginx/ssl
sudo openssl dhparam -out dhparams.pem 2048

12. 마지막으로 Nginx 데몬을 다시 시작하여 변경 사항을 반영합니다.

sudo systemctl restart nginx

아래 URL을 방문하여 SSL 인증서를 테스트하세요.

https://www.ssllabs.com/ssltest/analyze.html

4단계: 자동 갱신 Nginx 인증서를 암호화하자

13. Let's Encrypt CA에서 발급한 인증서는 90일 동안 유효합니다. 만료 날짜 이전에 파일을 자동 갱신하려면 다음 내용으로 /usr/local/bin/ 디렉토리에 ssl-renew.sh bash 스크립트를 생성하십시오.

sudo nano /usr/local/bin/ssl-renew.sh

ssl-renew.sh 파일에 다음 내용을 추가합니다.

#!/bin/bash

cd /usr/local/letsencrypt
sudo ./letsencrypt-auto certonly -a webroot --agree-tos --renew-by-default --webroot-path=/var/www/html/ -d your_domain.tld
sudo systemctl reload nginx
exit 0

Nginx 문서 루트와 일치하도록 --webroot-path 변수를 바꾸세요. 다음 명령을 실행하여 스크립트가 실행 가능한지 확인하십시오.

sudo chmod +x /usr/local/bin/ssl-renew.sh

14. 마지막으로 인증서가 만료되기 약 30일 전에 업데이트되도록 두 달마다 자정에 스크립트를 실행하는 크론 작업을 추가하세요.

sudo crontab -e

파일 맨 아래에 다음 줄을 추가합니다.

0 1 1 */2 * /usr/local/bin/ssl-renew.sh >> /var/log/your_domain.tld-renew.log 2>&1

그게 다야! Nginx 서버는 이제 무료 Let's Encrypt SSL 인증서를 사용하여 SSL 콘텐츠를 제공하고 있습니다.