서버/NodeJS

Node.js에서 https통신

닉네임못짓는사람 2021. 5. 31. 03:56
반응형

이번 글에서는 Node.js에서 https통신을 하는 법에 대해서 알아보자.

 

https통신에 대한 자세한 설명은 생략하도록 하겠다.

일단 시작하기 앞어서 가장 먼저 해야할 일은 서버의 인증서를 생성하는 것이다.

 

인증서는 유료/무료인 인증서를 발급 사이트에서 발급받아서 사용하는 방법과

서버에서 자체서명해서 사설 인증서를 상요하는 방법이 있다.

 

유료와 무료의 차이는 무료의 경우 사이트에서 데이터 유출 등의 피해가 생겼을 때 보상을 해주지 않는다는 점이다.

사설 인증서를 사용했을 때는 인증된 인증서가 아니기 때문에 아래와같은 메시지가 뜨게된다.

이 글에서는 openssl을 사용해서 사설 인증서를 생성해서 사용해보도록 하겠다.

 

먼저 openssl을 다운받아주도록 하는데, 사이트에 가서 쉽게 다운받을 수 있다.

https://sourceforge.net/projects/openssl/

 

OpenSSL

Download OpenSSL for free. This project offers OpenSSL for Windows (static as well as shared). It supports: FIPS Object Module 1.2 and CAPI engine.

sourceforge.net

다운 받았으면 이를 cmd에서 어디서든 실행시킬 수 있게 환경변수에 등록하는 과정이 필요하다.

환경변수로 들어가서 시스템 변수 -> Path -> 편집 -> 새로 만들기를 누르고

Openssl을 다운받은 경로의 bin폴더를 추가하자.

다음으론 사용자 변수에서 OPENSSL_CONF, 설정 파일의 경로를 추가해주면 끝이다.

cmd에서 확인해보면 정상적으로 실행되는것을 볼 수 있다.

 

그러면 다음으로 인증서를 만들어볼텐데, 인증서에 공개키, 서명 등이 들어가기 때문에 먼저 RSA 키쌍을 생성해야 한다.

위와 같이 2048비트 RSA키쌍을 생성해준다.

이때 비밀번호를 입력하는데 이는 우리가 생성하는 개인키에 대한 비밀번호이다.

근데 이 키가 있으면 서버 구동시마다 키를 물어보기 때문에 불편하면 지워도 무방하다.

다음은 인증서 생성 요청(CSR)을 만들어준다.

이때 국가명, 단체명, 일반이름, 확장 정보 등 인증서 생성에 필요한 정보들과 요청자의 공개키가 들어간다.

이렇게 키쌍과 CSR을 생성했으면, 이를 사용해서 우리가 원하는 인증서(.crt)를 생성해주면 된다.

이때 인증서를 서버에서 자체서명하기 때문에 신뢰성이 없는 사설 인증서가 된다.

이렇게 만들어진 인증서 파일을 살펴보면 위와같은 내용이다.

 

이제 인증서까지 만들었으니 실제로 node.js에서 https통신을 해보도록 하자.

사실은 이부분이 가장 간단하다.

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

const options_SSL = {
    key: fs.readFileSync('파일경로'),
    cert: fs.readFileSync('파일경로'),
    requestCert: false,
    rejectUnauthorized: false
};

const httpsServer = https.createServer(options_SSL, app);
httpsServer.listen(443, function() {
	console.log("HTTPS server listening on port 443);
});

이렇게 간단한 코드 몇 줄로 https통신을 구현할 수 있다.

이때 주의해야 할 점은 서버 포트를 443으로 지정해주어야 한다는 점이다.

실제로 패킷 교환이 TLS로 암호화 되는지는 wireshark로 확인해보면 확인할 수 있을것이다.

반응형

'서버 > NodeJS' 카테고리의 다른 글

node.Js에서 mysql데이터베이스 사용하기  (0) 2021.02.01