1. HTTPS 설정 환경
Let’s Encrypt와 Cloudflare를 함께 사용하여 HTTPS 연결을 설정할 수 있다
1) Let’s Encrypt
Let’s Encrypt는 무료로 SSL/TLS 인증서를 발급하는 인증 기관입니다. Ubuntu 시스템에서 Let’s Encrypt를 사용하면 웹 서버에 안전한 HTTPS 연결을 제공할 수 있습니다.
- 무료: Let’s Encrypt는 무료로 사용할 수 있는 공개 프로젝트입니다. 따라서 비용 문제 없이 SSL/TLS 인증서를 발급받을 수 있습니다.
- 자동화: Let’s Encrypt는 인증서 발급 및 갱신 프로세스를 자동화하여 편리하게 사용할 수 있도록 지원합니다. 이는 일반적으로 명령어 한 줄을 입력하는 것만으로 인증서를 발급하고 갱신할 수 있다는 의미입니다.
- 보안: Let’s Encrypt는 모든 연결에 대해 암호화된 HTTPS 연결을 제공함으로써 보안을 강화합니다. 이를 통해 사용자의 데이터와 개인 정보를 안전하게 보호할 수 있습니다.
2) Cloudflare.com
Cloudflare는 웹 보안 및 성능 최적화 서비스를 제공하는 회사입니다. 이 회사는 웹사이트의 속도, 보안 및 가용성을 향상시키기 위해 글로벌 네트워크를 통해 트래픽을 라우팅하고, 악성 행위로부터 보호하며, 웹 콘텐츠를 압축 및 최적화하는 기능을 갖추고 있습니다.
Cloudflare의 주요 기능은 다음과 같습니다
- CDN (Content Delivery Network): Cloudflare의 글로벌 네트워크를 통해 사용자들이 웹사이트에 더 빠르게 접근할 수 있도록 도와줍니다.
- 웹 방화벽: DDoS 공격, SQL 인젝션 등과 같은 악성 행위로부터 보호하기 위한 방화벽을 제공합니다.
- SSL/TLS 암호화: SSL/TLS 인증서를 사용하여 웹사이트를 안전하게 전송합니다.
- 성능 최적화: 캐싱, 이미지 최적화, 자바스크립트 최소화 등의 기술을 사용하여 웹사이트의 로딩 속도를 개선합니다.
Cloudflare의 장점
- 높은 가용성: Cloudflare는 글로벌 네트워크를 통해 트래픽을 분산시키므로 웹사이트의 가용성이 향상됩니다.
- 보안 강화: DDoS 공격 및 다른 악성 행위로부터 보호하기 위한 강력한 웹 방화벽을 제공합니다.
- 성능 개선: 캐싱 및 최적화 기술을 사용하여 웹사이트의 로딩 속도를 개선합니다.
2. Let’s Encrypy 패키지 설치 및 설정
1) Let’s Encrypt 설치
Certbot 설치: Certbot은 Let’s Encrypt의 공식 클라이언트로, 인증서 발급 및 관리에 필요한 도구입니다.
다음 명령어로 Certbot을 설치합니다
sudo apt update
sudo apt install certbot
python3-certbot-dns-cloudflare 패키지는 Certbot의 DNS-01 도메인 검증 방식을 사용하여 클라우드플레어(DNS 제공 업체) DNS 서버에 도메인 레코드를 자동으로 추가하고 관리하는 기능을 제공하며 다음 순서에 따라 작동합니다.
- Certbot은 도메인의 소유자임을 확인하기 위해 클라우드플레어 DNS 서버에 특정한 TXT 레코드를 추가하도록 요청합니다.
- python3-certbot-dns-cloudflare 패키지는 클라우드플레어 API를 사용하여 인증된 사용자 계정으로 로그인합니다.
- 패키지는 Certbot으로부터 전달받은 인증 요청 정보를 기반으로 클라우드플레어 DNS 서버에 TXT 레코드를 추가합니다.
- Certbot은 클라우드플레어 DNS 서버에 레코드가 반영되었는지 확인합니다.
- 인증이 성공적으로 완료되면 Certbot은 SSL/TLS 인증서를 발급받아 사용자가 지정한 경로로 저장합니다.
다음 코드를 실행하여 python3-certbot-dns-cloudflare 를 설치합니다.
sudo apt install python3-certbot-dns-cloudflare
2) Cloudflare API 키 생성
- Cloudflare 계정으로 로그인하고, “My Profile”로 이동합니다.
- “API Tokens” 섹션으로 이동하고, “Create Token” 버튼을 클릭합니다.
- “Use Template” 섹션에서 “Edit Zone DNS” 템플릿을 선택합니다.
- Zone에 대한 액세스를 선택한 후, “Continue to Summary” 버튼을 클릭합니다.
- Token 이름을 지정하고, 생성된 토큰 값을 안전한 곳에 저장합니다.
3) API Token 저장
/root/.secrets/certbot
디렉토리를 생성합니다.
/root/.secrets/certbot/cloudflare.ini
파일을 생성합니다.
sudo mkdir /root/.secrets/certbot
sudo nano /root/.secrets/certbot/cloudflare.ini
cloudflare.ini에 cloudflare 에서 확인한 token을 입력합니다.
dns_cloudflare_email = cloudflare에_등록된_이메일
dns_cloudflare_api_key = YOUR_CLOUDFLARE_API_TOKEN
example.com
을 자신의 도메인으로 변경해야 합니다./root/.secrets/certbot/cloudflare.ini
는 아래와 같은 내용으로 생성되어야 합니다
생성된 폴더와 파일의 권한을 변경합니다.
sudo chmod 0700 /root/.secrets/certbot
sudo chmod 0400 /root/.secrets/certbot/cloudflare.ini
3. 인증서 발급
1) 인증서 발급 코드
인증서 발급을 원하는 도메인을 입력합니다. 여기서 서브 도메인을 인증한다면 서브 도메인을 입력합니다.
sudo certbot certonly --dns-cloudflare --preferred-challenges dns-01 --dns-cloudflare-propagation-seconds 20 --dns-cloudflare-credentials /root/.secrets/certbot/cloudflare.ini -d example.com
Enter email address (used for urgent renewal and security notices) (Enter ‘c’ to cancel): 자신의 이메일 주소를 입력합니다.(취소하려면 c)
2) 코드 설명
위의 코드는 Certbot을 사용하여 example.com 도메인에 대한 인증서를 생성하는 명령어입니다.
certbot
: Certbot 도구를 실행합니다.certonly
: 인증서만 생성하고 웹 서버와 연결하지 않습니다. (인증서 발급만 수행)--dns-cloudflare
: Cloudflare DNS에 대한 도메인 확인을 통해 인증서를 발급합니다.--preferred-challenges dns-01
: DNS 기반의 도메인 확인 방식 중 하나인 dns-01을 사용합니다.--dns-cloudflare-propagation-seconds 20
: Cloudflare DNS 업데이트가 완료되기까지 기다리는 시간(초)입니다. 여기에서는 20초로 설정되어 있습니다.--dns-cloudflare-credentials /root/.secrets/certbot/certbot-cloudflare.ini
: Cloudflare API에 액세스하기 위한 인증 정보가 포함된 파일의 경로입니다. 여기에서는/root/.secrets/certbot/cloudflare.ini
파일을 사용합니다.-d example.com
: 인증서를 발급할 도메인 이름으로, 여기에서는 example.com이 사용됩니다.
2) 발급 확인
발급된 인증서는 /etc/letsencrypt/live 하위의 도메인 폴더에 생성됩니다.
총 4개의 파일(cert.pem, chain.pem, fullchain.pem, privkey.pem)이 생성됩니다
4. 추가 학습 자료
Let’s Encrypt와 Certbot의 공식 문서 및 참고 자료 링크입니다
- Let’s Encrypt 공식 문서: https://letsencrypt.org/docs/
- Certbot 공식 문서: https://certbot.eff.org/docs/
- Certbot GitHub 페이지: https://github.com/certbot/certbot
- EFF(Electronic Frontier Foundation) Certbot 레포지토리: https://github.com/efforg/certbot
- Certbot 사용자 포럼: https://community.letsencrypt.org/c/help/certbot/
- Certbot 사용자 가이드: https://certbot.eff.org/instructions