웹사이트 검색

RHEL 9/8에 Nginx용 Let’s Encrypt SSL 인증서 설치


이 문서에서는 RHEL에서 Nginx 웹 서버 HTTP 트랜잭션을 보호하는 데 사용할 Let's Encrypt CA(인증 기관)에서 무료로 얻은 SSL/TLS 인증서를 생성하고 설치하는 방법을 안내합니다. Fedora, Rocky LinuxAlmaLinux와 같은 RHEL 기반 배포판.

RHEL 및 RHEL 기반 배포판에 Apache용 Let's Encrypt를 설치하려면 아래 가이드를 따르세요.

요구사항

  • 서버 공용 IP 주소를 다시 가리키는 유효한 A DNS 레코드가 있는 등록된 도메인 이름입니다.
  • SSL이 활성화되고 가상 호스트가 활성화된 Nginx 웹 서버(여러 도메인 또는 하위 도메인 호스팅에만 해당).

테스트 환경 설정

1단계: RHEL 시스템에 Nginx 웹 서버 설치

1. 첫 번째 단계에서 Nginx 데몬이 아직 설치되어 있지 않은 경우 Epel 저장소에서 Nginx 웹 서버를 설치하려면 루트 권한으로 아래 명령을 실행하세요.


------------- On RHEL, Rocky & AlmaLinux 9 ------------- 
dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm

------------- On RHEL, Rocky & AlmaLinux 8 -------------
dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm

------------- Install Nginx Web Server -------------
yum install nginx

참고: Fedora 사용자는 epel 저장소를 설치할 필요가 없습니다.

2단계: RHEL 시스템에 Let’s Encrypt(Certbot) 설치

2. Linux 시스템에 Let's Encrypt 클라이언트를 설치하는 가장 빠른 방법은 epel 저장소에서 certbotpython3-certbot-nginx 패키지를 설치하는 것입니다. .


dnf install certbot python3-certbot-nginx

3. certbot 클라이언트가 설치된 후 아래 명령을 실행하여 설치된 Let's Encrypt 소프트웨어 버전을 확인하세요.


certbot --version

certbot 1.30.0

3단계: Nginx용 무료 Let’s Encrypt SSL 인증서 받기

4. Nginx에 대한 무료 SSL/TLS 인증서를 얻는 과정은 Let's Encrypt Standalone을 사용하여 수동으로 수행됩니다. > 플러그인.

이 방법을 사용하려면 Let's Encrypt 클라이언트가 서버의 ID를 확인하고 인증서를 생성하는 동안 포트 80이 비어 있어야 합니다.

따라서 Nginx가 이미 실행 중인 경우 다음 명령으로 데몬을 중지하고 ss 유틸리티를 실행하여 포트 80이 네트워크 스택에서 더 이상 사용되지 않는지 확인합니다.


service nginx stop
systemctl stop nginx
ss -tln

5. 이제 --nginxcertbot 명령을 실행하여 Let's Encrypt에서 무료 SSL 인증서를 얻을 차례입니다. > Nginx 도메인에 대한 Let's Encrypt 보안 인증서 가져오기 및 구성을 초기화합니다.


certbot --nginx
Or
certbot --nginx -d example.com -d www.example.com

6. 마지막으로 모든 것이 정상적으로 진행되면 bash 터미널에 축하 정보 메시지가 표시됩니다. 인증서가 만료되면 메시지도 표시됩니다.

4단계: Nginx에 Let’s Encrypt SSL 인증서 설치

9. 이제 무료 SSL/TLS 인증서를 소유하고 있으므로 도메인에서 사용할 수 있도록 Nginx 웹 서버에 설치해야 합니다.

모든 새로운 SSL 인증서는 도메인 이름을 딴 디렉터리 아래 /etc/letsencrypt/live/에 저장됩니다. ls 명령을 사용하여 도메인에 대해 발급된 인증서 파일을 나열하고 식별합니다.

