소개
Let’s Encrypt는 무료의 TLS/SSL 인증서를 취득하고 설치하는 데 도움을 주는 인증 기관(CA)입니다. 이를 통해 웹 서버에서 암호화된 HTTPS를 활성화할 수 있습니다. 이는 소프트웨어 클라이언트인 Certbot를 제공하여 필요한 대부분(아니면 모든) 단계를 자동화하려고 시도함으로써 절차를 간소화합니다. 현재, 인증서 취득 및 설치의 전체 과정은 Apache와 Nginx 모두에서 완전히 자동화되어 있습니다.
이 가이드에서는 Certbot를 사용하여 Ubuntu에서 Apache용 무료 SSL 인증서를 취득하고 이 인증서가 자동으로 갱신되도록 설정하는 방법을 설명합니다.
이 튜토리얼에서는 Let’s Encrypt가 보안하는 웹사이트를 설정하기 위해 Apache의 기본 구성 파일 대신 별도의 가상 호스트 파일을 사용합니다. 우리는 서버에서 호스팅되는 각 도메인에 대해 새로운 Apache 가상 호스트 파일을 생성하는 것을 권장합니다. 이는 일반적인 실수를 피하고 기본 구성 파일을 대체 설정으로 유지하는 데 도움이 됩니다.
Ubuntu에서 Let’s Encrypt로 Apache 보안 설정 방법
사전 조건
이 튜토리얼을 따라가시려면 다음이 필요합니다:
-
Ubuntu 서버 하나를 설정해야 합니다. 이 서버는 root 사용자가 아니라
sudo
관리자 권한을 가진 사용자와 방화벽이 활성화된 상태여야 합니다. 이를 설정하려면 저희 Ubuntu 초기 서버 설정 튜토리얼을 따라가시면 됩니다. -
완전히 등록된 도메인 이름 하나. 이 튜토리얼에서는 your_domain을 예시로 사용하겠습니다. 도메인 이름은 Namecheap에서 구매하시거나, Freenom에서 무료로 얻으시거나, 자신의 선택에 따라 도메인 등록자를 사용하실 수 있습니다.
-
서버에 설정되어야 할 다음 두 개의 DNS 레코드를 확인하세요. 어떻게 추가할 수 있는지에 대한 자세한 내용은 DigitalOcean DNS 안내를 참조하실 수 있습니다.
your_domain
이(가) 서버의 공인 IP 주소로 가리키는 A 레코드。www.your_domain
이(가) 서버의 공인 IP 주소로 가리키는 A 레코드。
-
Apache는 Ubuntu에 Apache 설치 방법에 따라 설치되었습니다. 도메인에 대한 가상 호스트 파일이 있음을 확인하세요. 이 자습서では
/etc/apache2/sites-available/your_domain.conf
를 예시로 사용합니다.
단계 1 — Certbot 설치
Let’s Encrypt로 SSL 인증서를 받으려면 서버에 Certbot 소프트웨어를 설치해야 합니다. 이를 위해 기본 Ubuntu 패키지 저장소를 사용하겠습니다.
먼저, 로컬 패키지 인덱스를 업데이트하세요:
두 가지 패키지가 필요합니다: certbot
와 python3-certbot-apache
.后者는 Certbot를 Apache와 통합하는 플러그인으로, 하나의 명령어로 인증서를 받고 웹 서버에서 HTTPS를 구성할 수 있게 합니다:
설치를 확인하려면 Y
를 누르고, 그 다음에 ENTER
를 누릅니다.
Certbot는 이제 서버에 설치되었습니다. 다음 단계에서는 Apache의 구성을 확인하여 가상 호스트가 적절하게 설정되었는지 확인하겠습니다. 이 작업은 certbot
클라이언트 스크립트가 도메인을 감지하고 새로 생성된 SSL 인증서를 자동으로 사용하도록 웹 서버를 재구성할 수 있도록 보장합니다.
단계 2 — Apache 가상 호스트 구성 확인
웹 서버에 대한 SSL을 자동으로 확보하고 구성하려면, Certbot는 Apache 구성 파일에서 정확한 가상 호스트를 찾아야 합니다. 서버 도메인 이름은 ServerName
및 ServerAlias
지시자에 정의된 VirtualHost
구성 블록에서 검색됩니다.
만약 Apache 설치 튜토리얼의 가상 호스트 설정 단계를 따랐다면, 도메인에 대한 VirtualHost 블록이 /etc/apache2/sites-available/your_domain.conf
에 설정되어 있어야 하며, ServerName
및 ServerAlias
지시자가 이미 적절하게 설정되어 있어야 합니다.
이 설정이 잘 되어 있는지 확인하려면, nano
또는 기호하는 텍스트 편집기를 사용하여 도메인의 가상 호스트 파일을 엽니다:
기존의 ServerName
와 ServerAlias
줄을 찾아보세요. 다음과 같이 나열되어야 합니다:
...
ServerName your_domain
ServerAlias www.your_domain
...
만약 ServerName
과 ServerAlias
이 이미 이렇게 설정되어 있다면, 텍스트 편집기를 닫고 다음 단계로 넘어가세요. 현재 가상 호스트 구성이 예시와 일치하지 않는다면, 적절히 업데이트하세요. nano
를 사용하고 있다면, CTRL+X
를 눌러 나가고, Y
를 누르고 ENTER
를 눌러 변경 사항을 확인하세요. 그런 다음, 변경 사항을 검증하기 위해 다음 명령어를 실행하세요:
Syntax OK
라는 응답을 받아야 합니다. 오류가 발생하면 가상 호스트 파일을 다시 열고 타이포나 빠진 문자가 있는지 확인하세요. 구성 파일의 문법이 올바르면, 변경 사항을 적용하기 위해 Apache를 다시 로드하세요:
이러한 변경으로 인해 Certbot는 올바른 VirtualHost 블록을 찾아서 업데이트할 수 있습니다.
다음으로, HTTPS 트래픽을 허용하기 위해 방화벽을 업데이트하겠습니다.
Step 3 — 방화벽을 통해 HTTPS 트래픽 허용
필수 가이드에 따라 권장된 대로 UFW 방화벽을 활성화했다면, HTTPS 트래픽을 허용하기 위해 설정을 조정해야 합니다. 설치 후, Apache는 몇 가지 다른 UFW 애플리케이션 프로필을 등록합니다. Apache Full 프로필을 활용하여 서버에서 HTTP과 HTTPS 트래픽을 모두 허용할 수 있습니다.
현재 서버에서 허용된 트래픽 종류를 확인하려면 상태를 확인하세요:
우리의 Apache 설치 가이드 중 하나를 따라서 설치했다면, 다음과 비슷한 출력이 나타나며, 현재 포트 80
에서만 HTTP 트래픽이 허용된다는 의미입니다:
OutputStatus: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Apache ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Apache (v6) ALLOW Anywhere (v6)
HTTPS 트래픽을 허용하려면, “Apache Full” 프로필을 허용하세요:
그런 다음, 불필요한 “Apache” 프로필을 삭제하세요:
상태는 다음과 같이 표시될 것입니다:
OutputStatus: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Apache Full ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Apache Full (v6) ALLOW Anywhere (v6)
이제 Certbot를 실행하여 인증서를 취득할 준비가 되었습니다.
단계 4 — SSL 인증서 취득
Certbot는 플러그인을 통해 SSL 인증서를 취득할 수 있는 다양한 방법을 제공합니다. Apache 플러그인은 필요할 때마다 Apache를 재구성하고 구성을 다시 불러오는 데 책임을 지ます. 이 플러그인을 사용하려면, 다음을 실행하세요:
이 스크립트는 SSL 인증서를 구성하기 위해 일련의 질문에 답해야 합니다. 먼저, 유효한 이메일 주소를 요청합니다. 이 이메일은 갱신 알림과 보안 알림에 사용됩니다:
OutputSaving debug log to /var/log/letsencrypt/letsencrypt.log
Enter email address (used for urgent renewal and security notices)
(Enter 'c' to cancel): you@your_domain
유효한 이메일 주소를 제공한 후, ENTER
키를 눌러 다음 단계로 이동하세요. 그런 다음, Let’s Encrypt 서비스 약관에 동의하는지 확인하라고 프롬프트가 나타나게 됩니다. Y
를 누른 후 ENTER
키를 눌러 확인하세요:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v02.api.letsencrypt.org/directory
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: Y
다음으로, Electronic Frontier Foundation에 이메일을 공유하여 뉴스와 기타 정보를 받을 수 있도록 하는지 묻는 질문이 나올 것입니다. 그들의 콘텐츠에 구독하지 않으시려면 N
을 입력하세요. 그렇지 않으면 Y
를 입력한 후 ENTER
키를 눌러 다음 단계로 진행하세요:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about our work
encrypting the web, EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: N
다음 단계에서 Certbot에 HTTPS를 활성화하고 싶은 도메인을 알려야 합니다. 목록된 도메인 이름은 Apache 가상 호스트 구성에서 자동으로 가져오기 때문에, 가상 호스트에서 정확한 ServerName
과 ServerAlias
설정이 되어 있는지 확인하는 것이 중요합니다. 목록된 모든 도메인 이름에 HTTPS를 활성화하고 싶으시면 (推奨) 프롬프트를 빈 상태로 두고 ENTER
키를 눌러 진행할 수 있습니다. 그렇지 않으면, 활성화하고 싶은 도메인을 선택하려면 각 적절한 번호를 쉼표와/ 또는 공백으로 구분하여 나열한 후 ENTER
키를 누릅니다:
Which names would you like to activate HTTPS for?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: your_domain
2: www.your_domain
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate numbers separated by commas and/or spaces, or leave input
blank to select all options shown (Enter 'c' to cancel):
이 단계 후, Certbot의 구성이 완료되며, 새로운 인증서에 대한 최종 주석과 생성된 파일이 위치하는 곳에 대한 정보가 나올 것입니다:
OutputSuccessfully 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-07-10.
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/apache2/sites-available/your_domain-le-ssl.conf
Successfully deployed certificate for www.your_domain.com to /etc/apache2/sites-available/your_domain-le-ssl.conf
Congratulations! You have successfully enabled HTTPS on https:/your_domain and https://www.your_domain.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
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
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
이제 인증서가 Apache의 구성에 설치되고 로드되었습니다. https://
를 사용하여 웹사이트를 다시 로드하고 브라우저의 보안 인디케이터를 확인하세요. 사이트가 올바르게 보호되었는지 나타내는 보안 모양의 잠금 아이콘이 주소 표시줄에 나타나야 합니다.
SSL Labs Server Test를 사용하여 인증서의 등급을 확인하고 외부 서비스의 관점에서 자세한 정보를 얻을 수 있습니다.
다음과 마지막 단계에서는 Certbot의 자동 갱신 기능을 테스트하여 인증서가 만료 날짜 전에 자동으로 갱신되는 것을 보장합니다.
단계 5 — Certbot 자동 갱신 확인
Let’s Encrypt의 인증서는 90일 동안 유효합니다. 이는 사용자들이 인증서 갱신 과정을 자동화하도록 장려하고, 오용된 인증서나 도난당한 키가 빨리 만료되도록 보장하기 위함입니다.
설치한 certbot
패키지는 /etc/cron.d
에 포함된 갱신 스크립트를 통해 갱신을 처리하며, 이는 certbot.timer
라는 systemctl
서비스에 의해 관리됩니다. 이 스크립트는 하루에 두 번 실행되며 만료까지 30일 남은 어떤 인증서도 자동으로 갱신합니다.
이 서비스의 상태를 확인하고 활성화되어 있는지 확인하려면 다음을 실행하십시오:
출력은 다음과 유사하게 보일 것입니다:
Output● certbot.timer - Run certbot twice daily
Loaded: loaded (/lib/systemd/system/certbot.timer; enabled; vendor preset:>
Active: active (waiting) since Mon 2022-04-11 20:52:46 UTC; 4min 3s ago
Trigger: Tue 2022-04-12 00:56:55 UTC; 4h 0min left
Triggers: ● certbot.service
Apr 11 20:52:46 jammy-encrypt systemd[1]: Started Run certbot twice daily.
갱신 과정을 테스트하려면 certbot
로 Dry Run을 수행할 수 있습니다:
OutputSaving debug log to /var/log/letsencrypt/letsencrypt.log
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/your_domain.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Account registered.
Simulating renewal of an existing certificate for your_domain and www.your_domain.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations, all simulated renewals succeeded:
/etc/letsencrypt/live/your_domain/fullchain.pem (success)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
에러가 없이 끝나면 모든 설정이 완료되었습니다. 필요할 때 Certbot는 인증서를 갱신하고 Apache를 다시 로드하여 변경 사항을 적용합니다. 자동 갱신 과정이 실패할 경우 Let’s Encrypt는 지정한 이메일로 메시지를 보내 인증서가 곧 만료될 것을 경고합니다.
결론
이 튜토리얼에서는 Let’s Encrypt 클라이언트 certbot
를 설치하고, 도메인에 SSL 인증서를 구성하고 설치한 다음, systemctl
내에서 Certbot의 자동 갱신 서비스가 활성화되어 있는지 확인했습니다. Certbot 사용에 대한 추가 질문이 있으면, 그들의 문서는 시작하는 데 좋은 자료입니다.
Source:
https://www.digitalocean.com/community/tutorials/how-to-secure-apache-with-let-s-encrypt-on-ubuntu