안녕하세요. 이번 시간에는 SSL 적용 방법에 대해 알아보겠습니다.
letsencrypt를 사용해서 90일짜리 공짜 SSL을 적용해봅시다. 90마다 갱신하는 것이 귀찮기 때문에 greenlock-express라는 모듈을 사용해서 자동 갱신도 적용하겠습니다.. (사실 greenlock이 요즘 불안정해서 저는 nginx를 사용해서 https를 적용하는 것을 더 선호하고, 권장드리긴 합니다. 제 nginx와 certbot으로 https 적용하기 글을 참고하시는 것을 추천드립니다.)
제 블로그에 SSL이 적용된 모습입니다. SSL을 적용하면 저렇게 초록 자물쇠 표시를 얻을 수 있습니다. 먼저 왜 SSL을 적용해야하나부터 간단히 알아보겠습니다.
SSL은 Secure Socket Layer입니다. Secure이 들어가있기 때문에 뭔가 안전해 보이죠? 클라이언트와 서버 간 오고 가는 데이터를 암호화해줍니다. 그냥 HTTP 통신을 하면 주고 받는 데이터가 노출됩니다. 공공장소에서 와이파이로 로그인을 하는데 SSL도 적용 안 되어 있고, 와이파이가 해킹당해 있다? 그러면 바로 여러분의 비밀번호가 해커에게 전달됩니다.
SSL은 인증서를 발급받아야 브라우저가 적용할 수 있습니다. 인증서는 정해진 몇몇 기관에서만 (돈 내고) 발급 가능했습니다. 그래서 개인 웹사이트를 운영하는 사람들은 적용하기를 망설였는데요. Let's Encrypt가 나와서 상황이 달라졌습니다. 고맙게도 "무료"로 SSL 인증서를 발급해줍니다. 3개월마다 갱신해야하긴 하지만, 자동 갱신을 지원하기 때문에 큰 문제는 없습니다.
HTTP1보다 효율적인 HTTP2를 사용하기 위해서도 SSL 적용이 필요합니다.
구글이 검색 순위에 SSL 적용 여부를 반영하기로 했기 때문에 SSL 적용의 중요성이 나날이 커져가고 있는데요. 노드를 서버로 운영하시는 분들도 뒤쳐질 수는 없죠! 노드에 Let's Encrypt를 적용해주는 greenlock 모듈에 대해 알아봅시다.
npm install greenlock-express
먼저 필요한 패키지들을 다운로드받습니다. greenlock-express는 express뿐만 아니라 spdy, https, restify 등의 모듈과 함께 쓸 수 있습니다. 클러스터링을 할 때는 greenlock-cluster를 씁니다. 만약 koa를 쓰신다면 greenlock-koa를, hapi라면 greenlock-hapi를 사용하면 됩니다. 바닐라 노드에 붙이려면 그냥 greenlock 패키지를 설치합니다. 사실 다른 패키지들은 모두 greenlock 패키지를 상속하고 있습니다. 커맨드라인 명령어로 쓰는 greenlock-cli도 있습니다.
먼저 익스프레스 app 객체가 있는 파일 아래에 설정 객체를 만듭니다.
const express = require('express');
const app = express();
...
require('greenlock-express').init({
packageRoot: __dirname,
configDir: './greenlock.d',
maintainerEmail: '여러분의@이메일.com',
})
.serve(app);
그리고 greenlock.d 폴더를 만들고 그 아래에 config.json 파일을 만들어 내용을 다음과 같이 넣습니다.
{ "sites": [{ "subject": "zerocho.com", "altnames": ["zerocho.com"] }] }
이렇게 하면 알아서 인증서 갱신까지 해줍니다. 편하죠?
이제 서버를 실행하면 알아서 SSL이 붙습니다. 이제 노드로 된 사이트에 SSL을 적용해봅시다!