초간단 AWS Lightsail 워드프레스에 무료 Let’s Encrypt SSL 인증서 받기

개요

언젠가부터 인터넷 브라우저를 이용하여 일부 사이트에 접속하게 되면 주소창 왼쪽에 안전하지 않음, 주의 요함이라는 문구가 뜨기 시작했다. 네이버나 다음과 같이 큰 규모의 사이트의 경우는 이러한 문구가 뜨지 않는다.

이러한 문구가 뜨는 이유는 웹브라우저를 통해 웹페이지에서 http 프로토콜이란 것을 이용한다고 한다. 그런 게 있나보다 문제는 이 http 프로토콜의 경우 암호화 돼 있지 않기 때문에 나쁜 의도를 가진 이들에게 인터넷 사용자의 비밀번호나 신용카드 정보 등이 도용될 가능성이 있게 된다.

그렇기 때문에 암호화된 https 프로토콜을 이용하면 인터넷 사용자의 정보를 보호할 수 있다. https에서 s는 안전을 뜻하는 secure의 약자라고 한다. 아무튼 https 프로토콜을 이용하여 암호화하는 방법에는 SSL 인증서를 통한 방법이 있다.

그런데 문제는 일반 사이트에서 SSL 인증서를 발급받아 암호화하는데 비용이 든다는 것이다. 세상에 공짜란 없다 네이버나 다음 등 큰 규모의 사이트가 아닌 워드프레스나 다른 방식으로 소규모 홈페이지를 구축하는 경우, 개인이 일상생활의 경험을 공유하는 블로그 형식의 사이트가 대부분일 것이다. 수익도 잘 발생하지 않는 이런 경우에 호스팅, 도메인을 포함하여 SSL 인증서 비용까지 추가된다면 운영자에게 큰 부담이 될 수밖에 없다.

SSL 인증서를 발급 받으면 좋은 점 2가지가 있다. 첫 번째는 구글 검색에서 우선적으로 검색이 노출된다. 이는 인터넷 사용자의 정보 보호를 위해 구글이 정책적으로 적용하는 것이다. 두 번째는 사이트에 방문하는 방문자들이 자물쇠 표시가 있는 사이트에 재방문할 가능성을 높여준다. 반대로 안전하지 않음, 주의 요함이라는 메시지를 본다면 실제로 불건전한 의도가 없는 사이트임에도 재방문할 가능성이 낮을 것이다.

하지만 이 SSL 인증서를 공짜로 발급 받는 방법이 있다. 다만 이 경우는 아마존 웹 서비스(AWS)를 이용하는 경우다. AWS에서는 SSL 발급을 무료로 해주고 있다. 다른 호스팅 서비스를 사용하고 있는 경우라면 그 호스팅 업체에 문의를 해보는 게 좋다.

이 글의 목적은 아마존 웹 서비스(AWS)에서 제공하는 Lightsail 워드프레스 인스턴스에 Let’s Encrypt SSL 인증서를 무료로 발급 받는 과정을 설명하는 것이다. 만약 다른 호스팅 업체를 이용하는 사용자라면 이 글이 만족스럽지 않게 느껴질 수 있을 것이다.

SSL 발급에 앞서

이 글은 AWS에서 제공하는 Tutorial: Using Let’s Encrypt SSL certificates with your WordPress instance in Amazon Lightsail(링크)라는 글과 유튜브 동영상(링크)을 토대로 작성됐다. 혹시 과정을 진행하다가 막히는 곳이 있다면 원문과 동영상을 참조하면 좋을 것이다.

Let’s Encrypt SSL 인증서를 발급 받기 위해서는 3가지의 전제 조건이 필요하다.

1. Lightsail에 워드프레스 인스턴스를 생성한다. => Lightsail에 워드프레스를 설치한다.

2. DNS 레코드를 편집하려면 도메인 이름을 등록하고 관리 액세스 권한을 얻는다. 될 수 있으면 Lightsail DNS 영역을 사용하여 도메인의 DNS 레코드를 관리하는 것이 좋다. => 쉽게 말해 Lightsail DNS 영역에서 도메인 관리하자.

3. 다음 과정을 수행하게 위해서 Lightsail 콘솔 안에 있는 브라우저 기반의 SSH 터미널을 사용한다. => 다음 과정에서 SSH 터미널을 이용하여 작업하는 것을 보게 될 것이다. 어려운 말이라고 겁먹지 말자.

