AWS EC2 인스턴스에서 워드프레스 사이트를 위한 HTTPS 설정 방법

워드프레스 사이트를 운영하면서 HTTPS는 보안과 SEO 측면에서 필수적인 설정입니다. 이 보안 설정이 안 된 상태에서 유저가 접속을 시도하면 웹사이트는 무서운 말로 유저를 위협합니다. 만약 AWS EC2 인스턴스를 사용하시며 맥북을 사용하고 계신다면, 이 글을 읽고 SSL/TLS 인증서로 보호하시고 안정적인 트래픽을 확보하시기 바랍니다.

사전 확인 사항 :

  • 인스턴스에 WordPress Certified by Bitnami and Automattic 등 AMI로 설치 완료된 상태.
  • 인스턴스를 설치하면 얻은 프라이빗 키(.pem)가 필요.
  • 구매한 도메인을 Route 53에 정상 등록된 상태.
  • 튜토리얼 진행 운영체제는 맥북입니다.
    • 하지만 윈도우 상태에서도 크게 다를 바는 없다고 생각합니다. 한번 읽어보시고 원도우에 적용하는 방법을 추가 검색하시면 이해가 빠르실 겁니다.

다시 말씀드리지만, 이 글은 워드프레스 설치와 도메인이 연결이 완료되었다는 것을 전제로 해요. 자신의 도메인으로 접속은 되지만, https 설정이 안 된 분만 따라 하시면 됩니다.

만약 워드프레스 설치와 도메인 연결이 궁금하시면 해당 튜토리얼도 작성해보도록 하겠습니다.

아마존 웹 서비스에 워드프레스 설치하기 튜토리얼(작성중 🥲)

aws route53 도메인 연결하기 튜토리얼(만드는 중 😭)


1단계 : AWS EC2 인스턴스에 연결

  • EC2 인스턴스의 퍼블릭 IP 찾기:
  • 개인 키 파일을 챙겨두세요.
    • EC2 인스턴스를 생성할 때 다운로드한 .pem 파일입니다.
  • 키 파일에 대한 올바른 권한을 설정하세요.
    • MacBook에서 터미널을 엽니다.
      • 터미널(Linux/Mac) 또는 PuTTY(Windows)와 같은 SSH 클라이언트를 사용하여 연결하세요. 맥에서는 스포트라이트를 켜고 터미널이라고 검색하면 검정색 위협적인 화면이 나옵니다.
    • chmod 400 /path/to/your-key.pem 명령을 실행하세요.
    • /path/to/your-key.pem을 .pem 파일의 실제 경로로 바꾸세요.
      • 맥북에서 파일 주소가 꼬일 때가 있습니다. (.pem) 파일 경로가 이상하다고 나온다면 바탕화면으로 파일을 옮기고, 맥북 옵션버튼을 누른 채 파일을 우클릭하면 파일 주소 복사가 가능합니다.
  • SSH를 통해 인스턴스에 연결:
    • 터미널에 ssh -i /path/to/your-key.pem ec2-user@your-instance-public-ip를 입력하세요.
    • /path/to/your-key.pem을 키 파일 경로로 바꾸고 your-instance-public-ip를 인스턴스의 퍼블릭 IP 주소로 바꿉니다.
    • ec2-user@ 부분도 변경해야 합니다. 인스턴스가 Bitnami AMI가 아닌 다른 AMI 기반으로 하는 경우 다를 수 있습니다(예: Ubuntu AMI의 ‘ubuntu’).
1) chmod 400 /path/to/your-key.pem
2) ssh -i /path/to/your-key.pem bitnami@your-instance-public-ip

* /path/to/your-key.pem = 진짜 파일 주소로 변경
* bitnami 부분은 AMI따라서 다를 수 있습니다. 구글검색 GO!
AWS EC2 인스턴스 정상 연결

이런 화면이 마지막 줄이 나오면 인스턴스에 연결이 된 것입니다. 저는 bitnami AMI를 사용했기 때문에 bitnami@~~ 로 나온 것을 확인할 수 있습니다.


2단계 : Bitnami HTTPS 구성 도구 실행

인스턴스에 연결된 후, Bitnami 구성 도구를 사용하여 도메인에 대한 Let’s Encrypt 인증서를 자동으로 발급하고 구성하겠습니다.

