이런 저런 이유로 포스팅을 한동안 할 수 없었다.
13강에서는 원래 하려고 했던게 아니라 HTTPS 보안 연결에 대해서 포스팅 해본다. 사실 작년에 StartSSL로 HTTPS 연결을 시도하다가 인증서를 날려먹어 접어두었었다. 그러다가 갑자기 생각이 나서 다시 시도하게 되었다.
HTTPS 연결의 필요성
한국의 웹 환경을 생각해보자. 보안이 필요하다 싶은 곳은 전부다 액티브X로 도배가 되어있다. 요즘은 액티브X를 없앤다고 하는데 액티브X를 사용하지는 않지만 똑같은 프로그램을 액티브X가 아닌 다른 방식으로 설치하는 식이다. 결국 똑같다. 해외의 웹 환경을 경험해보면 좋은 비교가 된다. 해외 직구를 위해 결제라도 하나 해보게 되면, 너무 확연하게 차이가 남을 즉시 느낄 수 있을 것이다. 보안 프로그램 설치? 없다. HTTPS 보안 연결 하나로 끝이다. 개인 웹서버에 HTTPS 연결을 설정한다면 그와 비슷한 수준의 보안이 보장될 수 있다.
개인 웹서버에 HTTPS 연결이 무슨 필요나 할 수도 있겠지만, ownCloud에서는 HTTPS 연결을 권장하고 있다. 비교적 털릴 것이 없는 보통 사람이라고 해서 보안에 신경쓰지 않아도 되는 것은 아니다. HTTPS에 대한 복잡한 논의들이 있지만, 일단 보안에 굉장히 취약한 자작 NAS를 위해 HTTPS 연결을 설정해보자.
무료 SSL 인증서
무료로 SSL 인증서를 발급해 주는 곳은 몇 군데 있다. StartSSL, WoSign, Let’s Encrypt 등. 나는 세 군데 모두에서 SSL 인증서를 발급받아 보았다. 각기 장단점이 있는데 간략하게 적어본다.
StartSSL
- 인증서 기간은 1년이다. 1년마다 재발급.
- 무료로 발급해 주기는 하지만 관리할 때에는 유료다.
- 분실했을 때 재발급은 유료다.
- 그래서 작년에 한번 분실하고서는 쓸 수가 없었다.
- 더 잘 찾아보지 않아서 그럴수도 있는데, 그 이후로는 쓸 수가 없게 되었다.
WoSign
- 인증서 기간을 1~3년까지 지정할 수 있다.
- 중국 쪽 업체라 그런지 대인배 마인드로 무료 지원이 굉장히 넓다.
- 몇몇 브라우저에서 인증서를 신뢰할 수 없다고 뜬다.
- 특히 모바일에서는 대부분 인증서를 신뢰할 수 없다고 뜬다. 이게 가장 치명적인 단점이다.
Let’s Encrypt
- 인증서 기간은 90일이다. 연장하는 방법은 간단하다.
- 얼마전까지는 비공개로 초대장이 있어야 사용할 수 있었는데 지금(2016년 3월 중순 기준)은 퍼블릭 베타이다.
- 웹사이트에서 인증서를 받는 StartSSL이나 WoSign과는 달리 콘솔로 서버에 접속해서 받아야 한다. 해서 웹서버를 임대했거나 웹서버를 구축하지 않았다면 사용할 수 없다.
그래서 선택은 Let’s Encrypt다. 이 사이트에 대한 더 자세한 정보를 소개한다.
Let’s Encrypt
Lets’ Encrypt는 HTTPS를 사용하기 위해 SSL을 구매해야 하는 부분이 HTTPS 보급에 방해된다고 생각해서 SSL을 무료로 제공해서 HTTPS를 보급하기 위해 작년 말에 만들어졌다. 초기에는 Mozilla, Cisco, Akamai, EFF, id entrust 등이 모여서 ISRG(Internet Security Research Group)라는 새로운 SSL 인증기관을 만들어서 올해 SSL을 무료로 제공하겠다고 발표했다. 지금은 이 Lets’ Encrypt에 Facebook, 워드프레스를 만드는 Automattic, shopify 등 많은 회사가 스폰서로 참여하고 있다.
Let’s Encrypt를 이용해 HTTPS 설정하기
우리가 지금까지 구축한 서버의 환경은 운영체제가 Ubuntu Server 14.04 LTS 이고, 웹 서버는 Apache2 를 이용하고 있다. 같은 환경이 아니면 설치 방법이 달라질 수 있으니 유의해야 한다. 설치과정은 Let’s Encrypt 사이트의 Getting Started 문서를 따라 진행된다.
서버에 Let’s Encrypt 설치
먼저 git 패키지를 설치한다. 설치되어 있지 않으면 GitHub에서 소스를 내려받을 수 없다.
~$ sudo apt-get install git
콘솔을 이용하여 서버에 SSH로 접속을 한 후 다음 명령어를 순서대로 입력한다.
~$ git clone https://github.com/letsencrypt/letsencrypt ~$ cd letsencrypt ~$ ./letsencrypt-auto --help
한줄 한줄 순서대로 설명을 하면,
1) GitHub에 있는 Let’s Encrypt 소스를 내려받고, (letsencrypt 디렉토리에 내려받는다)
2) letsencrypt 디렉토리에 들어가서,
3) letsencrypt-auto 를 실행한다.
세 번째 줄을 입력하게 되면, 알아서 의존성 관련 패키지들을 다운받고 설치한다. 꽤 많다.
여기까지 왔으면 거의 다 했다.
인증서 받고 적용하기
이제 다음 명령을 사용하면 끝이다(?).
~$ ./letsencrypt-auto
자신이 설정한 가상호스트에 따라서 목록은 많을 수도 있고 적을 수도 있다. HTTPS를 설정하고자 하는 도메인을 체크한 후, OK를 누른다.
이메일을 입력하라는 창이 뜨는데 이메일을 잘 기입한다. 마지막으로는 Easy와 Secure가 뜰 것이다.
Easy는 HTTP와 HTTPS 연결 모두를 허용하는 것이고,
Secure는 HTTPS 연결만 되도록 하는 것인데, 상황에 따라 결정하면 될 것이다.
나는 후자를 선택했다.
일단은 이게 끝이다. 간단해서 좋다.
만약 가상호스트 설정에서 HTTPS 연결을 위한 설정을 해놨다면 알아서 수정을 해놨을 것이다.
이전에 설정해 놓지 않았다면, /etc/apache2/sites-available 디렉토리에 들어가서 파일 목록을 확인해 보라.
가상호스트 파일의 이름이 owncloud.conf 인 경우, owncloud-le-ssl.conf 가 새로 생겼을 것이다. 알아서 HTTPS 연결을 위한 설정 파일을 생성해 준다. (새로 생성한 파일 끝에는 -le-ssl가 붙는다)
그래서 끝이다.
덧글, 2016년 3월 16일 기준으로 이 블로그에도 HTTPS 보안 연결이 설정 되었다.
제가 이미 유료로 ssl인증서를 하나 발급을 받았으면 let’s encrypt 로 발급을 못받나요…?
시놀로지에 ssl인증서를 설치하려고 일단은 우분투로 작업을 하는데 자꾸 오류가 나네요…ㅠㅠ
상관없습니다. 저도 starssl 했다가 키를 잃어버려서 let’s encrypt 로 바꿨습니다.
안녕하십니까, 종종 들려서 nas 관련 자료 유용하게 얻어가고 있습니다. 먼저 감사 말씀드려요.위 내용을 참고삼아 ssl 적용하다보니 문의 사항이 생겨서 댓글 남겨 봅니다.
현재 우분투 16.04.3 lts 에 php 7 및 mariadb 환경으로 세팅중입니다. 다른것보다 워드프레스를 본격적으로 돌릴려고 도메인을 연결했습니다. 상황은 아래와 같습니다.
aaa.net <– 에 곧바로 워드프레스가 뜨도록 .htaccess 및 index.php를 /var/www/html으로 올리고 관련 작업을 해놓았습니다. 그외에 몇몇 서비스를 활용하기 위해서 가상 호스트를 설정했습니다. /etc/apache2/site-avaliable 에 .conf 파일을 생성하는 것으로 cloud.aaa.net , photo.aaa.net 등등을 설정해서 제대로 접속이 되고 있고 잘 돌아갑니다.
문제는 let's encrypt–auto 적용시 위에서 설정한 가상 호스트들은 메뉴에 나오는데 정작 중요한 aaa.net이 적용항목에 안나오더라구요. 혹시나해시 메인도메인을 가상호스트로 잡았더니 적용은 되었지만 정작 워드프레스에 접속이 안됩니다. 500에러 뜨는거보니 위치 지정 문제같긴한데 도저히 해결을 못하겠습니디. 메인도메인에 직접 워드프레스를 연결했을때 렛츠인크립트 적용을 어떻게해야할지 힌트라도 얻을수있을까 문의드려봅니다. 감사합니다.
다행히 그럭저럭 잘 해결했습니다. 감사합니다~
댓글을 빨리 확인하질 못했네요ㅜ 다행입니다