SSL인증서란?
SSL은 기존의 HTTP 방식에 SSL/TLS라는 통신 암호화 방법을 추가하여 컴퓨터와 서버간의 통신을 암호화 하고 안전하게 데이터를 주고받을 수 있도록 만들어진 웹 통신 표준 프로토콜입니다. SSL인증서는 SSL 연결시 상호 검증을 위해 사용됩니다.
웹브라우저에 적용시 https://로 시작되는 프로토콜이 적용되며 포트는 443포트를 사용합니다. SSL(Secure Socket Layer)는 TLS(Transport Layer Security, 전송계층 보안)으로 표준화 되었으며 2018년 8월 TLS 1.3버전이 정식 승인이 난 상태입니다.
SSL/TLS를 사이트에 적용하는 이유는 보안 강화와 SEO에 있어서도 https가 적용된 사이트에 가점이 있으며 사용자에게도 신뢰감을 줄 수 있는 효과 등의 이유로 대부분의 사이트에서 적용되어 있습니다.
어떤 SSL을 선택해야 하나?
SSL 인증서 발급처로 국내, 해외에 다양한 기관이 있으며 금액은 무료에서 부터 몇십만원까지 하는 다양한 서비스가 존재합니다.
서버 및 서비스 상황에 따라 단일 도메인 적용, Wild Card 적용 도메인 등의 옵션이 있으니 필요하신 인증서를 선택하시면 됩니다.
국내의 발급처는 사실 발급 기관이라고 해도 해외의 발급기관의 인증서를 대행하는 역할을 하는 기관들이 대부분이고 금액도 해외에 비해서 비싼편 입니다. 국내 기관에서는 AS 또는 설치 대행 등의 업무도 처리하고 있기 떄문에 비용이 추가되는 부분도 있습니다.
저렴하게 사용하시려면 GOGETSSL에서 SECTIGO 발급기관의 PositiveSSL 인증서(구 COMODO)를 사용하시면 연간 $6.75로 사용가능합니다. 같은 인증서여도 GOGETSSL에서 구매하는 것이 매우 저렴합니다.
무료로 사용하시려면 Let’s Encrypt의 인증서를 사용합니다. 3개월마다 갱신해야 한다는 불편함이 있긴 하지만 처음 시작하는 단계에서 무료로 SSL 적용이 가능한 부분은 매우 매력적입니다.
본 포스팅에서는 Let’s Encrypt SSL 인증서 발급과 서버에 적용하는 방법을 공유하도록 하겠습니다.
Lightsail 인스턴스에 Certbot 설치
Certbot은 Let’s Encrypt에서 인증서를 요청하고 이를 웹 서버에 배포하는 데 사용되는 클라이언트입니다.
Let’s Encrypt는 인증서를 발행하고 Certbot은 Let’s Encrypt와 상호 작용하는 클라이언트입니다.
먼저 Lightsail 콘솔에 접속하여 터미널창을 엽니다.
터미널 연결 후 인스턴스 패키지를 업데이트 합니다.
sudo apt-get update
Code language: JavaScript (javascript)
업데이트가 완료 되었으면 소프트웨어 배포 패키지를 설치합니다.
sudo apt-get install software-properties-common
Code language: JavaScript (javascript)
패키지 설치가 완료되었으면 apt Repository에 Certbot을 추가하고 apt를 업데이트 합니다.
sudo apt-add-repository ppa:certbot/certbot -y
sudo apt-get update -y
Code language: JavaScript (javascript)
이제 Certbot이 설치가 가능한 상태입니다. 아래 명령어로 Certbot을 설치합니다.
sudo apt-get install certbot -y
Code language: JavaScript (javascript)
설치가 완료되면 브라우저나 Putty 등 접속한 터미널을 유지한 채로 다음 단계를 진행합니다.
Let’s Encrypt SSL 와일드카드 인증서 요청
Let’s Encrypt에서 인증서를 요청하는 프로세스를 시작합니다. Certbot을 사용하여 도메인 및 하위 도메인에 대해 단일 인증서를 사용할 수 있는 와일드카드 인증서를 요청합니다. 예를 들어 example.com
최상위 도메인과 blog.example.com
및 stuff.example.com
하위 도메인에 대해 단일 와일드카드 인증서가 작동합니다.
이전 단계에 열려있는 터미널 창에 도메인에 대한 환경변수를 설정해 줍니다. DOMAIN 부분에만 자신의 도메인을 서브도메인 없이 루트도메인으로 입력해 줍니다.
DOMAIN=본인의 루트도메인
WILDCARD=*.$DOMAIN
Code language: PHP (php)
환경변수로 도메인이 등록되었으니 아래 명령어로 와일드카드 인증서를 요청합니다.
sudo certbot -d $DOMAIN -d $WILDCARD --manual --preferred-challenges dns certonly
Code language: PHP (php)
메시지가 표시되면 갱신 및 보안 고지 사항에 사용될 이메일 주소를 입력합니다.
Let’s Encrypt 서비스 계약 조건을 읽습니다. 모두 읽은 다음 동의하면 A를 누릅니다. 동의하지 않는 경우 Let’s Encrypt 인증서를 얻을 수 없습니다.
이메일 주소를 공유하라는 메시지와 IP 주소가 기록된다는 경고에 적절하게 응답합니다.
이제 Let’s Encrypt에 지정된 도메인을 소유하고 있는지 확인하라는 메시지가 표시됩니다. TXT 레코드를 도메인의 DNS 레코드에 추가하여 이 작업을 수행할 수 있습니다. 다음 예와 같이 한 세트의 TXT 레코드 값이 제공됩니다.
위의 창에 표시되는 내용은 _acme-challenge.example.com이라는 TXT값에 아래의 값을 넣어 DNS단에서 도메인이 본인 소유가 맞는지 확인하는 절차로 DNS영역에 TXT 레코드 추가 후 DNS 적용 유무까지 확인 한 다음 다음단계로 넘어가야 합니다.
이부분에서 먼저 키를 눌러서 인증을 시도할 경우 TXT레코드 인증을 받지 못하기 때문에 등록이 정상적으로 이루어지지 않으니 반드시 위의 상태를 유지한 후 다음단계인 DNS 설정을 진행합니다.
만약 먼저 키를 누르셨다면 Let’s Encrypt SSL 와일드카드 인증서 요청 두번째 단계(와일드카드 인증서를 요청)부터 해주시면 됩니다.
Lightsail의 DNS영역에 TXT레코드 추가
도메인의 DNS 영역에 TXT 레코드를 추가하면 도메인 소유권이 확인됩니다. 아래 설정하는 부분은 Lightsail DNS 영역으로 설명하겠으나 타 DNS를 사용하시는 분 들은 일반적으로 도메인 등록 대행자가 호스팅하는 다른 DNS 영역과 비슷하니 TXT레코드만 추가해주시면 됩니다.
- Lightsail 홈 페이지에서 네트워킹 탭을 선택합니다.
- 페이지의 DNS 영역 섹션에서 Certbot 인증서 요청에서 지정한 도메인의 DNS 영역을 선택합니다.
- DNS 영역 편집기에서 레코드 추가를 선택합니다.
- 레코드 유형 드롭다운 메뉴에서 TXT 레코드를 선택합니다.
- 다음 스크린샷과 같이 하위 도메인 및 응답 필드에 Let’s Encrypt 인증서 요청에 지정된 값을 입력합니다.
입력이 다 되었으면 저장 후 윗단계에서 나온 두번째 TXT 레코드 세트를 추가합니다.
추가가 완료되었으면 DNS가 확산되었는지 확인해 봅니다.
TXT 레코드가 전파되었는지 확인
TXT 레코드가 인터넷의 DNS에 전파되었는지 확인하려면 MxToolbox 유틸리티를 사용합니다. DNS 레코드 전파는 DNS 호스팅 공급자 및 DNS 레코드에 대해 구성된 TTL(Time to Live)에 따라 다소 시간이 걸릴 수 있습니다. 이 단계를 완료하고 Certbot 인증서 요청을 계속하기 전에 TXT 레코드가 전파되었는지 확인하는 것이 중요합니다. 그렇지 않으면 인증서 요청이 실패합니다.
- 새 브라우저 창을 열고 https://mxtoolbox.com/TXTLookup.aspx로 이동합니다.
- 다음 텍스트를 텍스트 상자에 입력합니다.
domain
을 본인의 도메인으로 조회 합니다.
_acme-challenge.본인 도메인
TXT Lookup을 선택하여 정상적으로 반영이 되었는지 확인합니다. 반영이 되지 않았으면 1~2분정도 후에 재 조회 해보시면서 적용이 될 때 까지 기다립니다. 적용이 완료될 경우 아래와 같은 화면이 보입니다.
적용이 완료된 것을 확인하였으면 이전 단계의 터미널 창으로 돌아가 인증서 요청을 마무리 합니다.
Let’s Encrypt SSL 인증서 요청 완료
Lightsail 브라우저 기반 SSH 세션으로 돌아가서 Let’s Encrypt 인증서 요청을 완료합니다. Certbot은 SSL 인증서, 체인 및 키 파일을 WordPress 인스턴스의 특정 디렉터리에 저장합니다.
Enter 키를 눌러 Let’s Encrypt SSL 인증서 요청을 계속 진행합니다. 성공하면 다음 스크린샷과 비슷한 응답이 나타납니다.
위와 같은 성공창이 나타나지 않는다면 인증서 요청 부터 다시 해주셔야 합니다. 기존에 적용하신 TXT 레코드 값은 지우셔도 무관하고 재요청시 나오는 값으로 교체해주시면 됩니다.
Let’s Encrypt 인증서 파일을 Apache 서버 디렉터리에 연결하는 링크 생성
Let’s Encrypt SSL 인증서 파일을 WordPress 인스턴스의 Apache 서버 디렉터리에 연결하는 링크를 생성합니다. 또한 필요할 때를 대비하여 기존 인증서를 백업합니다.
먼저 워드프레스의 서비스를 중단합니다.(Apache, PHP, MySQL)
sudo /opt/bitnami/ctlscript.sh stop
다음 명령을 입력하여 도메인에 대한 환경 변수를 설정합니다.
DOMAIN=example.com(본인 루트 도메인)
다음 명령을 개별적으로 입력하여 백업으로 기존 인증서 파일 이름을 지정합니다.
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
다음 명령을 입력하여 중지했던 서비스를 시작합니다.
sudo /opt/bitnami/ctlscript.sh start
이제 Apache에 SSL 인증서 적용이 완료되었습니다. https://본인도메인 으로 접속 시 도메인 앞에 자물쇠 모양을 보실 수 있습니다.
이제 남은 작업은 http://로 접속했을 경우 https://로 리다이렉트 시켜주는 통합작업입니다.
Really Simple SSL 플러그인을 사용하여 SSL 인증서를 WordPress 사이트와 통합
Really Simple SSL 플러그인을 WordPress 사이트에 설치하고 SSL 인증서를 통합하는 데 사용합니다. Really Simple SSL은 또한 사이트를 방문하는 사용자가 항상 HTTPS 연결을 유지하도록 HTTPS-HTTP 리디렉션을 구성합니다.
터미널 창에 다음 명령을 입력하여 wp-config.php파일을 쓰기 가능으로 설정합니다. Really Simple SSL 플러그인에서 해당 파일을 사용하여 인증서를 구성하기에 권한조정이 필요합니다.
sudo chmod 666 /opt/bitnami/apps/wordpress/htdocs/wp-config.php
이제 관리자 페이지로 가셔서 플러그인을 추가해 줍니다. Really Simple SSL 로 검색하셔서 활성화까지 시켜줍니다.
나타나는 메시지에서 Go ahead, activate SSL!(SSL 활성화)을 선택합니다. WordPress 인스턴스의 관리 대시보드에 대한 로그인 페이지로 리디렉션될 수 있습니다.
이제 WordPress 인스턴스가 SSL 암호화를 사용하도록 구성되었습니다. 또한 이제 WordPress 인스턴스가 HTTP에서 HTTPS로의 연결을 자동으로 리디렉션하도록 구성되었습니다. 방문자가 http://example.com
으로 이동하면 자동으로 암호화된 HTTPS 연결(즉, https://example.com
)로 리디렉션됩니다.
이제 HTTPS 보안이 적용된 워드프레스 사이트가 완성되었습니다.
사용하시면서 인증서 만료기간 체크해 주시고 90일마다 위의 작업을 반복하여 인증서 갱신을 해주시면 됩니다. 번거로우시다면…유료로 1년 이상의 인증서를 구매하시는 편이 마음 편합니다.