안경잡이개발자

728x90
반응형

  Let's Encrypt를 이용하면 무료 SSL 인증서를 매우 손쉽게 설치할 수 있습니다. 가장 기본적으로 다음의 명령어를 이용해 Let's Encrypt를 설치합니다.

 

apt-get install letsencrypt

 

  또한 도메인이 필요하다면 무료 도메인 서비스 Freenom을 이용할 수 있습니다.

 

  ▶ Freenom 공식 사이트: https://www.freenom.com

 

Freenom - A Name for Everyone

Cost Price Free Special

www.freenom.com

 

  저는 dongbin.tk라는 도메인을 무료로 구매(12개월)했으며, 제 사설 IP 주소와 연동했습니다. (기본 도메인, www 도메인 두 개) 이처럼 도메인을 등록하여 자신의 사설 IP 주소와 연결한 뒤에는 이제 Let's Encrypt를 통해서 인증서를 발급받을 수 있습니다.

 

letencrypt certonly --manual

 

  위 명령어를 입력하면, 가장 먼저 도메인(Domain) 주소에 대해서 물어봅니다. 도메인 주소를 원하는 대로 입력하시면 됩니다. 예를 들어 dongbin.tk라고 입력을 할 수 있습니다.

 

 

  이후에는 해당 도메인의 소유권을 확인합니다. 현재 예시에서는 정말 dongbin.tk의 소유자인지 확인하기 위하여 dongbin.tk에 특정한 URL에 하나의 파일을 만들어 보라고 지시합니다. 해당 파일의 내용 또한 Let's Encrypt가 제시해 준 대로 작성해야 합니다. 그냥 하라는 대로 하면 되므로 간단합니다.

 

  이 때는 Nginx나 Apache 등의 웹 서버를 이용하여 해당 경로에 파일을 만들어 제공하면 됩니다. 간단하게는 그냥 Python의 SimpleHTTPServer와 같은 라이브러리를 이용해도 되기 때문에 매우 간단합니다.

 

  이 때 만약 Connection Refused와 같은 문제가 발생한다면, 해당 도메인에 일단 접속이 잘 되는지 확인해야 합니다. 예를 들어 본인의 스마트 폰으로 자신의 웹 사이트가 잘 들어가지는지 확인해야 한답니다. (저는 학교 서버를 개방하려고 하는데, 80번 포트의 개방을 학교 방화벽 단에서 막고 있어서 이러한 문제가 발생했었네요.)

 

  혹은 다음의 명령어를 이용해서 www와 기본 도메인을 모두 포괄하는 인증서를 만들 수도 있습니다.

 

letsencrypt certonly --webroot -w={웹 루트 폴더} --expand -d {도메인 1,도메인 2,...}

 

 

※ 발급 받은 인증서 이용하기 ※

 

  인증서를 발급 받은 이후에는 이를 자신의 서비스에 적용할 수 있습니다. 일반적으로 인증서 파일은 다음과 같은 경로에 저장됩니다. 키 파일은 안전한 공간에 저장하고, 유출되지 않도록 합니다.

 

  공개키: /etc/letsencrypt/live/{도메인 주소}/fullchain.pem

  개인키: /etc/letsencrypt/live/{도메인 주소}/privkey.pem

 

 

  또한 서비스에 따라서 인증서를 등록하는 방법이 다릅니다. 예를 들어 주피터(Jupyter) 서버의 경우에는 다음과 같이 환경 설정 파일을 열어서 인증서가 위치한 경로를 적어주면 끝입니다. (이후에 Jupyter Server를 다시 실행하면 됩니다.)

 

sudo vi {주피터 환경설정 파일 경로}
# 다음의 내용 입력하기
c.NotebookApp.certfile = u'{공개키 경로}'
c.NotebookApp.keyfile = u'{개인키 경로}'

 

  또한 Let's Encrypt는 갱신 기간이 정해져 있기 때문에 자동 갱신을 위해서 별도의 작업이 필요합니다. 일반적으로는 letsencrypt renew 명령을 사용하여 인증서를 간단하게 자동적으로 갱신할 수 있습니다.

 

letsencrypt renew

 

  다만 이 때 유의할 점이 있습니다. 기본적으로 인증서 갱신은 80번 포트로 이루어지기 때문에 웹 서버단에서 80번 포트로의 접속을 443 포트(HTTPS)로 리다이렉트 설정을 해놓거나 하면 정상적으로 처리가 안 될 수 있습니다. 따라서 renew를 위해 필요한 .well-known 폴더는 80번 포트로 접속이 가능하도록 설정할 필요가 있습니다.

 

  더불어 테스트를 해보고 싶다면 --dry-run 옵션을 붙여서 테스트할 수 있습니다.

 

letsencrypt renew --dry-run

 

  

  따라서 crontab을 활용하여 이러한 명령을 특정한 시간대에 주기적으로 실행할 수 있도록 하면 될 것입니다. crontab -e를 입력하면 크론탭 입력 창이 등장하고, 수정을 완료하면 자동으로 인스톨이 진행됩니다. 매월 1일 1시에 인증서 갱신을 요청하는 명령어는 다음과 같습니다.

 

0 1 1 * * letsencrypt renew --renew-hook "service nginx restart"

 

 

  저장하고 밖으로 나오면 자동으로 적용됩니다.

728x90
반응형