- Intro -

안녕하세요, 장태희 입니다.

오늘은 자신의 사이트에 무료로 SSL을 발급받고 만료가 되기 전에 자동 갱신을 해보도록 하겠습니다.

얼마 전까지 제가 운영하던 https://www.ubuntu-kr.org/Startcom에서 무료로 발급하는 Startssl을 사용 중이었는데요, 무료인 점은 좋지만 몇 가지 단점이 있었습니다.


1. 갱신 주기에 맞추어 재갱신을 해주어야 한다. 재갱신 주기를 놓칠 경우 인증서를 처음 key 파일부터 다시 해야한다.

2. 예전에 발급받은 인증서의 경우 재갱신을 할 경우에 서버측 intermediate.crt 파일이 바뀌어 바뀐 crt 파일을 넣어줘야 한다.

3. SSL 발급 도중 발생 도중 본인의 실수로 인하여 발급받지 못한 경우 무조건 금액을 지불하고 복구하여야 한다.


SSL은 대부분 돈 주고 발급받고있고, 가격도 저렴한것부터 EV Class등 비싼것도 많습니다. 찾아보면 부담스럽지 않는 Class 1 SSL도 많습니다.

하지만 비영리 커뮤니티를 운영하는 저의 경우 누가 돈을 계속 지불할것이며, 누가 관리를 지속적으로 해 줄 것인가에 대한 문제가 있어 최대한 무료로 할 수 있는 방법을 적용하였습니다.


- Environment -

SSL 발급을 위한 세팅을 다음과 같이 적용하였습니다.

- Environment -

OS

 Microsoft Azure Cloud

(Virtual Machine / Ubuntu 14.04)

 

Web Server Application

 Apache2

 

Domain 

 필요 / ssl.thjang.com (hosting.kr에서 구입)

 


- Install -

1. https://certbot.eff.org/ 으로 접속합니다.

2. 현재 사용중인 Webserver와 OS를 선택합니다. 두 조합에 따라 설치 방법이 약간씩 다릅니다.


3. 선택 후 아래와 같이 설치 매뉴얼이 제공됩니다.


4. /usr/local/sbin 폴더로 이동합니다. 

   아무 디렉터리에서나 실행 및 설치가 가능하지만 추후 자동 갱신 cron설정을 위해 이 폴더로 설정하였습니다.

cd /usr/local/sbin


wget 명령어로 certbot-auto 파일을 다운로드 받습니다. 우분투 16.04 / Debian 8의 경우 apt-get으로 python-letsencrypt-apache 패키지를 바로 설치할 수 있습니다.

sudo wget https://dl.eff.org/certbot-auto


다운로드 받은 certbot-auto 파일에 실행 권한을 줍니다.

sudo chmod a+x certbot-auto


관리자 권한으로 certbot-auto를 실행합니다.

sudo ./certbot-auto


기다리고 있으면 설치 확인 메시지와 함께 필요한 패키지들을 자동 설치하게 됩니다.


- Deploy -

기본 패키지 설치가 완료되면

1. 어떠한 도메인 정보도 없어 '도메인 정보가 없는데 계속 진행할 것이냐' 혹은(현재의 경우)

2. VirtualHost 파일에 도메인 정보를 저장한 경우 어떤 도메인을 대상으로 발급 할 것인지 창이 뜨게 됩니다.

해당하는 도메인만 선택하시거나(처음에는 모든 도메인에 *표시로 선택이 되어 있습니다.) Yes를 선택하여 계속 진행합니다.


SSL 발급을 원하는 도메인을 입력합니다. 

콤마, 슬래시, 스페이스바로 한칸 띄우고 다른 도메인을 입력하면 여러 다른 서브도메인들도 같이 발급받을 수 있습니다.

여기서는 ssl.thjang.com 하나만 발급받아 보았습니다.


해당 도메인을 구입하였을때 입력한 메일 주소를 입력합니다.

도메인 구입시 등록한 이메일이 생각나지 않을 경우, http://whois.kisa.or.kr/kor/에서 확인하실 수 있습니다.


