본문으로 바로가기

Let's Encrypt (무료 SSL 인증서) 설치와 활용

category Linux 2015.12.24 23:48

3개월 전, Mozilla에서 시작된 무료 SSL 인증서 발급 프로젝트가 있었는데, 그 프로젝트의 이름은 Let's Encrypt라고 하는 프로젝트였습니다.


사실 SSL을 사용한 HTTPS 보안 프로토콜의 등장은 패킷 스니핑으로 놀이터가 웹 환경을 해킹으로부터 무력화 시키는 가장 핵심적인 기술입니다. 하지만 이 SSL은 기술 특성상 제3자 서버의 인증을 받아야 하는데, 그 때문에 SSL 인증서 비용이 부과되어 주변 사이트들이 비용문제로 적용하지 않는 사이트들이 많습니다.(특히 국내권 사이트)


그런데, 이를 무료화 시키는 프로젝트가 바로 Let's Encrypt인데, 현재 공개 베타 서비스가 진행 중에 있으며 Python을 설치할 수 있는 운영체제라면 어디서든지 사용이 가능합니다.


Let's Encrypt !  




현재는 mozilla 뿐만 아니라 Google, Facebook과 같은 세계 대표 기업들도 이 프로젝트에 굉장한 스폰서로 지원하고 있습니다.



Let's Encrypt 설치

Let's Encrypt 설치를 위해서는 아래의 준비물이 필요합니다.

 

    - git

    - python (2.7 권장)

 

Python은 3.0이어도 상관없지만 홈페이지에서는 2.7을 권장하고 있다. 개발 환경도 2.7에서 한 듯햇습니다.


먼저 git과 Python을 설치합니다. 

(설치가 된 사람은 이 과정을 생략...)


Debian Linux

$ sudo apt-get install git python2.7

