[S3U6] 네트워크 심화-실습

👽·2024년 5월 8일
0
post-thumbnail

HTTPS 사설 인증서 발급 및 서버 구현

📌 인증서 생성

🔸 mkcert : 로컬 환경(내 컴퓨터)에서 신뢰할 수 있는 인증서를 만들수 있는 프로그램.

// Ubuntu 환경에서 설치하기
$ 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/

인증서 생성

🔸 아래의 명령어를 통해 로컬을 인증된 발급기관으로 추가.

mkcert -install

🔸 로컬 환경에 대한 인증서를 만들려면 다음 명령어를 입력.

$ mkcert -key-file key.pem -cert-file cert.pem localhost 127.0.0.1 ::1
  • 옵션으로 추가한 localhost, 127.0.0.1(IPv4), ::1(IPv6)에서 사용할 수 있는 인증서가 발급 됨.

🔸 cert.pem, key.pem 이라는 파일이 생성된 것을 확인할 수 있음.

  • cert.pem : 공개 키와 인증기관의 서명을 포함하고 있는 인증서(certificate). (공개되어도 무관)
  • key.pem : 개인 키. (공개되면 안됨, git에 커밋하지 않고, 암호처럼 다루어야 함)

📍 이때 발급 받은 key와 cert의 저장 경로를 알고 있어야, 나중에 활용할 수 있음.

📌 HTTPS 서버 작성

🔸 HTTPS 서버를 작성하기 위해서 두 가지 방식을 활용할 수 있음.

  • Node.js의 https 내장 모듈 이용.
  • express.js 이용.

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);
  • __dirname : 현재 실행 중인 폴더 경로

🔸 터미널에 node 파일명.js로 서버 실행 후, https://localhost:3001 로 접속하면 브라우저의 url 창 왼쪽에서 HTTPS 프로토콜을 이용한다는 것을 알 수 있음.

express.js

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

https
  .createServer(
    {
      key: fs.readFileSync(__dirname + '/key.pem', 'utf-8'),
      cert: fs.readFileSync(__dirname + '/cert.pem', 'utf-8'),
    },
    app.use('/', (req, res) => {
      res.send('Congrats! You made https server now :)');
    })
  )
  .listen(3001);

ngrok으로 터널링하기

📍 로컬에서 개발한 애플리케이션을 외부로 공유할 때(호스팅), 아래와 같이 두가지 상황이 존재

  • 배포를 통한 외부 공유 : Amazon의 AWS, Microsoft의 Azure, Google의 GCP, Naver의 NCP 등.
  • ngrok을 활용한 외부 공유 : 일정 시간동안만 외부로 공유하는 상황일 때 사용

ngrok

🔸 ngrok : HTTP로 만들어진 서버를 HTTPS 프로토콜로 터널링 해주는 프로그램.

  • 터널링(tunneling) : 네트워킹에서 터널은 해당 네트워크에서 지원하지 않는 프로토콜을 사용하여 네트워크를 통해 데이터를 전송하는 방법. 캡슐화 후 전송된 목적지에서 역캡슐화 하는 전체의 과정.

ngrok 사용법

1. 링크의 다운로드 설명대로 ngrok 설치

// Linux 기준
curl -s https://ngrok-agent.s3.amazonaws.com/ngrok.asc \
	| sudo tee /etc/apt/trusted.gpg.d/ngrok.asc >/dev/null \
	&& echo "deb https://ngrok-agent.s3.amazonaws.com buster main" \
	| sudo tee /etc/apt/sources.list.d/ngrok.list \
	&& sudo apt update \
	&& sudo apt install ngrok

🔸 ngrok을 불편함 없이 사용하기 위해 authtoken을 추가하기를 권장.
🔸 기존에 미등록 회원일 시, 2시간짜리 세션을 받지만 회원가입 후 authtoken을 사용하면 장시간의 세션을 받을 수 있음.

ngrok config add-authtoken <authtoken>

2. 실행하기

🔸 서버가 실행된 상태에서 터미널에

ngrok http https://localhost:<PORT번호>

🔸 혹은 로컬 환경에서 애플리케이션이 예를 들어 포트 번호 8080에서 구동되고 있다면, 터미널에서 아래처럼 입력해도 됨.

ngrok http 8080

항목 설명

🔸 실행하면 아래 사진과 같은 정보들이 대시보드 형태로 보임.

🔸 Session Status : 세션의 활성 상태. online일 경우, 세션이 정상적으로 살아있음을 의미.
🔸 Account : ngrok에 가입된 사용자 정보
🔸 Region : ngrok agent가 터널을 호스팅하기 위한 region을 의미
🔸 Web Interface : ngrok 대시보드를 UI로 제공하는 URL. request에 대한 분석, connection, 세부 옵션 등에 대한 상태를 제공
🔸 Forwarding : ngrok에서 제공하는 터널 URL로, 이 URL을 통해 외부에서도 로컬 환경에 접근할 수 있음.
🔸 Connections : ngrok에서 제공하는 터널에 대한 connections 관련 정보.

profile
코린이👽

0개의 댓글