sudo ls /etc/letsencrypt/live/
sudo ls -al /etc/letsencrypt/live/your_domain.tld

10. Nginx에 인증서 파일을 설치하고 SSL을 활성화하려면 편집을 위해 /etc/nginx/nginx.conf 파일을 열고 다음 명령문의 마지막 수신 줄 뒤에 아래 명령문을 추가합니다. 서버 블록. 아래 그림을 가이드로 사용하세요.

vi /etc/nginx/nginx.conf

Nginx SSL 블록 발췌:

SSL configuration
listen 443 ssl default_server;
ssl_certificate /etc/letsencrypt/live/your_domain.tld/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/your_domain.tld/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 인증서의 도메인 이름 문자열을 자신의 도메인과 일치하도록 바꾸세요.

11. 마지막으로 Nginx 서비스를 다시 시작하고 https://yourdomain에서 HTTPS 프로토콜을 통해 도메인을 방문하세요. 인증서 오류 없이 페이지가 원활하게 로드되어야 합니다.

systemctl restart nginx
service nginx restart

12. SSL/TLS 인증서와 그 정확성을 확인하려면 다음 링크를 방문하세요.

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

13. 서버가 약한 DH 키 교환을 지원하고 전체 등급이 B 등급이라는 알림을 받은 경우 새 /etc/nginx/ssl/ 디렉토리에 있는 Strong>Diffie-Hellman 암호를 사용하여 다음 명령을 실행하여 Logjam 공격으로부터 서버를 보호하세요.

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

이 예에서는 4096 비트 키를 사용했는데, 이는 실제로 생성하는 데 오랜 시간이 걸리고 서버와 SSL 핸드셰이크에 추가 오버헤드를 발생시킵니다.

이렇게 오랫동안 키를 사용할 명시적인 필요가 없고 편집증에 빠지지 않는 경우 2048 비트 키를 사용하는 것이 안전합니다.

14. DH 키가 생성된 후 Nginx 구성 파일을 열고 ssl_ciphers 줄 뒤에 아래 명령문을 추가하여 DH 키와 도메인의 보안 수준을 A+ 등급으로 높이세요.

vi /etc/nginx/nginx.conf

Nginx.conf에 다음 블록 발췌문을 추가합니다.

ssl_dhparam /etc/nginx/ssl/dhparams.pem;
ssl_session_timeout 30m;
ssl_session_cache shared:SSL:10m;
ssl_buffer_size 8k;
add_header Strict-Transport-Security max-age=31536000;

15. 위에 언급된 링크에서 이전 결과 캐시를 지워 변경 사항을 적용하고 SSL 인증서를 다시 테스트하려면 Nginx 서비스를 다시 시작하세요.

systemctl restart nginx
service nginx restart

5단계: Nginx 무료 자동 갱신으로 SSL 인증서 암호화 가능

16. Let's Encrypt CA90일 동안 유효한 무료 SSL/TLS 인증서를 출시합니다. 아래 명령을 실행하면 웹 서버를 중지하지 않고 webroot 플러그인을 사용하여 인증서가 만료되기 전에 수동으로 갱신하고 적용할 수 있습니다.


certbot --nginx -d example.com -d www.example.com
systemctl reload nginx

위 명령을 실행할 때 example.com을 도메인과 일치하도록 바꿔야 합니다.

17. 인증서가 만료되기 전에 자동 갱신하려면 기존 crontab 파일에 cron 작업을 생성하세요.


crontab -e

인증서 만료를 확인하고 갱신하기 위해 매일 정오에 실행되는 다음 cron 작업을 파일 하단에 추가합니다. --quiet 옵션은 certbot이 출력을 생성하지 않도록 지시합니다.


0 12 * * * /usr/bin/certbot renew --quiet

그게 다야! 이제 Nginx 서버는 무료 SSL/TLS Let's Encrypt 인증서를 사용하여 웹사이트에 안전한 웹 콘텐츠를 제공할 수 있습니다.