brunch

You can make anything
by writing

C.S.Lewis

by YC Feb 17. 2017

AWS EC2 워드프레스 블로그에 SSL  적용하기

https를 사용합시다.

최근 크롬 브라우저에서 https 프로토콜이 적용되지 않은 웹사이트에 방문하면 안전하지 않은 사이트라는 아이콘을 띄우기 시작했습니다. 아무리 사소한 정보라도 기본적인 암호화가 되어있지 않으면 위험할 수 있다는 경고 차원에서 시작한 것이죠. 얼마 전 한국을 방문한 구글의 보안 공주님 파리사 타브리즈 디렉터도 한국 최고 포털 업체인 네이버와 다음이 https를 로그인 전 페이지에 적용하지 않는 것을 보고 이해할 수 없다는 이야기를 했었죠. (관련기사) 포인투랩의 홈페이지에도 어제부터 SSL을 적용하여 https 주소 사용이 가능해졌는데요. 마찬가지로 https 적용을 원하시는 분들을 위해 아마존 웹서비스 EC2에 호스팅 중인 워드프레스 인스턴스에 SSL 인증서를 적용하는 방법을 공유드리려 합니다.


포인투랩은 AWS를 최대한 활용하여 공식 홈페이지를 운영 중입니다. 아직은 트래픽도 데이타도 아주 많진 않아 free tier로도 충분하군요 ^^; EC2 마켓 플레이스에서 Bitnami에서 제공하는 WordPress (무려 멀티사이트) 가 설치된 리눅스 서버 이미지를 가져와서 사용중이며 Route 53을 이용해 아마존 도메인 네임서버도 사용중이죠. 그리고 2016년에 AWS에 추가된 기능 중 하나로 Certificate manager가 있는데 별도의 비용 지불 없이 홈페이지에 SSL/TLS 인증서를 적용할 수 있습니다. 미국 공식 홈페이지에서는 매년 20불 정도를 내면서 썼었는데.. 진작에 알았다면 5만원쯤 아낄 수 있었는데 아쉽군요. 오늘 포스트에서는 이 서비스를 이용하여 워드프레스 블로그에 https를 적용시킬 거에요. 



인증서 발급


가장 먼저 할 일은 인증서를 발급 받는 것입니다. AWS 대시보드에 들어가서 Certificate Manager 메뉴를 찾아서 들어가주세요. Request a certificate 버튼을 찾아서 적용을 원하는 도메인을 입력해줍니다. 아래 그림처럼 poin2.com에 적용을 원한다면 poin2.com 과 www.poin2.com 두개를 다 입력해주세요. 기타 서브 도메인이 있다면 *.poin2.com 도 적어주면 좋겠군요.

Review and request 버튼을 눌러주면 도메인 정보에 있는 이메일 주소로 인증 메일이 날아갑니다. 받은 이메일에서 확인을 눌러주면 인증 절차가 완료되며 인증서가 발급 됩니다. 인증 기관은 Amazon Trust Services 이네요. 이로써 인증서 발급 과정은 끝입니다. 



Elastic Load Balancer 사용


두번째 과정은 현재 사용중인 EC2 인스턴스를 Elastic load balacer에 넣는 것입니다. Certificate manager로 발급한 인증서는 ELB 또는 cloudfront로 배포되는 사이트에만 적용이 가능하거든요. 대시보드에서 EC2 메뉴로 들어가주면 왼편에 Elastic load balancing이라는 메뉴가 보입니다. 새 balancer를 추가해주고 Classic load balancer를 선택해줍니다.


다음 단계로 넘어가서 원하는 이름을 지어주구요. Load Balancer Protocol 아래쪽의 Add 버튼을 누른 후 HTTPS (Secure HTTP)를 추가해주면 포트 443이 자동으로 추가됩니다. 나머지는 건들지 않고 다음 단계로 넘어가주세요.



2단계 security group 세팅은 사용하시던 그대로 쓰시면 됩니다. 그리고 가장 중요한 3단계! Configure security settings 메뉴에서 인증서 타입을 맨 위의 existing certificate from AWS Certificate manager로 골라주세요. 그럼 아래쪽에 보유중인 인증서 리스트가 나오며 원하는 웹사이트 인증서를 골라주면 됩니다.


