언젠가부터 크롬 브라우저의 주소창 옆에 "안전하지 않음"이라고 표시되기 시작했다. 



국내 대형 포털 중 하나인 daum.net 의 2차 도메인에도 안전하지 않음이 보인다. 


왜 안전하지 않다고 하는 것일까.


위에 언급한 다음을 예로 들면 우리가 인터넷을 하는 컴퓨터와 포털 서버 사이에 아무런 암호화없이 데이터가 오가고 있는 중이라고 이해하면 좋을 것이다. 


암호화 없이 데이터가 오간다는 것은 그 중간에서 누군가 그 내용을 들여다 볼 수 있다는 것을 의미하는 것이다. 예를 들면 현재 인터넷을 하고 있는 컴퓨터 바로 옆에 연결된 컴퓨터에서 무엇을 하고 있는지, 어떤 사이트에 들어가서 무엇을 하는지 다 알 수 있다는 것이다. 


현재 글을 작성하고 있는 technote.kr 도 마찬가지이다. 



현재 티스토리 기반으로 운영되고 있는 블로그인데 앞서 예를 든 media.daum.net처럼 암호화 없이 데이터 송수신이 이루어지고 있다. 



그렇다면 내가 입력하는 데이터 혹은 서버로 부터 받는 데이터를 암호화하여 누구도 볼 수 없게 하는 방법에는 무엇이 있을까?


바로 https 를 사용하는 것이다. 일반적인 웹사이트라면 http:// 로 시작하겠지만 암호화를 통해 security 가 증가한 웹사이트는 https://로 시작하게 된다. 



SSL 인증서를 통해 https protocol로 동작하기 위해서는 어떻게 해야 할까?


SSL 인증서 발급하여 웹서버에 적용 설정을 하면된다. 


본 글에서는 가장 널리 사용되는 무료 SSL 인증서 발급을 통해 적용하는 방법에 대해 알아 보겠다. 



Let's encrypt 인증서의 적용



무료 인증서로 널리 알려진 Let's encrypt를 적용하는 방법에는 2가지가 있다. 


  1. Root 권한으로 terminal을 접근할 수 있는 경우
  2. terminal 접근이 불가능하지만 웹사이트를 hosting 하는 업체에서 Let's encrypt 를 제공하는 경우

본 사이트는 티스토리에서 제공하는 사이트이고, HTTPS를 제공하지 않아 설정이 불가능하지만 별도로 운영 중인 forum.technote.kr 에 HTTPS를 적용해 보았다. forum.technote.kr 의 경우 AWS 기반 wordpress로 직접 설정한 Ubuntu 14.04 위에서 동작하기 때문에 root 권한을 보유하고 있다. 



Let's encrypt는 Certbot ACME client를 통해 아주/매우 쉽게 설정이 가능하다. ACME 가 무엇인지 찾아보니 Automatic Certificate Management Environment (ACME) protocol 의 약자이다. 설치 및 설정을 매우 쉽게 해주는 Certbot ACME client 설치 및 사용 방법은 다음과 같다. 


Certbot ACME client 의 설치


 software-properties-common 을 설치하기 전에 apt-get update를 통해 package list를 한번 갱신한다. 

root@server:~# apt-get update

...
Fetched 79.6 kB in 4s (16.4 kB/s)
Reading package lists... Done

 Certboty ACME client가 있는 apt-repository 추가를 위해 software-properties-common 을 설치한다. 

root@server:~# apt-get install software-properties-common

Reading package lists... Done

...

Setting up software-properties-common (0.92.37.8) ...


 certbot이 있는 apt-repository를 추가한다.  

root@server:~# add-apt-repository ppa:certbot/certbot

 This is the PPA for packages prepared by Debian Let's Encrypt Team and backported for Ubuntu(s).

 More info: https://launchpad.net/~certbot/+archive/ubuntu/certbot

Press [ENTER] to continue or ctrl-c to cancel adding it

...

gpg: key 75BCA694: public key "Launchpad PPA for certbot" imported

gpg: Total number processed: 1

gpg:               imported: 1  (RSA: 1)

OK


 추가후 package list를 갱신한다. 

root@server:~# apt-get update

...

Fetched 47.7 kB in 4s (11.3 kB/s)

Reading package lists... Done


 Apache에 적합한 certbot을 설치한다. 

root@server:~# apt-get install python-certbot-apache

Reading package lists... Done

Building dependency tree

Reading state information... Done

...

Setting up python3-certbot (0.25.0-1+ubuntu14.04.1+certbot+1) ...

Setting up certbot (0.25.0-1+ubuntu14.04.1+certbot+1) ...

Setting up libaugeas0 (1.2.0-0ubuntu1.3) ...

Setting up python3-augeas (0.5.0-1+ubuntu14.04.1+certbot+1) ...

Setting up python3-certbot-apache (0.25.0-2+ubuntu14.04.1+certbot+1) ...

Setting up python-certbot-apache (0.25.0-2+ubuntu14.04.1+certbot+1) ...

Setting up python3-icu (1.5-2ubuntu4) ...

Setting up python3-pyasn1 (0.1.9-2+certbot~trusty+1) ...

Processing triggers for libc-bin (2.19-0ubuntu6.9) ...


 HTTPS를 위한 SSL 인증서 설치를 certbot을 통해 시작한다.  