이제 본격적으로 SSL을 발급 받는 과정을 설명할 것이다. 그런데 설명 도중에 너무 어려운 컴퓨터 용어가 나와도 당황하지 말고 그냥 스크린샷에 나오는 것만 따라하자. 우리의 목적은 무료로 SSL을 발급 받는 것이다. 과정을 따라가다 보면 어느새 사이트에는 HTTPS 암호화가 되어 있을 것이다.

1단계: Lightsail 인스턴스에 Certbot 설치하기

Certbot은 Let’s Encrypt에서 SSL 인증서를 요청하기 위해 사용되는 클라이언트다. 쉽게 말해 SSL 인증서를 발급 받기 위한 도우미라고 생각하자. 필자도 자세히는 모른다. 하라는 대로 하자.

1. 우선 aws Lightsail에 로그인을 한다.

2. Lightsail 홈페이지에서 SSL 인증서를 발급받기 원하는 인스턴스의 SSH 빠른 연결 아이콘을 누른다. 그림에 빨간 네모칸 안에 있는 버튼이다.

3. 그림과 같이 SSH에 연결이 된다. 그 다음엔 패키지를 업데이트 하기 위해 다음 명령어를 입력한다. 그리고 엔터를 친다.

sudo apt-get update

주의할 것은 SSH 콘솔에서는 ctrl + C, V 같은 복사, 붙여넣기 단축키가 적용되지 않는다. 이런 단축키를 누른다면 이상한 것이 실행될 것이다.

때문에 명령어를 그대로 써넣거나 아니면 우선 명령어를 ctrl + C로 복사를 한 다음에 SSH 콘솔 안에서 마우스 오른쪽 버튼을 누르고 붙여넣기를 누른다. 번거롭지만 이 방법 밖에는 없다. 앞으로 진행될 과정에서 이러한 반복 작업을 해야한다.

4. 다음으로 소프트웨어 패키지를 설치하기 위해 아래의 명령어를 입력하고 엔터를 누른다.

sudo apt-get install software-properties-common

주의) 만약 sudo apt-get install 명령어를 입력하고 Could not get lock이란 에러가 뜬다면 15분 정도 후에 다시 시도한다. 이 에러는 크론 작업(명령을 받아 자동적으로 수행되는 작업)에 의한 것일지도 모르기 때문이다.

5. 계속 진행하는지에 대한 질문 y 버튼을 누르고 엔터를 누른다.

6. 다음 명령어를 입력하고 엔터를 누른다. 다소 시간이 좀 걸릴 수 있다.

sudo apt-add-repository ppa:certbot/certbot -y

7. 업데이트를 위해 다음 명령어도 입력하고 엔터를 누른다.

sudo apt-get update -y

8. Certbot을 설치하기 위해 다음 명령어를 입력하고 엔터를 누른다.

sudo apt-get install certbot -y

이제 Certbot이 당신의 Lightsail 인스턴스에 설치가 되었다.

9. 이 SSH 터미널 브라우저창을 유지하고 다음 단계로 넘어간다.

2단계: Let’s Encrypt의 SSL 와일드카드 인증서 요청하기

Let’s Encrypt에서 인증서를 요청하는 과정을 시작한다. Certbot을 통해, 당신의 도메인과 그 도메인의 서브도메인까지 커버하는 하나의 인증서를 사용하게 하는 와일드카드 인증서를 요청한다. 예를 들어, 하나의 와일드카드 인증서는 최상위 도메인 example.com과 서브 도메인인 blog.example.com, stuff.example.com 등을 커버한다.

 

Let’s Encrypt SSL 와일드카드 인증서를 요청하기

1. 위 1단계에서 사용된 같은 SSH 터미널 브라우저창에 당신의 도메인에 대한 환경 변수를 설정하기 위한 아래의 명령어를 각각 넣고 엔터를 누른다. 당신을 인증서를 발급 받기 위해 효과적으로 명령어를 효과적으로 복사, 붙여넣기를 할 수 있다. 아래 명령어에 domain이라고 씌어 있는 부분에 당신의 등록된 도메인(인터넷 주소)을 입력한다.

DOMAIN=domain
WILDCARD=*.$DOMAIN

예들 들어, 이 사이트의 주소인 bebeyam.com을 적용하면,

DOMAIN=bebeyam.com
WILDCARD=*.$DOMAIN

2. 그 다음에 변수가 올바른 변수로 반환되는지 확인하기 위해 아래의 명령어를 입력하고 엔터를 누른다.