(# apt-get install git python2.7)


RedHat Linux (CentOS)

$ sudo yum install git python2.7

(# yum install git python2.7)


git과 python2.7 설치가 끝났으면 git을 이용해서 letsencrypt 패키지를 받아야 합니다.

그 전에, 선행해야할 것이 있습니다.


일단 본 포스트에서는 letsencrypt를 저의 서버에 맞춰 홈 디렉토리 내에 설치할 것입니다. 하지만 여기서 권고드릴 것은 letsencrypt를 사용해서 SSL 인증서를 발급받을 때, 여러가지 권한에 제약을 받습니다. 그러므로 반드시 "관리자" 권한(root)을 가지고 있는 사용자의 디렉토리 사용을 권장합니다.


대표적으로 /root 디렉토리가 가장 무난합니다. 하지만 간혹 우분투 리눅스 서버를 사용하고 계신 관리자 분들이 sudo 를 사용하면서 관리자가 root 계정이 아닌 다른 계정으로 사용하는 경우가 간혹 있습니다. (필자도 그렇게 사용합니다.) 이런 경우, sudo 권한을 가지고 있는 사용자 홈 디렉토리 내부에 넣는 것을 추천합니다. 


$ git clone https://github.com/letsencrypt/letsencrypt


# git clone https://github.com/letsencrypt/letsencrypt


적당한 디렉토리를 선정하고 난 후, 위 명령어를 입력해주세요. 잘못된 디렉토리 선정으로 인하여 인증서 발급이 제대로 되지 않을 수 있음을 꼭 참고하시기 바랍니다.


$ cd letsencrypt/

$ ./letsencrypt-auto


# cd letsencrypt/

# ./letsencrypt-auto


cd 명령어를 사용해서 letsencrypt 디렉토리로 이동한 후, Python Script 코드를 실행해줍니다.. 


실행할 때, root 사용자인 경우, 바로 진행되고, sudo 를 사용하면, 비밀번호를 묻습니다.



위 화면은 제가 현재 사용하고 있는 sudo 계정일 경우의 화면입니다. 또한 이 스크립트는 $HOME(홈 디렉토리 변수)를 사용하기 때문에 sudo -s를 사용해서 root로 계정이 전환되었다 하더라도 /root를 가리키지 않음을 유의해야 합니다.





스크립트가 서버에 현재 구동 중인 도메인 주소를 수집했다면 위 화면처럼 사용하고 있는 도메인을 리스트로 뿌려줍니다. 뿌려진 도메인 중에서 원하는 도메인에 Space Bar를 누르고 OK를 클릭하면 SSL 인증서 발급과 함께 자동으로 해당 도메인에 HTTPS 프로토콜을 적용시켜줍니다.





여기서 항목이 두 분류로 나뉘게 되는데, EASY의 경우, 페이지 하나만 HTTPS로 암호화 하지만 Secure의 경우, 페이지 전환하는 시점 모두를 암호화 시킨다는 점에 차이가 있습니다. 




적용이 완료되면, 위 화면이 나타나게 됩니다.



Let's Encrypt 활용

적용은 되었는데, 어떻게 적용되었는지 궁금하신 분들을 위해서 조금 정리를 해보겠습니다.



일단 일반 HTTP로 설정했던 파일이 first.xyz.neonkid.conf 파일이고, LetsEncrypt-auto가 자동으로 SSL을 적용시켜준 파일은 뒤에 le-ssl이 붙어 있습니다. 



기본적으로 가지고 있었던 first.xyz.neonkid.conf 파일에 위에 두 줄이 추가되어 있습니다. 위에 두 줄은 클라이언트가 80번 포트로 접속했을 때, 자동으로 HTTPS 주소로 바꿔주도록 Redirecting 하는 작업을 해주도록 합니다.



first.xyz.neonkid-le-ssl.conf 파일에는 기본 설정값과 동시에 위 4줄이 추가됩니다. 위 4줄은 서버의 공개키와 개인키가 생성되고, 사용되는 경로입니다. 사실 letsencrypt 설치 경로/live에 저장되므로 발급 이후 위 경로를 수동으로 지정해주고, 설정값을 include 시켜주면 SSL이 적용되는 셈입니다.


발급된 키의 유효기간은 3개월으로, 3개월이 지나면 자동 갱신이 되지 않고, 수시로 갱신을 해야 합니다.




위와 같은 활용방법을 적용해보면, SSL 인증서를 삭제/적용하는 법도 간단하게 할 수 있습니다.


먼저, first.xyz.neonkid.conf 파일에 적혀있는 위에  두 줄만을 지워주고, 저장합니다.


$ sudo vim first.xyz.neonkid.conf 


# vim first.xyz.neonkid.conf


두 번째로, first.xyz.neonkid-le-ssl.conf 파일을 삭제합니다.


$ sudo rm -rf first.xyz.neonkid-le-ssl.conf 


# rm -rf first.xyz.neonkid-le-ssl.conf

※ sites-enabled/ 내에 있는 first.xyz.neonkid-le-ssl.conf도 삭제하셔야 합니다.


$ sudo service apache2 reload


# service apache2 reload


Apache 서버를 Reload 시켜줍니다. 

이 때, ERROR가 발생한다면, sites-enabled/ 디렉토리를 반드시 확인바랍니다.


이 것으로 SSL 인증서를 해당 도메인에서 해제하는 것은 성공하였습니다.

다시 적용하려면 위 삭제한 파일과 지워진 두 줄을 복구하시고, reload 하시면 됩니다.



하지만 발급된 SSL 인증서가 삭제된 것은 아닙니다.

영구적으로 해당 도메인의 발급된 인증서를 지워보도록 하겠습니다.

발급된 인증서를 삭제할 경우, 다시 해당 인증서로 SSL 사이트를 구축할 수 없음을 참고하시기 바랍니다.


먼저, letsencrypt가 설치된 경로로 이동합니다 (기본: /etc/letsencrypt)


$ cd live/

$ sudo rm -rf "domain"


$ cd archive/

$ sudo rm -rf "domain"


$ cd renewal/

$ sudo rm -rf "domain.conf*"


# cd live/

# rm -rf "domain"


# cd archive/

# rm -rf "domain"


# cd renewal/

# rm -rf "domain.conf*"


삭제해야할 파일과 폴더는 총 3개이며, 이 3개가 모두 삭제되어야 완벽히 인증서의 효력을 잃게 되고, 차후 새로이 인증서를 생성할 때, 오류를 뿜지 않으므로 확실하게 참고하시기 바랍니다.


comments powered by Disqus
  1. 2016.03.23 17:24

    비밀댓글입니다

    • BlogIcon N.K Neon K.I.D 신고">2016.03.23 22:08 신고

      안녕하세요. 먼저 제 블로그에 방문해주셔서 감사합니다 ^_^

      Let's Encrypt는 Python 언어를 사용하여 Virtualenv 라고 하는 가상환경에서 인증 시스템 생성 작업을 수행합니다.

      해당 오류는 현재 사용하는 서버 환경에서 Virtualenv 모듈이 설치되어 있지 않아 생기는 오류 메시지로, 아래 명령어로 해결이 가능합니다.

      pip install virtualenv

      반드시 root 권한에서만 설치가 가능하시고, RedHat Linux ? CentOS 리눅스를 사용하신 듯한데, pip 명령어가 통하지 않는다면, Repository를 이용해서 pip를 별도로 설치하셔야 합니다. 기본적으로 Python의 기본만 설치하시고, 개발용 모듈을 따로 설치 안하셨다면, 아마 pip를 별도로 설치하는 것으로 알고 있습니다.

      제 답변이 꼭 도움이 되었으면 좋겠습니다.
      성공을 기원합니다.

  2. 2016.03.30 22:34

    비밀댓글입니다

    • BlogIcon N.K Neon K.I.D 신고">2016.04.02 12:13 신고

      정확히 어떤 부분이 어렵다는 것인지 제대로된 설명이 필요한 부분 같네요.

      이 프로세스는 Python에 대한 소량의 지식만 있다면, 충분히 가능한 시스템입니다. 어려운 부분이 있다고 한다면, 그 부분을 정확하게 집어서 알려주시면 감사하겠습니다.

  3. ms 신고">2016.05.13 22:44 신고

    인증서 설치 후에 https로는 접속이 잘 되는데 http 로 접속이 안되는데 왜 그럴까요? letsencrypt 인증서 설치시 80포트 설정 파일에 리다이렉트 코드가 자동으로 넣어지는 걸로 아는데요. 확인해보면 실제 그렇게 들어가 있구요.

    • BlogIcon N.K Neon K.I.D 신고">2016.05.15 09:22 신고

      HTTPS의 기본 포트번호는 443번입니다.
      그러나 이시다시피 리다이렉트 코드가 적용되어 있어 http로 접속할 때마다 자동으로 https로 접속되도록 설정되어 있기 때문에 브라우저에서 HTTP로 접속하시려면 리다이렉트 코드를 제거하거나 주석처리해줘야만 HTTP로도 접속할 수 있게 됩니다.

    • ms 신고">2016.05.15 23:58 신고

      답변 감사드립니다.
      말씀하신 것처럼 http로 접속을 하면 자동으로 https로 접속되기를 기대했는데, http로 접속을 하면 https로 접속되어 홈페이지가 열리는게 아니고,
      사이트에 연결할 수 없음
      ERR_CONNECTION_TIMED_OUT
      이렇게 됩니다.
      https로 접속하면 잘 열리는데요.
      ======
      해결되었습니다. 방화벽 문제였군요. 감사합니다.

    • 신고">2017.08.22 12:56 신고

      안녕하세요 좋은글 감사합니다 ^^
      리눅스는 아닙니다만 리눅스게열로 설치되는 synology nas 에 설치된 Let ,s encrypt 인증서의 설치시 도메인 소유권 확인 에러 문제로 질문좀 드려 보겠습니다
      시놀로지 서버 에서는 인증서를 위에 LET S~ 에 자동 등록하는 설정 탭이 있습니다
      현제 시놀로지이 ddns에 사용자 지정으로 Dynu.com 에 DNS 레코드 등록 되어 있는 도메인 XXX.co.kr 을 도메인 네임서버 등록 해놓았고 이 도메인을 이용해서 시놀로지 나스의 웹 서비스로 블로그를 하나 운영 하고 있는데 잘등록 해서 인증 받아 사용하던 Let s, Encrypt 인증서 갱신을 미쳐 못받아 삭제후 재등록 과정에서 도메인 유효성 검사가 안돼고 있네요 ;;;
      웹서버의 80포트와 443포트또한 열려있고 이 도메인으로 http 외부 접속은 원할히 수행 되는데 도메인 유효성 통과를 못하고 있어서 한달넘게 애를먹고 있습니다;;;
      혹시 이런 부분에 원인을 알수 없을까요?
      Dynu.com 서비스 중에 유료로 도메인 권한 확인 인증 이란 서비스가 있던데 그것이 문제인지 아니면 처음 Let s, Encrypt 에 등록됬던 도메인이 재인증 설치 과정에서 이미 등록된 도메인 이라 통과가 안돼는건지 정확한 원인을 찼지 못해서 해결을 못하고 있습니다 혹시 이런 현상에 대한 지식을 나눔받고자 도움을 청합니다
      좋은하루 되세요 ^^

    • BlogIcon N.K Neon K.I.D 신고">2017.08.23 10:27 신고

      안녕하세요. 이 포스트는 단독으로 사용하는 웹 서버에 대한 SSL 인증서 적용 글이라 이미 설치되어 나오는 시놀로지 등의 배포 서버에 대해서는 제가 정확하게 해결해드리지 못할 수 있다는 점 먼저 양해 부탁드립니다.

      Let's Encrypt를 사용해서, 갱신을 하지 못한 경우에는 SSH로 원격 접속하신 후, ./letsencrypt-auto certonly --standalone 명령어로 진행을 해보시기 바랍니다. (반드시 root 권한을 사용해야 합니다.)

티스토리 툴바