04-26 20:29
Notice
Recent Posts
Recent Comments
관리 메뉴

Scientific Computing & Data Science

[Programming / WebApp] Node.js에서 HTTPS 서버 구축하기 본문

Programming/Web App

[Programming / WebApp] Node.js에서 HTTPS 서버 구축하기

cinema4dr12 2016. 10. 3. 16:39

이번 글에서는 Node.js에서 개발용 인증서를 통해 HTTPS 서버 구축하는 방법에 대해 알아보도록 하겠습니다.


SSL 인증서의 개념 및 대한 자세한 내용은 다음 사이트를 참고하기 바랍니다:


Node.js에서 HTTPS 서버를 구축하는 방법에 대한 참고 사이트는 다음과 같습니다:

OpenSSL 다운로드

본 튜토리얼은 Windows OS 환경에서 진행하겠습니다.


우선 다음 사이트에서 Windows용 OpenSSL 설치 파일을 다운받습니다:

http://slproweb.com/products/Win32OpenSSL.html



참고로 "Win64 OpenSSL v1.1.0b"를 다운받아 설치하였는데, 인스톨 안내 페이지의 마지막에 기부(Donation)를 하겠냐고 묻습니다.


기부를 원치 않는다면 체크를 해제하도록 합니다.


설치된 경로는 "C:\OpenSSL-Win64"이며 각자의 상황에 따라 다를 수 있습니다. 이 설치된 경로를 환경변수의 Path에 추가하도록 합니다.

개인키 발급

Windows Command Line Tool을 관리자 권한으로 실행합니다. (반드시 관리자 권한으로 실행해야 합니다. 관리자 권한으로 실행하지 않을 경우 키 생성을 실패할 수 있습니다.)


키를 생성하고자 하는 경로로 이동하여 다음 명령을 입력하여 개인키를 발급합니다.


> openssl genrsa 1024 > private.pem


private.pem을 텍스트 편집기를 통해 열면 다음과 비슷한 파일을 확인할 수 있습니다.


-----BEGIN RSA PRIVATE KEY-----

MIICXQIBAAKBgQDJw8MRrg9au/09TPYmrvY3yQQasTcf8za4wN4ktjnxfbTPGnu5

7uRI+ByEIHkX4TBqie9DU/Xzsy7rBKXAXT5GnKUld1lLryFZd79HhjlH7xJYt8Co

2tTjzWYWPcLdq9IvtYTg8beiK0EHRnBLCMZ7jrvOkiVXM1bpWFvkh2GZZQIDAQAB

AoGABek2Tc5LpNzdDm6yx29Yx0mcVSvb8ZOuhrsfxvOPvwNvyKF9/nSBO6IJM9W/

tnNid7ySxeYvznPxa/E26evRZzLNdPYzO50H9CX8QMpCDJiuvrrL0Zh0dSopo9/t

LhqB8WTtWenTTRUlzZGeQ8zoblu0+ITo+0ij8ijLEdIg6gECQQD7OUsdVq4zFONB

oxzXDT28/OSQHCk2t8Rk1GCcdTX8VLiTYg+DrnmKDeriuog58E2sLcHWAsQOwhmJ

OGFET0mDAkEAzZnAQ5WSyF+BJx+HrssgOzz/rsT6zfksZHY840vIyzecnglfaAHW

b7+Md3cr/COcRD6NjQBqZK8a6RuykaPk9wJBAKhEX8Nu447jVrQIBLEl9Uw4Nv8v

XYuA2tKOTYd+GoLAXECbVbjljBKj78edGNF12xCQNVyazab06xW15bBTSvECQQCa

AOr1NNqn4HHbnlCB64EPHlfez4mWM2i/L5nYH/Id1mAoOJkQTSAUwIQ1ED0QNpRc

wgZBceg/1rHvnmGZmgxtAkAFAxsEV3oHZFmH8OGGdoQeYVCug2AoRFhaMFqv21cK

LbITitp4tNXLmXdNxU81z8b4Olf3xMVOe5Bj+qC8urGf

-----END RSA PRIVATE KEY-----

공개키 생성하기

다음 Command Line 명령을 통해 공개키를 생성합니다:


> openssl req -x509 -new -key private.pem > public.pem


생성된 공개키는 다음과 비슷할 것입니다.


-----BEGIN CERTIFICATE-----

MIIC1zCCAkCgAwIBAgIJAMhUWRgDKk07MA0GCSqGSIb3DQEBCwUAMIGCMQswCQYD

VQQGEwJLUjELMAkGA1UECAwCS1kxDjAMBgNVBAcMBVNFT1VMMREwDwYDVQQKDAhB

TFBJTklPTjENMAsGA1UECwwESElGVTEOMAwGA1UEAwwFR0NIT0kxJDAiBgkqhkiG

9w0BCQEWFWNpbmVtYTRkcjEyQGdtYWlsLmNvbTAeFw0xNjEwMDQxMjExMTNaFw0x

NjExMDMxMjExMTNaMIGCMQswCQYDVQQGEwJLUjELMAkGA1UECAwCS1kxDjAMBgNV

BAcMBVNFT1VMMREwDwYDVQQKDAhBTFBJTklPTjENMAsGA1UECwwESElGVTEOMAwG

A1UEAwwFR0NIT0kxJDAiBgkqhkiG9w0BCQEWFWNpbmVtYTRkcjEyQGdtYWlsLmNv

bTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAycPDEa4PWrv9PUz2Jq72N8kE

GrE3H/M2uMDeJLY58X20zxp7ue7kSPgchCB5F+EwaonvQ1P187Mu6wSlwF0+Rpyl

JXdZS68hWXe/R4Y5R+8SWLfAqNrU481mFj3C3avSL7WE4PG3oitBB0ZwSwjGe467

zpIlVzNW6Vhb5IdhmWUCAwEAAaNTMFEwHQYDVR0OBBYEFCpu6zZQNWlEXounidqn

+n7Lu7/WMB8GA1UdIwQYMBaAFCpu6zZQNWlEXounidqn+n7Lu7/WMA8GA1UdEwEB

/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADgYEAkHrUX+3z6zw5rxl0FiR4f5Jnk0MH

Gu4wAgHy3J/YMdH+eFIQhyfJd1B8k6efsdev2nhiGVY0v653q/2NA9RJWpH+blfN

0jFwKZwhPIB5UXFjAHb/D936p6s2QjM6TQ9oJSGUFQd6zCiTH43Hu5EemxON7UYG

++l1a96Q+wEUSk8=

-----END CERTIFICATE-----

app.js 코드 작성

우선 Express Framework으로 생성한 Node.js Project의 Root 경로에 "keys" 폴더를 생성하고, 이 경로에 앞서 생성한 두 개의 SSL 키를 저장하였습니다.

"app.js" 코드에 다음과 같이 옵션을 지정합니다:


const options = {
	key: fs.readFileSync('./keys/private.pem'),
	cert: fs.readFileSync('./keys/public.pem')
};


그리고, 다음과 같이 서버를 생성합니다. Port 번호는 3000으로 하였습니다:


https.createServer(options, app).listen(3000, function() {
  console.log("HTTPS server listening on port " + 3000);
});

결과 테스트

이제 서버를 실행하고, 웹브라우저의 주소창에 다음을 입력하여 결과를 테스트합니다:

https://localhost:3000/



인증서를 확인하는 안내 창이 뜨면 성공한 것이다.

Comments