root@server:~# certbot --apache

Saving debug log to /var/log/letsencrypt/letsencrypt.log

Plugins selected: Authenticator apache, Installer apache

Enter email address (used for urgent renewal and security notices) (Enter 'c' to

cancel): forum@technote.kr


-------------------------------------------------------------------------------

Please read the Terms of Service at

https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must

agree in order to register with the ACME server at

https://acme-v01.api.letsencrypt.org/directory

-------------------------------------------------------------------------------

(A)gree/(C)ancel: A

Terms of Service 에 동의한다. 


-------------------------------------------------------------------------------

Would you be willing to share your email address with the Electronic Frontier

Foundation, a founding partner of the Let's Encrypt project and the non-profit

organization that develops Certbot? We'd like to send you email about our work

encrypting the web, EFF news, campaigns, and ways to support digital freedom.

-------------------------------------------------------------------------------

(Y)es/(N)o: N

Let's Encrypt 이메일 리스트에 추가 되고 싶다면 Y를 선택한다.


Which names would you like to activate HTTPS for?

-------------------------------------------------------------------------------

1: forum.technote.kr

-------------------------------------------------------------------------------

Select the appropriate numbers separated by commas and/or spaces, or leave input

blank to select all options shown (Enter 'c' to cancel): 1

HTTPS로 동작하기 원하는 사이트 index를 입력한다. 

Obtaining a new certificate

Performing the following challenges:

http-01 challenge for forum.technote.kr

Waiting for verification...

Cleaning up challenges

Created an SSL vhost at /etc/apache2/sites-available/forum-le-ssl.conf

Deploying Certificate to VirtualHost /etc/apache2/sites-available/forum-le-ssl.conf

Enabling available site: /etc/apache2/sites-available/forum-le-ssl.conf


Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.

-------------------------------------------------------------------------------

1: No redirect - Make no further changes to the webserver configuration.

2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for

new sites, or if you're confident your site works on HTTPS. You can undo this

change by editing your web server's configuration.

-------------------------------------------------------------------------------

Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2

기존 HTTP 연결 요청을 HTTPS 로 자동으로 바꿔줄 것인지 선택한다. 자동으로 바뀌길 원한다면 2를 선택한다. 

Redirecting vhost in /etc/apache2/sites-enabled/forum.conf to ssl vhost in /etc/apache2/sites-available/forum-le-ssl.conf


-------------------------------------------------------------------------------

Congratulations! You have successfully enabled https://forum.technote.kr


You should test your configuration at:

https://www.ssllabs.com/ssltest/analyze.html?d=forum.technote.kr

-------------------------------------------------------------------------------


IMPORTANT NOTES:

 - Congratulations! Your certificate and chain have been saved at:

   /etc/letsencrypt/live/forum.technote.kr/fullchain.pem

   Your key file has been saved at:

   /etc/letsencrypt/live/forum.technote.kr/privkey.pem

   Your cert will expire on 2018-09-23. To obtain a new or tweaked

   version of this certificate in the future, simply run certbot again

   with the "certonly" option. To non-interactively renew *all* of

   your certificates, run "certbot renew"

 - Your account credentials have been saved in your Certbot

   configuration directory at /etc/letsencrypt. You should make a

   secure backup of this folder now. This configuration directory will

   also contain certificates and private keys obtained by Certbot so

   making regular backups of this folder is ideal.

 - If you like Certbot, please consider supporting our work by:


   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate

   Donating to EFF:                    https://eff.org/donate-le


 설치가 모두 끝나고 SSL 인증서 갱신을 자동으로 할 것이라면 아래 명령어를 수행한다. 

 기본적으로 3개월 마다 갱신해야 하기 때문에 자동 갱신을 원한다면 수행한다.  


root@server:~# certbot renew --dry-run

Saving debug log to /var/log/letsencrypt/letsencrypt.log


-------------------------------------------------------------------------------

Processing /etc/letsencrypt/renewal/forum.technote.kr.conf

-------------------------------------------------------------------------------

Cert not due for renewal, but simulating renewal for dry run

Plugins selected: Authenticator apache, Installer apache

Renewing an existing certificate

Performing the following challenges:

http-01 challenge for forum.technote.kr

Waiting for verification...

Cleaning up challenges


-------------------------------------------------------------------------------

new certificate deployed with reload of apache server; fullchain is

/etc/letsencrypt/live/forum.technote.kr/fullchain.pem

-------------------------------------------------------------------------------


-------------------------------------------------------------------------------

** DRY RUN: simulating 'certbot renew' close to cert expiry

**          (The test certificates below have not been saved.)


Congratulations, all renewals succeeded. The following certs have been renewed:

  /etc/letsencrypt/live/forum.technote.kr/fullchain.pem (success)

** DRY RUN: simulating 'certbot renew' close to cert expiry

**          (The test certificates above have not been saved.)

-------------------------------------------------------------------------------


IMPORTANT NOTES:

 - Your account credentials have been saved in your Certbot

   configuration directory at /etc/letsencrypt. You should make a

   secure backup of this folder now. This configuration directory will

   also contain certificates and private keys obtained by Certbot so

   making regular backups of this folder is ideal.




위의 설치 및 설정 과정이 모두 끝나면 HTTPS로 동작하는 사이트의 모습을 바로 확인할 수 있다.