4단계인 Health check에서는 인스턴스가 잘 살아있는지 어디로 핑을 때릴지를 선택하게 되는데요. 여기저기 찾아보니 .php 파일로의 핑은 불가능하다 하고 TCP선택 후 80포트를 적어주면 됩니다. 아니면 서버에 있는 임의의 html 파일을 지정해줘도 되겠네요.


이제 EC2 인스턴스를 붙여줘야죠. 실행중인 워드프레스 인스턴스를 골라줍니다.


마지막 단계에서는 NAME 태그 하나만 추가해주면 되겠군요. 이로써 ELB 세팅도 마무리 되었습니다.



서버 파일 수정


다음 단계는 터미널을 통해 서버에 접속한 후 이뤄져야 하는데요, 총 두개의 파일을 수정할 것입니다. 첫번째는 홈페이지로 들어오는 모든 트래픽을 443포트로 몰아주는 과정입니다. 서버에 접속 후 .htaccess 파일을 열어서 수정해주세요. 참고로 Bitnami에서 제공하는 WordPress 서버 이미지에서의 .htaccess 파일의 경로는 ~/apps/wordpress/htdocs 입니다. 만약 파일이 없으면 새로 만들어주세요.                                                         

<IfModule mod_rewrite.c>

  RewriteEngine On

  RewriteCond %{SERVER_PORT} 443

  RewriteRule ^(.*)$ https://도메인이름/$1 [R,L]

</IfModule>


위의 코드 4번째 줄에 있는 도메인이름 대신 본인이 사용하는 도메인을 넣어주면 됩니다. https://poin2.co.kr 이런 식으로요.


두번째로 wp-config.php 파일을 수정해줘야 하는데요, 이 과정은 워드프레스의 관리자 페이지들에도 https를 적용하기 위해 필요합니다. 위의 파일과 같은 경로에 있는 wp-config.php 를 열어서 아래 코드를 넣어주세요.                                                          


define('FORCE_SSL_ADMIN', true);

if (strpos($_SERVER['HTTP_X_FORWARDED_PROTO'], 'https') !== false)

$_SERVER['HTTPS']='on';


이로써 가장 귀찮은 단계가 지나갔습니다. (고생하셨어요 짝짝짝) 



Route 53 A Record 변경


대망의 마지막 단계! Route 53을 이용해 현재 도메인을 EC2 인스턴스와 연결시켜주고 있다면 아까 생성한 Elastic Load Balancer로 A 레코드를 변경해주어야 합니다. 대시보드를 통해 AWS Route 53 메뉴에 접속해서 사용중인 도메인을 선택해서 들어가주세요. 그리고 Type이 A로 되어있는 항목을 선택해서 Alias를 Yes로 바꿔주면 Alias Target 항목에 아까 만들어놓은 ELB 타겟이 로딩됩니다. 보통 www.poin2.co.kr, poin2.co.kr 요렇게 두개의 레코드 값이 설정되어 있을텐데요, 두개의 값을 모두 ELB로 타겟하도록 바꿔주세요.


이제 변경된 레코드 값이 적용되기를 조금만 기다려주면 됩니다. 이 단계까지 마친 후 크롬 브라우저를 이용해 https:// 주소로 접속해보면 이렇게 안전하다는 메시지와 함께 자물쇠 표시가 나타납니다.



항상 https로 접속되도록 설정


이 단계는 꼭 하진 않아도 되지만 기왕이면 하는게 좋겠죠? http 주소로 들어오더라도 항상 https로 리디렉션 되도록 해주는 과정입니다. 보통은 .htaccess 파일을 수정하는 방법을 사용하는데 왜인지 몰라도 전 잘 안되더라구요. 하지만 워드프레스의 플러그인은 정말 없는게 없죠. SSL관련 플러그인도 참 많이 있는데 전 Really Simple SSL 이란 플러그인을 사용했습니다. 한방에 문제 해결! 그래서 https://poin2.co.kr 로 접속하더라도 바로 https 주소로 넘어가게 됩니다. 인터넷 세상을 조금 더 안전하게 만든 느낌이 들어 아주 뿌듯하군요. 그럼 다음 팁으로 또 만나요!

브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari