본문 바로가기

컴퓨터/NodeJS

023. SSL 인증받기

1. ssl 인증서 발급 준비

  두개의 터미널 창이 필요하다. A터미널 창에서 아래 순서로 진행한다.

~/app$ sudo apt install letsencrypt -y
~/app$ certbot certonly --manual -d 도메인네임

1. 메일 주소를 물어보면 답한다.
2. 사용 동의 질문에 동의한다.
3. 광고수신 여부에 거절한다.
4. IP 로그 동의 질문에 동의한다.
5. Create a file containing just this data: 뒷 부분의 데이터를 복사해서 메모장에 붙여둔다. 복사하기 위해 Ctrl + C를 누르면 단계가 취소된다. 

~/app$ sudo certbot certonly --manual -d 도메인네임

5번 단계로 다시 진입한다. 다음 단계로 진행하지 말고 멈춘다.


2. ssl 도메인 인증하기

  B터미널 창에서 아래 순서로 진행한다.

~/app$ vi main.js

  아래와 같이 라우팅한다.

var ssl = require("./routes/ssl/ssl.js");
app.use("/.well-known/acme-challenge/접근주소", ssl);

  접근주소는 5번 단계에서 복사해둔 데이터의 마침표 앞 부분까지이다.

~/app/routes/ssl$ vi ssl.js
var express = require("express");
var router = express.Router();

router.get('/', function(req, res, next){
  res.send("데이터");
});
module.exports = router;
~/app$ node main.js

  도메인/.well-known/acme-challenge/접근주소 로 접속했을 때, 데이터가 표시되는지 확인한다. 서버를 실행시켜 놓은 상태에서 다음 단계를 진행한다.


3. ssl 인증서 발급받기

  A터미널 창에서 Enter키를 입력해서 멈춰뒀던 진도를 진행한다. 인증이 완료되고 인증키가 설치된다. 그후에 B터미널 창에 실행되고 있는 서버를 종료한다.


4. https 서버 작성

~/app$ vi main.js

아래 내용을 추가한다.

const fs = require("fs");
const http = require("http");
const https = require("https");
const options = {
  ca: fs.readFileSync("/etc/letsencrypt/live/도메인네임/fullchain.pem"),
  key: fs.readFileSync("/etc/letsencrypt/live/도메인네임/privkey.pem"),
  cert: fs.readFileSync("/etc/letsencrypt/live/도메인네임/cert.pem")
};

마지막에 아래 내용을 추가한다.

var httpsServer = https.createServer(options, app);

https 서버는 root 권한에서만 실행할 수 있다.

/etc# chown -R ubuntu:ubuntu ./letsencrypt

이제 https 프로토콜로 접속가능하다.