무료 SSL인증서 Let’s Encrypt를 드디어 내 서버에도 설치하게 된 이야기

일개 블로그에 불과한 내 서버에 SSL인증서씩이나 설치할 생각은 애당초 없었다. 하지만 문득 정신을 차려보니 웹브라우저에 아름다운 녹색 자물쇠 마크가 붙게 되었다. 그것도 돈 한푼 안들이고 말이다. 이렇게 아름답고 훈훈한 이야기는 그냥 놓칠 수가 없어서 이렇게 글로 남겨 놓고자 한다.

며칠 전에 메모어플 구글킵(GoogleKeep)으로 블로그 글을 작성하게 되면서 덩달아 워드프레스앱의 중요성도 커지게 되었다. 원래 워드프레스 자체 어플의 편집 기능이 그렇게 좋지 않아서 사실상 그곳에서 글을 쓰는 일은 잘 없었는데 이제는 구글킵에서 깔끔하게 글을 마무리해서 워드프레스 어플로 내보내기를 한 뒤 사진만 첨부하면 완벽하게 스마트폰만으로 편리하게 블로그질을 할 수 있는 환경이 되었다.

그 과정에서 걱정이 된 것이 여행중에 글을 쓸 경우, 워드프레스 비번이나 각종 정보들이 중간 연결 과정에서 네트워크상에 노출이 되는 것이었다. 가지도 않을 여행에서 일어날 일을 자꾸 걱정하는 것은 하지도 못할 결혼 후의 일들을 이야기하는 것과 비슷하다는 생각이 들긴 하지만 그 이야기는 나중에 하도록 하고 일단 지금까지는 SSL https 보안연결이 아닌 일반 plain text http로 웹서버를 돌리고 있는 상황이었다.

자가 서명된 인증서로 SSL 보안연결을 한 모습. 보기가 좋지 않다.

굳이 보안 연결이 필요한 경우에는 자가서명된 TLS인증서(Self Signed Certificate)를 이용하여 이메일 IMAP, SSH등을 사용하고 있었다. 집에서 글을 쓸 때에는 중간에 패킷을 가로챌 사람도 없어서 사실 이런 것들을 별로 신경 안쓰고 살았지만 해외 여행 중에는 그곳의 인터넷 환경이 어떨지 모르고 그 과정에서 불상사가 생길 수도 있는 문제였다.

공인 SSL 가격이 일년에 수십 달러인데다가 2차 도메인도 여러개인 상황이므로 도저히 비용이 감당 안될 것 같아서 처음에는 자가 서명된 SSL로 어떻게든 해보려고 했었다. 하지만 안드로이드용 워드프레스앱에서 정말 밑도끝도없이 에러가 발생하는 덕분에 사설 SSL인증서로 뭔가 해보려는 짓은 포기를 하게 되었다.

공인기관에서 발급된 SSL이 아닌 사설 SSL을 사용할 경우 워드프레스 앱에서 에러가 발생한다.

VPN서버를 설치하는 방법도 생각을 해봤는데 이것 역시 SSL이 필요할 뿐만 아니라 설정하는 것도 번거로워 보였고 글 하나 올릴 때마다 VPN에 접속하는 것은 더 귀찮을 것 같아서 그냥 접었다.

결국 나중에 우분투18.04가 나오면 서버 업그레이드, nginx로 변경, 공인기관 SSL 인증서 발급 등을 한꺼번에 처리하기로 했다. 이사한 김에 벽지도 도배하고 냉장고도 바꾸는 기분으로 말이다. 게다가 잘 찾아보니 요즘은 SSL가격이 많이 내려서 년10달러 미만으로도 인증서를 구입할 수 있을 것 같았다.

