웹사이트의 보안을 강화하기 위해 SSL/TLS 인증서를 사용하는 것은 필수적입니다. Certbot은 Let's Encrypt 인증서를 자동으로 발급 및 갱신해주는 도구로, 이를 통해 간편하게 웹사이트의 HTTPS를 설정할 수 있습니다. 이번 글에서는 Certbot의 개념과 정의, 사용 이유, 작동 원리, 그리고 RHEL에서 Certbot을 사용하여 SSL/TLS 인증서를 적용하는 방법을 자세히 알아보겠습니다.
Certbot이란?
Certbot은 EFF(Electronic Frontier Foundation)에서 개발한 오픈 소스 소프트웨어로, Let's Encrypt 인증서를 자동으로 발급하고 갱신해주는 도구입니다. Let's Encrypt는 무료로 SSL/TLS 인증서를 발급해주는 인증 기관(CA)입니다.
왜 사용하는가?
언제 사용하는가?
Certbot은 다음과 같은 과정을 통해 SSL/TLS 인증서를 발급합니다:
1. 도메인 소유권 확인: Certbot은 도메인 소유권을 확인하기 위해 HTTP-01 챌린지(웹 서버에 특정 파일 업로드) 또는 DNS-01 챌린지(도메인에 특정 TXT 레코드 추가) 방법을 사용합니다.
2. 인증서 발급: 도메인 소유권이 확인되면 Let's Encrypt가 SSL/TLS 인증서를 발급합니다.
3. 인증서 설치: Certbot은 인증서를 웹 서버에 자동으로 설치합니다.
4. 자동 갱신: Certbot은 인증서의 유효 기간이 만료되기 전에 자동으로 갱신합니다.
먼저 EPEL(Extra Packages for Enterprise Linux) 저장소를 활성화합니다:
sudo yum install epel-release
그 다음 Certbot을 설치합니다:
sudo yum install certbot python3-certbot-apache
Apache 웹 서버가 설치되고 구동 중인지 확인합니다. 다음 명령어를 사용하여 Apache를 설치하고 시작합니다:
sudo yum install httpd
sudo systemctl start httpd
sudo systemctl enable httpd
Certbot을 실행하여 SSL 인증서를 발급하고 Apache에 설치합니다:
sudo certbot --apache
이 명령을 실행하면 Certbot이 대화형으로 도메인 이름과 이메일 주소(예: admin@example.com) 등을 물어보고, 자동으로 인증서를 발급하여 Apache 서버에 설치합니다.
Certbot은 자동으로 갱신 작업을 설정합니다. 이를 확인하려면 다음 명령을 실행하여 cron 작업이 올바르게 설정되었는지 확인합니다:
sudo systemctl status certbot.timer
또한 수동으로 갱신을 테스트하려면 다음 명령을 사용합니다:
sudo certbot renew --dry-run
Certbot이 Apache 설정 파일을 자동으로 업데이트했는지 확인하려면, 다음 파일을 확인합니다:
sudo vi /etc/httpd/conf.d/ssl.conf
또는 VirtualHost 설정 파일을 확인할 수도 있습니다:
Apache의 SSL/TLS 설정 파일은 HTTPS를 통해 안전한 연결을 제공하기 위해 설정됩니다. 여기에서는 VirtualHost 블록 안의 각 설정 항목에 대해 자세히 설명합니다.
<VirtualHost *:443>
ServerAdmin admin@example.com
DocumentRoot /var/www/html
ServerName example.com
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/example.com/chain.pem
<Directory /var/www/html>
AllowOverride All
</Directory>
</VirtualHost>
<VirtualHost *:443>
ServerAdmin admin@example.com
DocumentRoot /var/www/html
ServerName example.com
example.com.SSLEngine on
on으로 설정합니다.SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
/etc/letsencrypt/live/example.com/fullchain.pem.SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
/etc/letsencrypt/live/example.com/privkey.pem.SSLCertificateChainFile /etc/letsencrypt/live/example.com/chain.pem
/etc/letsencrypt/live/example.com/chain.pem.<Directory /var/www/html>
AllowOverride All
.htaccess 파일을 사용하여 디렉토리 설정을 덮어쓸 수 있도록 허용합니다..htaccess 파일을 통해 추가적인 설정을 적용할 수 있습니다..htaccess 파일을 사용하려면 All로 설정합니다. 필요에 따라 다른 옵션을 사용할 수 있습니다.이 설정 파일은 Apache 웹 서버에서 SSL/TLS를 통해 HTTPS 연결을 설정하는 방법을 정의합니다. 각 설정 항목은 특정 목적을 가지고 있으며, 웹 사이트의 보안과 기능을 보장하는 데 중요한 역할을 합니다. 올바르게 설정하면 웹 서버는 클라이언트와의 모든 통신을 안전하게 암호화할 수 있습니다.
모든 설정이 완료되면 Apache를 재시작하여 변경 사항을 적용합니다:
sudo systemctl restart httpd
루트 도메인과 서브도메인 차이
example.com: 루트 도메인www.example.com: 서브도메인각각 별도로 인증서를 발급받아야 할 수 있으며, 동일한 웹 사이트를 가리키도록 설정하지 않으면 각각 다른 인증서가 필요할 수 있습니다.
인증 오류 원인 및 해결 방법
1. DNS 설정 문제: 도메인이 올바르게 웹 서버를 가리키는지 확인합니다.
2. 방화벽 설정: 80번 포트(HTTP)와 443번 포트(HTTPS)가 열려 있는지 확인합니다.
3. 웹 서버 설정 문제: Apache 또는 Nginx 설정 파일이 올바르게 구성되었는지 확인합니다.
4. 파일 접근 권한 문제: Certbot이 웹 서버의 루트 디렉토리에 파일을 생성할 수 있는지 확인합니다.
5. HTTP-01 챌린지 실패: Certbot이 생성한 파일에 접근할 수 있는지 확인합니다.
6. DNS-01 챌린지 실패: 도메인의 DNS 설정에 올바른 TXT 레코드를 추가합니다.
Certbot을 활용하면 무료로 SSL/TLS 인증서를 손쉽게 발급받고 웹 서버에 적용할 수 있습니다. 이를 통해 웹사이트의 보안을 강화하고 HTTPS를 통해 안전한 사용자 경험을 제공할 수 있습니다.