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);
'개발 학습 > 백엔드' 카테고리의 다른 글
실 코딩 연습 (0) | 2021.11.05 |
---|---|
S2: Request query.? 와 params.id? (0) | 2021.10.13 |
S2: Express 사용하여 분기점 라우팅 (0) | 2021.10.12 |
S2: Nodemon과 inspect디버깅 (0) | 2021.10.12 |
S2: CORS와 클라이언트-서버간 요청/응답 (0) | 2021.10.12 |
댓글