echo $DOMAIN && echo $WILDCARD

당신은 아래와 유사한 결과를 얻어야 한다.

3. 인터렉티브 모드에서 Certbot을 시작하기 위해 다음의 명령어를 입력하고 엔터를 누른다. 이 명령어는 도메인 소유권을 인증하기 위해 DNS 챌린지를 통해 Certbot이 수동적인 승인 방법을 사용하게 한다. 이는 당신의 서브도메인 뿐만 아니라, 최상위 도메인에 대해 와일드카드 인증서를 요청한다. => 말은 어렵지만 그냥 입력하라는 대로 입력한다.

sudo certbot -d $DOMAIN -d $WILDCARD --manual --preferred-challenges dns certonly

4. 개편되는 보안 사항들을 받아볼 수 있게 당신의 이메일 주소를 입력한다.

5. Let’s Encrypt의 서비스 사항들을 읽는다. 다 읽고 동의한다면 알파벳 a 버튼을 누르고 엔터를 누른다. 만약 동의하지 않는다면 SSL 인증서를 얻을 수 없다.

6.당신의 이메일을 공유한다는 문구와 로그되는 당신의 IP 주소에 대한 경고에 대해 응답을 한다. => 그냥 y 버튼을 눌르고 엔터를 누르면 된다.

7. Let’s Encrypt는 당신이 당신의 도메인을 가지고 있는지를 인증하라고 요구한다. 당신은 txt 레코드를 당신 도메인에 DNS 레코드에 추가하면서 인증작업을 할 것이다. TXT 레코드 값 2개 세트가 다음 그림에서처럼 주어진다.

한 번 더 엔터를 누른다.

여기에서는 엔터를 누르지 말고 그대로 유지한다.

8. Lightsail SSH 세션 브라우저를 그대로 유지한다. 나중에 다시 이 과정으로 돌아올 것이다. 이 과정의 다음 작업을 계속한다.

3단계: Lightsail에 있는 당신 도메인의 DNS 영역에 TXT 레코드들을 추가하라.

당신 도메인의 DNS 영역에 TXT 레코드를 추가하는 것은 당신이 도메인을 소유하고 있다는 것을 증명하는 것이다. 과정 설명을 위해 Lightsail DNS 영역을 사용할 것이다. 그러나 과정은 일반적으로 도메인 대행기관에 의한 호스팅 되는 다른 DNS 영역과 비슷할 수 있다.

참고) 당신의 도메인에 대한 Lightsail DNS 영역을 만드는 법을 배우기 위해서는 Creating a DNS zone to manage your domain’s DNS records in Amazon Lightsail를 참조하라.(링크)

 

Lightsail에서 당신의 도메인의 DNS 영역에 TXT 레코드를 추가하기

1. Lightsail 홈페이지에서 네트워킹 탭을 선택한다.

2. 페이지의 DNS 영역 섹션에서, 당신이 Certbot 인증서 요청에서 지정했던 도메인에 대한 DNS 영역을 선택한다.

3. DNS 영역 에디터에서 레코드 추가를 선택한다.

4. 레코드 타입 드롭 다운 메뉴에서 TXT 레코드를 선택한다.

5. Let’s Encrypt 인증서 요청에 의해 지정된 값들을 아래 그림에서 보이는 하위도메인과 응답 칸에 입력하고 엔터를 누른다.

6. 저장 버튼을 누른다.

응답 값을 복사, 붙여넣기할 때는 마우스 오른쪽 버튼을 눌러 복사를 선택한다.

7. Let’s Encrypt 인증서 요청에 의해 지정된 TXT 레코드의 2번째 세트를 추가하기 위해 3번부터 6번 단계를 반복한다.

8. Lightsail 콘솔 브라우저를 열린 채로 유지한다. 나중에 이 과정으로 다시 돌아올 것이다. 다음 과정으로 계속 진행한다.

4단계: TXT 레코드가 전송됐는지를 확인하라

인터넷 DNS에 TXT 레코드가 전송됐는지 확인하기 위해 MxToolbox 유틸리티를 사용한다. DNS 레코드 전송은 당신의 DNS 호스팅 제공자와 DNS 레코드에 대한 구성된 타임 투 리브(TTL)에 따라 약간의 시간이 걸릴 수 있다. 당신의 Certbot 인증서 요청을 계속하기 전에, 당신이 이 단계를 완성하고 당신의 TXT 레코드가 전송되는 것을 확인하는 게 중요하다. 그렇지 않으면, 당신의 인증서 요청은 실패한다.

