게시글

5만명이 선택한 평균 별점 4.9의 제로초 프로그래밍 강좌! 로드맵만 따라오면 됩니다! 클릭
강좌18 - NodeJS - 7년 전 등록 / 3년 전 수정

letsencrypt와 greenlock으로 SSL(https) 적용하기

안녕하세요. 이번 시간에는 SSL 적용 방법에 대해 알아보겠습니다.

letsencrypt를 사용해서 90일짜리 공짜 SSL을 적용해봅시다. 90마다 갱신하는 것이 귀찮기 때문에 greenlock-express라는 모듈을 사용해서 자동 갱신도 적용하겠습니다.. (사실 greenlock이 요즘 불안정해서 저는 nginx를 사용해서 https를 적용하는 것을 더 선호하고, 권장드리긴 합니다. 제 nginx와 certbot으로 https 적용하기 글을 참고하시는 것을 추천드립니다.) 

undefined

제 블로그에 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을 적용해봅시다!

조회수:
0
목록
투표로 게시글에 관해 피드백을 해주시면 게시글 수정 시 반영됩니다. 오류가 있다면 어떤 부분에 오류가 있는지도 알려주세요! 잘못된 정보가 퍼져나가지 않도록 도와주세요.
Copyright 2016- . 무단 전재 및 재배포 금지. 출처 표기 시 인용 가능.
5만명이 선택한 평균 별점 4.9의 제로초 프로그래밍 강좌! 로드맵만 따라오면 됩니다! 클릭

댓글

12개의 댓글이 있습니다.
3년 전
안녕하세요 제로초님 그런데 https를 리액트네이티브같은 모바일앱에 적용할때가 궁금합니다. 모바일앱에는 front에 도메인이 없는데 그러면 백엔드에만 https(ssl)를 적용시켜주는 것인가요?
3년 전
네 백엔드에만 적용하시면 됩니다.
3년 전
.server(app)에서 오타가 있네요
.serve(app)으로 해야합니다.
3년 전
감사합니다.
4년 전
그린락 버전이 업데이트 되어 이 글이 유효하지 않다면 글 안에 명시해주세요.
4년 전
좋은 글 감사합니다

항상 잘보고있씁니다
4년 전
안녕하세요 혹시 설정객체를 만든다고 하셨는데 app.js말고 따로 js 파일을 만드는건가요..? app.js에 저 코드를 작성하니 not a function 에러가 뜨네요 https.createServer 는 www에서 작성하였는데 저 설정객체를 어디에 어떻게 작성해야하는지 잘 모르겠습니다 ㅠㅠ
4년 전
그린락이 버전 업데이트가 되어 이 글은 더이상 유효하지 않습니다.
5년 전
pm2 cluster, greenlock-express 같이 사용 가능한가요? 단일로 사용 할 때는 문제 없는데 클러스터 사용시 에러가 호출 되네요
5년 전
greenlock-cluster 이런 걸 사용하셔야 할 것 같습니다.
6년 전
안녕하세요. 제로님. 혹시 인증서 발급방법이나, 이에 대한 튜토리얼은 계획이 없으신가요? node.js 환경에서 let's encrypt https를 적용하려고 하는데, 인증서 발급부터 많이 어렵네요. 특히 윈도우 서버에서요 ^^;
6년 전
윈도우서버에서는 발급받아 본 적이 없네요 ㅠㅠ
6년 전
질문이있습니다. Let's Encrypt 홈페이지에서 발급을 받는 건가요??
6년 전
self signed certificate는 openssl을 사용하면 쉽게 발급받을 수 있습니다.
6년 전
궁금한 점이 있어서 질문 남깁니다. 로컬 호스트로는 안되는건가요?
6년 전
네, 로컬호스트는 인증서를 발급받아도 아무런 의미가 없습니다. 발급받을 수는 있습니다. self signed certificate를 찾아보세요.
6년 전
안녕하세요! 좋은 글 잘봤습니다 ㅎㅎ
aws ec2에 node.js https 서버를 만들려고 하는데,, 똑같이 적용하면 되겠죠..??
그리고 포트는 443 말고 다른 것을 사용해도 괜찮을까요..??
6년 전
ec2에서도 똑같이 가능합니다. 443말고 다른 걸 쓰면 443 포트랑 연결해주는 작업이 추가적으로 필요합니다.
6년 전
zerocho님 답변 감사합니다. 익명타입이라 회원가입 후 다시 리플을 다네요 ^^;; https를 지원하더라도 로그인 세션이나 이런 부분들과는 관계가 전혀 없는건가요?.
6년 전
넵 없습니다. 세션은 클러스터링과 더 관련이 많아요
6년 전
안녕하세요 zerocho님 궁금한점이 있어 질문을 남깁니다. https를 적용하면 클러스터링 이슈 말고는 딱히 개발 하는데 이슈가 없나요? 예로 로그인 기능을 개발한다던가 등등이요... 백엔드에 입문하고 있어 많이 헷갈리네요.
6년 전
Https 사실상 필수입니다. 개발 이슈는 딱히 없습니다. 클러스터링도 별 문제는 못 느꼈습니다.