반응형

node.js 의 express 서버로 SSL 을 이용하고자 한다면 인증서를 발급받아야 한다. 인증서는 인증 기관에 구입하거나 무료 인증서를 발급받아서 처리해야 하는데, 이번 포스팅에서는 Let's Encrypt라는 무료 인증 발급 기관에서 인증서를 발급받아서 SSL이 적용된 express를 이용해 보도록 하겠다.


1. DNS 준비

 SSL 인증서와는 별개로 DNS가 준비 되어 있어야 한다. 필자는 synology nas를 이용하고 있어서 synology 의 DNS를 이용한다. (---.synology.me)


2. Linux Console에서 인증서 받기

 let's encrypt 는 let's encrypt client를 이용해서 사용해서 다운로드 가능하다. 필자의 서버 환경은 raspberry pi 에 raspbian-jessie-lite를 설치하였다. 다음의 명령어로 client를 다운로드 한다.


wget https://dl.eff.org/certbot-auto


 chmod +x certbot-auto 로 실행 가능하게 한다.


node.js 기반으로 인증서를 받으려면 


 1) let's encrypt client 가 challenges 를 설정할 수 있는, DNS 로 접근 가능한 웹서버가 있어야 한다. 

예를 들어 /home/test/webserver에 express 서버인 app.js 가 있고 /home/test/webserver/static 이 / 로 http로 접근 가능한 폴더라고 한다면 다음과 같이 app.js를 만들어서 /home/test/webserver/static 의 파일을 해당 DNS 로 http 접근이 가능하게 한다.


const express=require('express');

const webapp=express();

const http=require('http');

webapp.use(express.static(__dirname+'/static'));

const webServer=http.createServer(webapp).listen(80,()=>{

        console.log('Web Server Started');

});


 2) certonly, webroot 옵션으로 certbot-auto 를 실행한다.


 ./certbot-auto certonly --webroot 



3. express 서버의 ssl_options 설정하기

 인증서를 받았으면 ssl_options을 다음과 같이 설정한다.

const ssl_options={

        cert:fs.readFileSync('/etc/letsencrypt/live/[yourdomain.com]/fullchain.pem'),

        key:fs.readFileSync('/etc/letsencrypt/live/[yourdomain.com]/privkey.pem')

}; 


 그리고 express app 을 다음과 같이 https 서버를 생성한다.

const sslapp=express();

sslapp.post ..

sslapp.get ...

const sslserver=https.createServer(ssl_options,sslapp).listen(443,()=>{

});


참고로

Let's Encrypt 는 HTTPS를 사용하기 위해 SSL을 구매해야 하는 부분이 HTTPS 보급에 방해된다고 생각해서 SSL을 무료로 제공해서 HTTPS를 보급하기 위해 만들어졌다고 한다. 모질라, 구글 등이 주요 Sponsor로 되어 있다.



반응형
Posted by alias
,