=> 쉽게 말하면 이번 단계는 MxToolbox 홈페이지에 들어가 TXT 레코드가 잘 들어갔는지 확인하는 작업이다.

 

인터넷 DNS에 TXT 레코드가 전송됐는지 확인하기 위해서는…

1. 인터넷 브라우저 새 탭을 열어서 https://mxtoolbox.com/TXTLookup.aspx 홈페이지에 들어간다.

2. 빈칸에 다음 문자를 넣고 엔터를 누른다. domain이라고 쓰여 있는 부분에 당신의 도메인을 써 넣는다.

_acme-challenge.domain

예를 들어,

_acme-challenge.bebeyam.com

3. 확인을 위해 TXT Lookup 버튼을 누른다.

4. 만약 인터넷 DNS에 TXT 레코드가 전송되면, 당신은 다음의 화면과 유사한 결과를 확인한다. 브라우저 창을 닫고 다음 과정을 계속한다.

만약 당신의 TXT 레코드가 인터넷 DNS에 전송되지 않는다면, DNS Record not found이라는 결과가 나타날 것이다. 올바른 DNS 레코드를 당신의 도메인 DNS 영역에 추가했는지 확인하라. 만약 올바른 레코드를 추가했다면, 당신의 도메인 DNS 레코드가 전송되게 좀 더 기다렸다가 다시 TXT lookup 버튼을 눌러라.

=> 쉽게 말해, 잘 안 되면 DNS 레코드가 도메인 DNS 영역에 잘 들어갔는지 확인하고 잘 됐으면 조금만 더 기다렸다가 TXT lookup 버튼을 눌러라.

5단계: Let’s Encrypt SSL 인증서 요청 완료

다시 당신의 워드프레스 인스턴스 Lightsail SSH 터미널 화면으로 돌아가서 Let’s Encrypt 인증서 요청을 완료하라. Certbot은 당신의 SSL 인증서, 체인, 그리고 키 파일을 당신의 워드프레스 인스턴스 특정 디렉토리에 저장한다.

 

Let’s Encrypt SSL 인증서 요청을 완료하기

1. 당신의 워드프레스 SSH 터미널 화면에서 당신의 Let’s Encrypt SSL 인증서 요청을 위해 엔터를 눌러라. 만약 성공적이라면 다음 화면과 같은 비슷한 응답을 얻을 것이다.

이 메시지들은 당신의 인증서, 체인, 그리고 키 파일이 /etc/letsencrypt/live/domain/ 디렉토리에 저장되었다는 것을 알려준다. 밑줄 친 도메인 부분이 당신의 도메인이 맞는지 확인하라. 예를 들어/etc/letsencrypt/live/bebeyam.com/처럼.

2. 또한 메시지 안에 밑줄 친 만료일을 적어둔다. 당신은 이것을 당신의 인증서를 갱신할 때 사용할 것이다.

3. 당신은 이제 Let’s Encrypt SSL 인증서를 획득했다. 다음 과정을 계속 진행하라.

6단계: Let’s Encrypt SSL 인증서 자동 갱신 신청하기

Let’s Encrypt SSL 인증서의 유효 기간은 90일이다. 90일이 지나면 다시 갱신해야 된다. 만약 이 과정이 번거롭다면 자동으로 갱신할 수 있도록 설정할 수 있다.

 

1. 다음 명령어를 입력하고 엔터를 누른다.

env EDITOR=vim crontab -e

2. 다음 화면에서 엔터를 계속 눌러 맨 아래칸으로 이동한다.


3. 알파벳 I 버튼을 누른다. 왼쪽 아래에 영어로 INSERT라고 바뀐다. 만약 바뀌지 않는다면 한/영키를 눌러 다시 I 버튼을 누른다.


4. 다음 명령어를 입력한다. 이 명령어는 SSL 인증서가 만료가 되기 전에 시스템 시각으로 1시에 자동으로 인증서를 갱신하는 명령어다.

0 1 * * * sudo certbot renew && sudo /opt/bitnami/ctlscript.sh restart apache

5. 입력이 되면 ESC키를 누른다. 그리고 : (쌍점, 콜론) 버튼을 누르고 알파벳 wq를 입력하고 엔터를 누른다. 이때 wq는 소문자 상태로 입력한다. 저장하고 종료하는 명령어다.

6. 아파치 서버를 일시 중지하는 다음 명령어를 입력하고 엔터를 누른다.

