Certbot으로 LetsEncrypt SSL 인증서 적용하기

Paikwiki
이동: 둘러보기, 검색

CertbotLet's Encrypt 증명서를 사용하여 직접 관리하는 웹사이트에 HTTPS 프로토콜을 손쉽게 적용할 수 있게 해주는 오픈소스 도구이다. 새롭게 서버를 하나 열었으니 SSL 인증을 적용해보기로 했다.

Certbot 설치 방법 확인하기[ ]

웹사이트에 접속하면 첫 화면에 "My HTTP website is running { } on { }."라는 문장이 있다. { } 부분을 선택하면 선택한 화면 아래에 설치 방법이 친절하게 안내된다. 첫번째 { }는 서버 프로그램의 종류, 두번째 { }는 운영체제 종류이다. 이 글을 작성하는 시점의 이 위키는 Apache 서버에 Ubuntu 18.04 LTS(bionic)를 사용하고 있으므로 선택했다.

인증서를 받기 위해 필요한 사항은 이렇다.

  1. 서버에 접속할 수 있는 쉘이 있어야 하고,
  2. 80 포트를 이용해 이미 열려있는 HTTP 웹사이트를 갖고 있어야 하며,
  3. 관리자(sudo) 권한으로 SSH로 접속할 수 있는 서버가 있어야 한다.

당연한 얘기지만, 설치 방법에 안내가 나오니까 정리했다. 아래 설명에는 "default"와 "wildcard*" 두 개의 탭으로 구성된 설명이 나오는데 와일드카드를 지원하는 목록에 현재 내가 사용하는 서버(Vultr)가 없으므로, "default"만 따라해보기로 했다.

Certbot 설치하고 실행하기[ ]

서버에 SSH로 접속하기[ ]

먼저 서버에 접속해야한다. 이미 접속해둔 상태이므로 이 과정은 패스. 필요하다면 아래 명령을 통해 접속하면 된다.

$ ssh paikwiki@123.123.123.123

접속 전에 RSA 키 등록을 잊지 말자.

Certbot PPA 추가하기[ ]

저장소 목록에 Certbot PPA(Personal Package Archive)를 추가한다.

 sudo apt-get update
root@paikwiki:~# sudo apt-get install software-properties-common
root@paikwiki:~# sudo add-apt-repository universe
root@paikwiki:~# sudo add-apt-repository ppa:certbot/certbot
root@paikwiki:~# sudo apt-get update

결과 화면은 생략한다.

Certbot 설치하기[ ]

root@paikwiki:~# sudo apt-get install certbot python3-certbot-apache

Certbot 실행방법 선택하기[ ]

Certbot을 설치하면서 아파치 서버의 설정까지 수정하려면 아래의 명령어를,

root@paikwiki:~# sudo certbot --apache

Certbot을 설치한 후 직접 설정을 해주려면 아래의 명령을 입력한다.

root@paikwiki:~# sudo certbot certonly --apache

나는 sudo certbot --apache로 한번에 세팅을 완료했다.

root@paikwiki:~# sudo certbot --apache
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator apache, Installer apache
No names were found in your configuration files. Please enter in your domain
name(s) (comma and/or space separated)  (Enter 'c' to cancel): paik.wiki
Obtaining a new certificate
Created an SSL vhost at /etc/apache2/sites-available/000-default-le-ssl.conf
Enabled Apache socache_shmcb module
Enabled Apache ssl module
Deploying Certificate to VirtualHost /etc/apache2/sites-available/000-default-le-ssl.conf
Enabling available site: /etc/apache2/sites-available/000-default-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
Redirecting vhost in /etc/apache2/sites-enabled/000-default.conf to ssl vhost in /etc/apache2/sites-available/000-default-le-ssl.conf

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations! You have successfully enabled https://paik.wiki

You should test your configuration at:
https://www.ssllabs.com/ssltest/analyze.html?d=paik.wiki
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/paik.wiki/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/paik.wiki/privkey.pem
   Your cert will expire on 2020-09-08. 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"
 - 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

root@paikwiki:~#

세팅을 마치고 혹시나 싶어서 이 글을 백업해놓고 "미리보기"를 눌러보니 위키 웹사이트가 멈췄다. 일시적인 건지 모르겠지만, 일단 코드 에디터에서 계속 작성한다.

자동 리뉴얼 동작 테스트[ ]

Let's Encrypt 인증서는 90일마다 갱신해야 하므로, 크론 잡을 이용해 제때제때 갱신할 수 있도록 해줘야 한다. 아래 명령어로 손쉽게 갱신할 수 있는데, 지금은 갱신을 할 건 아니므로 --dry-run 옵션을 이용해 작동 여부만 확인한다.

root@paikwiki:~# sudo certbot renew --dry-run

Certbot으로 인증서를 갱신하기 위한 명령어는 아래의 위치 중 한 곳에 설치해야한다고 한다.

/etc/crontab/
/etc/cron.*/*
systemctl list-timers

당장은 90일이나 남았으니 크론 잡 생성은 나중으로 미루기로 했다.

작동 확인[ ]

https로 접속을 시도해보기로 했다. 처음 접속했을 때 바로 연결이 되지 않아 엄청 애를 먹었다. 문제는 방화벽이었다. sudo ufw disable 명령어로 방화벽을 끄고 접속해보니 SSL 인증이 잘 적용된 것을 확인할 수 있었다. 다시 방화벽 설정을 잡아줘야 하는 숙제가 남았지만, 일단 HTTPS 접속이 가능하게 하는 건 성공.

남은 작업들[ ]

이번에 서버를 이전하면서 기존 주소인 paikwiki.com에서 paik.wiki로 변경했다. 검색을 통해 위키에 들어오는 유입이 꽤 있는 편이어서 기존 주소로 접속했을 경우 적절한 페이지로 리다이렉트 해줄 수 있도록 해줘야 한다. 이 작업도 이미 해뒀는데, 네임서버 변경에 시간이 드는 탓인지 제대로 동작을 하지 않고 있다. ping이나, nslookup으로 봐도 계속 이전 주소가 잡히는데 평소보다 지나치게 오래 걸리는 것 같다.

그리고 이제 웹호스팅이 아니라 가상서버로 옮겼으니 시각편집기도 적용할 수 있게 됐다. 가상서버로 옮기기로 마음먹은 가장 큰 이유가 코드 구문강조 기능을 활성화하기 위해서였다.|Pygments 라이브러리를 동작하려면 파이썬을 실행할 수 있어야했다. 가상서버에 이미 설치되어 있던 Python3를 이용해 pygmentize 바이너리 파일을 실행할 수 있도록 설정을 해주고 잘 실행되는 것도 확인했다. 남은 건 시각편집기 적용.

마지막으로 3개월마다 인증서를 자동 갱신할 수 있도록 크론잡 설정하기. 크론잡을 실제 사이트에 사용해본 적은 없고, 테스트 삼아 개발머신에서 돌려본 정도인데, 90일이 다 가기 전에 한번 해봐야겠다.

참고링크[ ]

마지막 편집: 2020년 6월 11일 (목) 06:01