아무튼 그 과정에서 Let’s Encrypt라는 것을 알게 되었다. 예전에 공짜 SSL을 제공한다는 뉴스를 얼핏 봤을 때에는 오히려 무료라서 뭔가 문제가 있지 않을까라고 생각했었다. 하지만 한푼이라도 아껴보겠다고 조금 진지하게 letsencrypt에 대해 검색해보고 살펴보니 꽤 쓸만할지도 모른다는 생각이 들었다. 게다가 구글,페이스북 같은 거대 기업들이 후원을 하고 있는 상황이라서 안정성에 대한 믿음도 갔다.

인증서 유효기간은 90일이다. 기간이 30일 미만으로 남았을 경우 갱신할 수 있다.

인증서 유효기간이 90일이라는 말에 애당초 무료 체험판 쯤으로 생각했고, 설령 무료로 3달마다 매번 갱신한다고 해도 그게 더 번거로울 것이라고 생각했는데, 알고보니 cron에서 자동으로 갱신할 수 있게끔 설정할 수 있어서 결론적으로는 아무 상관이 없었다. 오히려 1년마다 결제하느라 신경쓸 필요가 없으므로 더욱 편리해졌달까.

sudo add-apt-repository ppa:certbot/certbot
sudo apt-get update
sudo apt-get install python-certbot-apache
sudo certbot --apache -d k-june.com -d i.k-june.com -d hermes.k-june.com -d www.k-june.com -d webmail.k-june.com

결국 그래서 두어시간만에 이리저리 알아보고 준비해서 위의 명령어대로 입력해서 설치를 완료했다. 디지털오션에서 상세한 Let’s Encrypt 설치 방법을 설명해 주었을 뿐만 아니라 let’s encrypt 자체적으로도 certbot이라는 자동 스크립트가 있어서 아주 쉽게 설정할 수 있었다. 돈내고 사용하는 유료SSL은 설정하기가 무척 까다로워 보였는데 Let’sEncrypt는 정말 명령어 몇 줄 입력하고 y만 누르니 해결되었다.

Chromium에서 Let's Encrypt Authority X3이(가) 이 웹사이트의 인증서를 발행했음을 확인했습니다.

무사히 공인 SSL 인증서를 발급받았다. 이제 아름다운 녹색 자물쇠가 뜬다.

다만 아파치 가상호스트(Virtual Host) 자동 설정이 내가 설정해 놓은 것과 호환이 안되어서 수동으로 잡아 주긴 했다. 그 과정에서 약간의 문제가 생겼는데 PC용 크롬, 아이폰 사파리 등에서는 아무 문제없이 인증되었던 인증서가 유독 안드로이드에서만 신뢰를 얻지 못하는 현상이 있었다.

하지만 구글링해보니 해결책이 있었고 그 곳에서 알려준대로 마지막에 ChainFile을 추가해 주니까 깔끔하게 해결이 되었다. 아래는 아파치의 각 가상호스트 마지막 부분에 추가해 주었던 설정이다.

<VirtualHost *:443>
# 상략
SSLEngine ON
    SSLCertificateFile /etc/letsencrypt/live/k-june.com/cert.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/k-june.com/privkey.pem
    SSLCertificateChainFile /etc/letsencrypt/live/k-june.com/chain.pem
</VirtualHost>

워드프레스쪽에서는 신경써줄 것이 없었다. 뭔가 플러그인을 설치해야 하지 않을까라고 생각했지만 전혀 손댈 필요가 없었다. 다만 이제부터 https를 기본 주소로 사용할 생각이므로 일반 설정(Settings-General)에서 블로그 주소를 기존의 http://i.k-june.com/wp 에서 https://i.k-june.com/wp 로 바꾸어 주었다. 사진파일을 올리는 별도 서버도 https로 바꾸어 주었다.

SSL접속 녹색 자물쇠 마크 - 안전함

크롬 브라우저에서 안전하다고 한다.

이제 공인SSL도 있으니 서버로 뭔가 새로운 것을 시도해 볼까 생각중이다. 문득 마인크래프트 농사서버를 구축하고 싶어진다.

댓글 남기기