sudo /opt/bitnami/ctlscript.sh stop

7. 존재하는 인증서 파일을 백업으로 다른 이름으로 수정하기 위해 다음의 명령어를 각각 입력하고 엔터를 누른다.

sudo mv /opt/bitnami/apache2/conf/server.crt /opt/bitnami/apache2/conf/server.crt.old

sudo mv /opt/bitnami/apache2/conf/server.key /opt/bitnami/apache2/conf/server.key.old

sudo mv /opt/bitnami/apache2/conf/server.csr /opt/bitnami/apache2/conf/server.csr.old

8. 이번에는 아파치 서버 디렉토리 안에 당신의 Let’s Encrypt 인증서 파일을 만들기 위해 아래 명령어를 각각 입력하고 엔터를 누른다.

sudo ln -s /etc/letsencrypt/live/$DOMAIN/privkey.pem /opt/bitnami/apache2/conf/server.key

sudo ln -s /etc/letsencrypt/live/$DOMAIN/fullchain.pem /opt/bitnami/apache2/conf/server.crt

9. 아래 명령어를 입력하여 아파치 서버를 다시 가동한다.

sudo /opt/bitnami/ctlscript.sh start

10. 다음과 같은 화면이 나와야 한다.

11. 워드프레스 인스턴스에 대한 SSL 인증서 파일은 현재 올바른 디렉토리 안에 있다.

7단계: Really Simple SSL 플러그인을 사용하여 워드프레스 사이트와 SSL 인증서 통합하기

워드프레스에 Really Simple SSL 플러그인을 설치하여, SSL 인증서를 통합하는데 사용한다. Really Simple SSL은 또한 당신의 사이트를 방문하는 유저들이 항상 HTTPS 연결을 하도록 하기 위해 HTTP를 HTTPS로 리다이렉트하는 구성을 한다.

 

Really Simple SSL 플러그인을 사용하면서 워드프레서 사이트와 SSL 인증서 통합하기

1. SSH 세션 화면에서 wp-config.php 파일이 쓰기 가능한 상태가 되도록 다음의 명령어를 입력하고 엔터를 누른다. Really Simple SSL 플러그인은 wp-config.php 파일에 당신의 인증서를 구성하도록 쓸 것이다.

sudo chmod 666 /opt/bitnami/apps/wordpress/htdocs/wp-config.php

2. 새로운 브라우저 창을 열고 워드프레스 사이트에 로그인을 한다.

3. 플러그인 화면에서 플러그인 추가하기를 누른다.

4. Really Simple SSL을 검색한다. Really Simple SSL 플러그인이 나오면 설치 버튼을 눌러 설치를 한다.

5. 설치가 되면 활성화 버튼을 누른다.

6. 나타나는 문구에서 Go ahead, activate SSL! 버튼을 누르면 SSL가 활성화다.

워드프레스는 SSL 암호화를 사용하기 위해 구성됐다. 추가적으로 워드프레스는 자동적으로 HTTP에서 HTTPS로 리다이렉트 되도록 구성됐다. 방문자가 https://bebeyam.com로 방문하면 자동적으로 암호화된 HTTPS 연결이 된다.(예를 들어 https://bebeyam.com처럼.)

“초간단 AWS Lightsail 워드프레스에 무료 Let’s Encrypt SSL 인증서 받기”의 6개의 생각

  1. 문과생으로 혼자 워드프레스 사이트 구축하고 있습니다. 정말 큰 도움이 됐습니다. 너무 자세히 알려주셔서 감사합니다. 복 받으소서!!!!

  2. 한가지 문제가 생겼는데,

    6단계 7번에서 3번째를 복사해서 넣으니

    mv: cannot stat ‘/opt/bitnami/apache2/conf/server.csr’: No such file or directory
    이렇게 나오는데 뭐가 문제일까요? ㅠ

    1. 저도 언젠가부터 갱신할 때 그런 게 뜨는데 그냥 제낍니다.ㅠㅠ
      그렇게 해도 ssl 인증서를 받을 수 있습니다.
      저도 그것에 대해 답을 찾기 위해 이곳저곳 검색해 봤지만 잘 나오지 않았습니다ㅠㅠ
      문과의 한계 같습니다.
      원하는 답변을 못 드려서 죄송합니다. 제가 문과라ㅠㅠ

      1. 아닙니다, 오히려 이렇게 자세하게 써주셔서 문제없이 인증서를 받았습니다!

        좋은 글 감사합니다~

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.