일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 페이스북유니버시티 #마케팅교육 #마케팅캠프
- html #js #parsing
- #국제채권시장 #유로본드 #유로커런시 #유로달러 #외국채 #금융중개기관 #간접금융 #거래비용#다우존스공업평균지수 #나스닥종합지수 #FTSE100 #DAX #CAC40 #straittimes #항생지수 #거래비용 #유동성 #위
- #경제상식 #화폐 #금융 #화폐금융론 #경제학 #경제기본 #경제지식 #경제근육 #투자지식 #경제공부 #경제학전공 #금융이란 #화폐란 #금융시장 #금융시장역할 #화폐역할 #화폐역기능 #금융역기능 #
- vp #vc #did #신원인증 #블록체인
- 블록체인 #layer2 #레이어2 #이더리움스케일링
- 자료구조 #알고리즘
- 미쉬킨의화폐와금융 #미쉬킨 #화폐금융론 #화폐와금융 #경제학 #교양 #경제지식 #경제공부
Archives
- Today
- Total
평행우주 : world 1
[인증 | 보안] HTTPS 프로토콜 개념과 서버 구현 방법 본문
🔐
HTTPS 프로토콜
- HTTPS(Hyper Text Transfer Protocol Secure Socket layer)
- HTTP over SSL(TLS), HTTP over Secure
- HTTPS는 HTTP 요청을 SSL 혹은 TLS라는 알고리즘을 이용해, HTTP 통신을 하는 과정에서 내용을 암호화하여 데이터를 전송하는 방법
- 인증에서 HTTPS 프로토콜을 사용해야만 하는 이유는 HTTP보다 상대적으로 안전한 방법이고,
- 데이터 제공자의 신원을 보장받을 수 있기 때문
데이터 제공자의 신원을 확인하고 보장받는 게 인증에서 중요한 이유
- 클라이언트는 데이터 제공자가 제공해준 데이터를 사용할 수밖에 없다
- 클라이언트는 서버에 데이터 요청을 하고 이후 받은 데이터를 이용해서 화면을 렌더링하는 등의 작업을 해야 한다
- 때문에 요청 및 응답을 중간에서 가로채는 중간자 공격에 취약
- '중간자 공격'은 클라이언트와 서버 사이에서 공격자가 서로의 요청, 응답의 데이터를 탈취 및 변조하여 다시 전송하는 공격
- 중간자 공격으로 인해 이런 추가 데이터 또한 변조할 수 있기 때문에 해당 데이터를 암호화시키는 작업이 필요함
암호화
- HTTPS 프로토콜의 특징 중 하나는 암호화된 데이터를 주고받는 것
- 때문에 중간에 인터넷 요청이 탈취되더라도 그 내용을 알아볼 수 없다
- 반면, HTTP 프로토콜은 요청 및 응답을 탈취한다면 프로그램을 이용하여 아래와 같이 해당 요청으로 전달되는 데이터 내용 확인 가능
- 데이터를 암호화하여 전송하는 HTTPS 프로토콜을 사용한다면 비밀번호와 같은 중요한 데이터가 유출될 가능성이 줄어든다
- 내용이 암호화되어 전송되기 때문에 정확한 키로 복호화 하기전까지는 어떤 내용인지 알 수 없다.
인증서
- HTTPS 프로토콜의 또 다른 특징 중 하나는 브라우저가 응답과 함께 전달된 인증서 정보를 확인할 수 있다는 것
- 브라우저는 인증서에서 해당 인증서를 발급한 CA 정보를 확인하고 인증된 CA가 발급한 인증서가 아니라면 화면에 경고창을 띄워 서버와 연결이 안전하지 않다는 화면을 보여준다.
- 이렇게 브라우저는 인증서의 도메인과 데이터를 제공한 제공자의 도메인을 비교할 수 있기 때문에 인증서의 도메인 정보와 데이터 제공자의 도메인 정보가 다른 '중간자 공격'을 감지하여 보안 위협으로부터 사용자 및 사용자의 데이터를 보호할 수 있다.
- 또한 이런 경고를 직접 보여줌으로써 브라우저들은 인증된 CA가 발급한 인증서를 이용하여 데이터를 제공하는 안전한 서버를 사용할 수 있게 사용자를 유도
사설 인증서 발급
[로컬 환경(localhost)에서 인증서 생성 후, 인증서를 이용해 HTTPS 서버 만들기]
설치
mkcert라는 프로그램을 이용해서 로컬 환경(내 컴퓨터)에서 신뢰할 수 있는 인증서를 만들자
macOS 사용자의 경우, Homebrew를 통해 mkcert 설치
$ brew install mkcert
# firefox를 사용할 경우 필요에 따라 설치해주세요.
$ brew install nss
인증서 생성
먼저 다음 명령어를 통해 로컬을 인증된 발급기관으로 추가
$ mkcert -install
이후 로컬 환경에 대한 인증서 만들기. localhost로 대표되는 로컬 환경에 대한 인증서 만드는 명령어.
$ 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 이라는 파일이 생성된 것을 확인하고 앞으로 계속 사용되니 저장경로를 기억해두자
인증서는 공개키, 그리고 인증기관의 서명을 포함하고 있으므로 공개되어도 상관이 없지만,
key.pem의 경우 개인 키이므로 git에 커밋하지 않고, 암호처럼 다루자
HTTPS 서버 작성
먼저 방금 생성한 인증서 파일들을 HTTPS 서버에 적용해줘야 한다.
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);
서버 실행 후 https://localhost:3001로 접속하면 브라우저의 url 창 왼쪽에 자물쇠가 잠겨있는 HTTPS 프로토콜을 이용한다는 것을 확인 가능
express.js 이용
다음과 같이 https.createServer의 두번째 파라미터에 들어갈 callback 함수를 Express 미들웨어로 교체해준다
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);
'텃밭 3 : BE > 인증 | 보안' 카테고리의 다른 글
[인증 | 보안] Token-based Authentication , JWT (0) | 2022.02.18 |
---|---|
[인증 | 보안] Session-based Authentication (0) | 2022.02.18 |
[실습 | 인증 보안] sprint-auth-session (0) | 2022.02.17 |
[인증 | 보안] Cookie (0) | 2022.02.17 |
Comments