Certbot 이용에 대한 문서 안내가 나옵니다. Agree를 선택합니다.


SSL적용 방식에 대해 선택합니다.

http와 https 둘 다 허용하고 싶으면 Easy를, http로 접속하면 https로 자동 접속을 원하면 Secure를 선택합니다.


SSL 발급이 완료되고 바로 사이트에 적용됩니다.

화면에 성공 창이 나타나면 사이트에 접속하여 SSL이 적용된 것을 확인할 수 있습니다.


- Renew -

Certbot을 통한 SSL 발급은 기한이 3개월 입니다. 인증서 갱신을 위해서는 renew --dry-run 옵션을 통해 연장할 수 있습니다.

sudo ./certbot-auto renew --dry-run


- Automation -

SSL적용 후의 최종 목적은 '내가 굳이 신경쓰지 않아도 알아서 갱신되었으면 좋겠다'이실 겁니다.

만료 주기를 어딘가에 적어놓거나 만료 시점의 메일을 받고 재갱신을 하는건 여간 귀찮은 일이 아닐 수 없습니다.

데비안의 경우 /etc/cron.d/certbot에 자동으로 설정이 되지만 우분투의 경우 crontab 등으로 세팅을 해 주셔야 합니다.


아래는 데비안의 자동 세팅 파일입니다.


데비안 세팅 파일을 참고하여 우분투 crontab에 등록을 해 보도록 하겠습니다.

먼저 crontab에 접속합니다.

sudo 권한으로 실행해야하기 때문에 앞에 꼭 sudo를 붙겨주시기 바랍니다.

sudo crontab -e


crontab 파일 맨 아래 아래와 같이 입력합니다.

0 */12 * * * /usr/local/sbin/certbot-auto renew --quiet --no-self-upgrade

시간 세팅이 0 */12 * * * 은 매일 12시간 0분마다 certbot-auto를 실행하라는 뜻입니다.

현재 certbot-auto는 하루에 두번 실행을 권장하고 있습니다.

평소에는 아무 작업도 하지 않지만, 인증서 만기가 다가온 경우 자동으로 인증서를 갱신하게 됩니다.


- Trouble Shooting -

1. 집 컴퓨터에서는 SSL 발급이 안됩니다.

→ Public IP와 Domain을 가지고 있어야 발급이 가능합니다. Router IP와 localhost로는 실행할 수 없습니다.


2. Failed authorization procedure. domain (tls-sni-01): run:acme:error:connection :: The server could not connect to the client to verify to domain ~ 과 같은 에러가 나타납니다.


→ 80포트와 더불어 443포트(https)도 개방되어 있는지 확인해 주시기 바랍니다. 클라우드 서버의 경우 보안그룹 옵션 등에서 포트 개방 여부를 확인하여 주세요.


3. certbot-auto 실행 후에 webserver ssl conf파일 옵션이 변경되었습니다.

→ certbot-auto는 자동 설정이라는 매우 편리함이 있지만, webserver의 ssl 설정을 수정하게 됩니다.

    백업 파일도 만들어 주지 않기 때문에 백업을 해두지 않으면 세팅값이 사라질 수도 있습니다.

    반드시 실행 전 ssl conf(우분투의 경우 /etc/apache2/sites-available/default-ssl.conf)파일을 반드시 백업하시기 바랍니다.


4. 바로 적용은 하지 않고 일단 crt와 pem키 등만 발급받고 싶어요.

→ certbot-auto 실행시 --webserver이름 certonly 옵션을 사용하면 SSL만 발급받고 서버에 적용은 되지 않습니다.

    경로는 /etc/letsencrypt에 저장되어 있습니다.

    여러 디렉터리 중 현재 적용되고 있는 pem 파일들을 보려면 live 디렉터리에서 확인하실 수 있습니다.

    설정 경로는 SSL이 적용된 서버의 conf 파일을 참고하시기 바랍니다.



WRITTEN BY
장태희

,