본문 바로가기
개발 학습/백엔드

로컬환경에서 CA 인증과 HTTPS 서버열기

by StelthPark 2022. 6. 28.

https에는 인증서라는 것이 있다.

브라우저는 접속시 서버로 부터 응답을 받게 되는데 이 응답에는 인증서가 있고 인증서는 발급한 CA정보가 있으며 인증된 CA가 아닌 곳에서 발급한 인증서라면 크롬에서 자주보이는 아래와 같은 화면을 볼 수 있다.

 

이렇게 브라우저는 인증서의 도메인과 데이터를 제공한 도메인을 비교해 중간자 공격을 감지하게 된다.

여기서 CA란 공인인증기관을 말한다. 우리는 서버를 만들어볼 것이고 서버는 CA가 될 조건을 갖춰서 정식 CA가 될 순없으므로 임시로 CA가 되도록 하고 인증서를 발급해 클라이언트가 접속하면 인증서를 보내보자.

 

mkcert라는 프로그램을 이용하여 로컬환경 즉 내가 만드는 서버에서도 신뢰하는 인증서를 만들 수 있다.

우분투 경우 아래 명령어로 설치를 시작해보자

 

$ sudo apt install libnss3-tools
$ wget -O mkcert https://github.com/FiloSottile/mkcert/releases/download/v1.4.3/mkcert-v1.4.3-linux-amd64
$ chmod +x mkcert
$ sudo cp mkcert /usr/local/bin/

 

설치가 완료 됬다면 앞서말한것처럼 로컬 즉 내컴퓨터를 CA기관처럼 신뢰하는 기관으로 되도록 설정해주어야한다.

KEY와 CERT를 만들어서 이후에 HTTPS 을 열때 사용하자 인증서는 공개키, 그리고 인증기관의 서명을 포함하고 있으므로 공개되어도 상관이 없지만, key.pem의 경우 개인 키이므로 git에 커밋하지 않고, 암호처럼 다루어야 한다

 

cert.pem과 key.pem을 만들어보자.

$ mkcert -key-file key.pem -cert-file cert.pem localhost 127.0.0.1 ::1

 

NODE.JS로 HTTPS 서버 여는 코드 예시

const https = require('https');
const fs = require('fs');

https
  .createServer(
    {
      key: fs.readFileSync(__dirname + '/key.pem', 'utf-8'), //개인키
      cert: fs.readFileSync(__dirname + '/cert.pem', 'utf-8'), //공개키
    },
    function (req, res) {
      res.write('Congrats! You made https server now :)');
      res.end();
    }
  )
  .listen(3001);

댓글