Windows 환경에서 mkcert를 사용하자

mkcert를 사용하자…

https://github.com/FiloSottile/mkcert

mkcert github에 방문하시면 Windows를 지원하지만

Chocolatey 또는 Scoop을 사용하라는 메시지가 표시됩니다.

Scoop에 대해 잘 모르지만 Chocolatey는 Windows용 패키지 관리자입니다.

Mac의 Homebrew와 유사한 패키지 관리자입니다.

한번 설치하시면 사용이 매우 쉬우니 꼭 사용해보세요.

수많은 응용 프로그램을 매우 쉽게 설치할 수 있습니다.

하지만 오늘은 Chocolatey 사용법을 다루지 않을 것입니다.

찾아서 설치하세요.


Windows에서 설치하라는 메시지가 표시됨

먼저 chokolatey가 잘 설치되었는지 확인합니다.

powershell에서 choco 명령을 입력해 봅시다.

choco


이렇게 버전이 잘 나온다면 설치가 잘 된겁니다!

choco install mkcert

설치하려면 Github 설명서의 지침을 따르십시오.

관리 권한이 제대로 부여되지 않은 경우 접근이 거부되었다는 오류가 발생할 수 있습니다.

powershell을 관리자 권한으로 실행해 보십시오.

cmd 환경의 경우는 해보지 않아서 모르겠습니다.

그렇지 않다면 powershell을 사용해보십시오

mkcert -install

mkcert가 잘 설치되었다면 위의 명령어를 사용합니다.

로컬을 승인된 발급자로 추가합니다.


위 명령어를 입력하면 위와 같은 보안경고가 뜬다.

좀 무섭지만 설치해보겠습니다.

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

설치가 완료되면 위 명령어를 입력하여 인증서를 완성합니다.

localhost / 127.0.0.1(IPv4) / ::1(IPv6)에서 사용할 수 있는 인증서를 만들고 싶다는 뜻입니다.

C:\Windows\System32에 key.pem과 cert.pem이 생성된 것을 확인할 수 있습니다.

key.pem은 개인키이므로 유출되지 않도록 잘 관리해야 합니다.

반면 cert.pem은 서버의 공개 키와 서버 정보를 포함하는 디지털 인증서입니다.

파일의 저장 경로를 잘 기억하고 이제 node.js 환경에서

https 서버를 열어봅시다.


node.js의 http 모듈을 사용하여 https 서버 열기

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

const keyPath = path.join('C:', 'Windows', 'System32', 'key.pem');
const certPath = path.join('C:', 'Windows', 'System32', 'cert.pem');

https
  .createServer(
    {
      key: fs.readFileSync(keyPath),
      cert: fs.readFileSync(certPath),
    },
    function (req, res) {
      res.write('Congrats! You made https server now :)');
      res.end();
    },
  )
  .listen(3001);

path.join 메서드를 사용하여 경로를 일치시켰습니다.

자신의 key.pem과 cert.pem이 어디에 저장되어 있는지 확인하고 작성해주세요.

복사 붙여넣기를 바로 하면 폴더 구조가 저와 다른 경우 오류가 발생할 수 있습니다.

https://로컬호스트:3001/

이제 위의 링크를 클릭하면


이렇게 하면 프로토콜이 https로 변경되고 잠금 모양이 생성된 것을 확인할 수 있습니다!


익스프레스 사용

const https = require('https');
const fs = require('fs');
const express = require('express');
const app = express();
const path = require('path');

const keyPath = path.join('C:', 'Windows', 'System32', 'key.pem');
const certPath = path.join('C:', 'Windows', 'System32', 'cert.pem');

https
  .createServer(
    {
      key: fs.readFileSync(keyPath),
      cert: fs.readFileSync(certPath),
    },
    app.use('/', (req, res) => {
      res.send('Congrats! You made https server now :)');
    }),
  )
  .listen(3001);

엔딩

간단한 연습을 딱 한 번 해봤는데, 시작하기는 쉽고 마스터하기는 어려운 것 같아서 걱정입니다.

실전에서 이렇게 사용하기 쉬웠으면 좋겠습니다.



가장 무서운 때는 이해한다고 생각할 때입니다.