sudo /opt/bitnami/bncert-tool

위 명령어를 입력하고 엔터!

Domain list를 입력하라고 나옵니다.

Welcome to the Bitnami HTTPS Configuration tool.

---------------------------------------------------
Domains

Please provide a valid space-separated list of domains for which you wish to 
configure your web server.

Domain list []: 여기에 도메인을 입력해주세요. 엔터
Press [Enter] to continue: 엔터

도메인 리스트에는 “www.”있는 도메인과 없는 도메인 둘다 적어도 괜찮습니다.

예) ai-curator.com, www.ai-curator.com

Enable HTTP to HTTPS redirection [Y/n]: 

HTTP에서 접속한 유저를 HTTPS로 보내기를 사용하겠냐고 물어봅니다. Yes!!!!

이제 www에 대한 리다이렉션 관련 질문을 두번 할 것입니다.

1) Enable non-www to www redirection [Y/n]:
2) Enable www to non-www redirection [Y/n]:
  1. “www”가 없는 도메인. 즉, ai-curator.com으로 유저가 접속했다면 www.ai-curator.com 이 주소로 보내기를 할 것인지 묻습니다.
  2. 반대로 www.ai-curator.com으로 접속한 유저를 ai-curator.com 주소로 넘겨줄 것인지 묻습니다.

요즘에 큰 기업들을 보면 “www”가 없는 도메인을 메인으로 사용하길래 저도 따라서 했습니다. 무엇이 좋은지는 저도 잘…(openAI 홈페이지도 없더군요.)

그래서 1번 질문에는 NO!, 2번 질문에는 YES!

💡둘 다 YES를 한다면, 무한 루프에 빠지게 됩니다. 1번은 2번으로 보내고, 2번은 1번으로 보내고…♾️ 그러니까 한 개만 YES 해서 일방통행으로 보내주어야 합니다.

Changes to perform

The following changes will be performed to your Bitnami installation:

1. Stop web server
2. Configure web server to use an existing Let's Encrypt certificate and renew: 
/opt/bitnami/letsencrypt/certificates/ai-curator.com.crt
3. Configure a cron job to automatically renew the certificate each month
4. Configure web server name to: ai-curator.com
5. Enable HTTP to HTTPS redirection (example: redirect http://ai-curator.com to 
https://ai-curator.com)
6. Enable www to non-www redirection (example: redirect www.ai-curator.com to 
ai-curator.com)
7. Start web server once all changes have been performed

Do you agree to these changes? [Y/n]: 

지금까지 설정한 것을 재차 확인하고 다음과 같은 작업이 진행될 것이라고 알려줍니다.

  1. 웹 서버 중지
  2. 기존 Let’s Encrypt 인증서를 사용하도록 웹 서버를 구성하고 갱신합니다:
    /opt/bitnami/letsencrypt/certificates/ai-curator.com.crt
  3. 매월 인증서를 자동으로 갱신하도록 크론 작업을 구성합니다.
  4. 웹 서버 이름을 다음과 같이 구성: ai-curator.com
  5. HTTP에서 HTTPS로 리디렉션을 사용하도록 설정합니다(예: http://ai-curator.com 을 다음으로 리디렉션 https://ai-curator.com)
  6. 웹에서 비 웹으로의 리디렉션 활성화(예: www.ai-curator.com 를 ai-curator.com)
  7. 모든 변경이 완료되면 웹 서버를 시작합니다.

이러한 변경 사항에 동의하십니까? [예/아니요]: YES!!

Create a free HTTPS certificate with Let's Encrypt

Please provide a valid e-mail address for which to associate your Let's Encrypt 
certificate.

Domain list: ai-curator.com www.ai-curator.com

Server name: ai-curator.com

E-mail address []: 이메일 주소 입력!

Let’s Encrypt로 무료 HTTPS 인증서를 만든다고 이메일 주소를 입력하라고 합니다.

The Let's Encrypt Subscriber Agreement can be found at:

https://letsencrypt.org/documents/LE-SA-v1.3-September-21-2022.pdf

Do you agree to the Let's Encrypt Subscriber Agreement? [Y/n]: YES!

여기서 “Subscriber Agreement”에 대한 동의를 묻는 것은 Let’s Encrypt의 서비스 이용 약관에 대한 동의를 의미합니다. YES!

이제 조금 기다리면, Success! 설치 성공 메세지가 나옵니다. 이런 저런 백업파일의 주소와 로그 파일을 확일할 수 있는 주소를 알려주며 설정을 마쳤다고 합니다.

Press [Enter] to continue: 엔터를 누르면 완전히 완료입니다. 이제 터미널을 끄거나 exit을 입력해서 설정에서 로그아웃하고 종료합니다.


3단계 : SSL 인증서 테스트

SSL Labs의 SSL 테스트와 같은 온라인 서비스를 사용하여 웹사이트의 SSL 인증서 설치에 문제가 없는지 확인하세요.

1
2

이제 워드프레스 사이트를 HTTPS로 보호하여 방문자와 검색 엔진에 더 신뢰할 수 있는 사이트로 만들었습니다. 사이트의 보안을 유지하기 위해 정기적으로 SSL 인증서를 확인하고 필요에 따라 갱신이 필요하다고 합니다.

A+가 아니고 A로 나오는 이유는 Certificate #1 하단에 DNS CAA: No 라고 나와있을 겁니다.

여기서 “DNS CAA: No” 메시지는 도메인의 DNS 설정에 CAA 레코드가 설정되어 있지 않다는 것을 의미합니다. 하지만 이것은 필수 사항은 아니며 대부분의 도메인에 대해 기본적으로 설정되어 있지 않습니다. CAA 레코드가 없다고 해서 SSL/TLS 인증서에 문제가 있는 것은 아닙니다. 안심하셔도 됩니다.

만약 사용하시는 도메인 업체가 CAA 레코드 추가 기능이 없다면 다른 서비스(예: Cloudflare, Amazon Route 53 등)로 DNS 관리 권한을 이전할 수 있습니다. 이러한 서비스들은 대부분 CAA 레코드를 포함한 다양한 DNS 레코드 유형을 지원합니다.

CAA 레코드는 선택적인 보안 기능이므로, 사용하시는 도메인 업체에서 지원하지 않는다면 꼭 필요한 설정은 아니지만, 보안을 강화하고자 할 때 고려해 볼 수 있는 옵션입니다.


결론 : 몸이 편하려면 비용을 지불해야 한다.

AWS 초보자인 제가 설치를 잘못해서 SSL 및 HTTPS 이슈가 생긴 것일 수도 있습니다만 일단 위와 같은 방법으로 해결하였습니다.

기존의 호스팅 업체들과 비교했을 때, 워드프레스 로그인 화면까지 도달하는 과정이 쉽지는 않았고, 생각지도 못한 HTTPS 이슈를 해결하느라 고생 좀 했습니다.

이런 이유로 국내에서는 많은 분들이 비용이 들지만 클라우드웨이즈나 벌쳐와 같이 손쉽게 사용할 수 있는 호스팅 서비스를 선호하시는 것 같습니다. 아 물론 아마존도 12개월 프리티어 기간이 지나면 유료로 전환되어 비용이 발생됩니다. 나중에는 결국 둘 다 비용이 청구되겠죠.

기존 카페24를 사용하다가 현재 ai-curator.com은 처음으로 아마존의 웹서비스 EC2를 사용하였습니다. 처음 사용하며 겪은 이슈는 한두 개가 아니었습니다. 아마존 워드프레스 설치에 대한 정보도 많이 없고 해결하기 위해 걸린 시간도 적지 않게 소요됐습니다. AWS EC2 워드프레스 설치 가이드

이슈를 해결해 가면서도 관리형 호스팅 서비스(카페24, 클라우즈웨이즈, 벌쳐 등)를 사용하는 것도 몸과 마음에 유익할 것는 생각이 들었습니다. 몸이 편하려면 비용을 지불해야한다는 법칙을 체감하는 시간이었습니다.

HTTPS 설정은 웹사이트 데이터를 보호하고 SEO 순위를 개선하는 필수요소입니다. 비용이 들지만 손쉽게 사용할 수 있는 호스팅 서비스가 있습니다. 그래도 AWS 호스팅을 사용하겠다고 하신다면 공식문서를 참고하시면 큰 도움이 될 거에요.