[Node.js] HTTPS 서버 구현하기[Node.js] HTTPS 서버 구현하기
Posted at 2020. 5. 20. 18:22 | Posted in Node.js※ 해당 포스팅은 AWS EC2 서버에서 node.js v14.3.0 버전으로 테스트한 내용입니다.
참고 : https://nodejs.org/api/https.html
참고 : https://mylko72.gitbooks.io/node-js/content/chapter7/chapter7_5.html
참고 : https://lahuman.github.io/cet_key_to_pem
node.js의 socket.io를 이용한 통신을 해야하는 경우가 생겼다.
문제는 https 서버에서 socket통신을 이용하는 경우 "혼합된 컨텐츠 차단", "크로스 도메인 이슈" 에러가 발생하여
해결을 위해 이 경우 HTTPS 서버를 구현하여 해결하였다.
■ HTTPS란?
하이퍼텍스트 전송 프로토콜 보안( HTTPS, Hypertext Transfer Protocol Secure )은 HTTPS 클라이언트와 서버간에 안전한 통신을 제공하는 통신 프로토콜이다.
HTTPS는 보안 기능을 확보하기 위해 전송층 보안( TLS, Transport Layer Security ) / 보안 소켓층( SSL, Secure Sockets Layer ) 프로토콜 위해 HTTP를 구현한 것이다.
HTTPS는 두 가지 방식으로 보안 기능을 제공한다.
첫번째로 단기간에 사용되는 세션 키 교환을 위해 장기간 사용되는 공개 키와 비밀 키를 사용해 클라이언트와 서버간 데이터 암호화를 진행한다.
또한 인증 기능을 통해 접속하련느 웹 서버가 의도한 서버가 맞는지 확인해 중간자 공격을 방지할 수 있다.
■ HTTPS 서버와 HTTPS 클라이언트를 구현
#01. https 모듈 설치
먼저 https 모듈을 설치해야 한다.
$ npm install https |
#02. crt, key 파일을 pem 파일로 변환하기
※ 해당 cert, key 파일은 AWS EC2에서 제공되는 cert, key 파일을 사용하였다.
( 참고 : )
HTTPS 인증서를 node.js에서 바로 사용하기 위해서는 pem 파일 형식으로 변환하는 작업이 꼭 필요하기에
아래와 같이 작업을 진행해 보도록 하자.
01) KEY 파일 변경하기
$ openssl rsa -in custom.key -text > agent-key.pem |
02) CRT 파일 변경
$ openssl x509 -inform PEM -in custom.crt > agent-cert.pem |
#03. HTTPS 서버 실행
# 소스코드
https.server.app.js |
|
const https = require( "https" ); const fs = require( "fs" ); // HTTPS 클라이언트 생성 const options = { hostname : "wickedmiso.com" , port : 443 , path : "/" , method : "GET" , key : fs.readFileSync( "/etc/pki/tls/private/agent-key.pem", "utf8" ) , cert : fs.readFileSync( "/etc/pki/tls/certs/agent-cert.pem", "utf8" ) , agent : true }; options.agent = new https.Agent( options ); // HTTPS 서버 생성 https.createServer( options, ( req, res ) => { res.writeHead( 200 ); res.end( "HTTPS, Hypertext Transfer Protocol Secure\n" ); }).listen( 52273, function() { console.log( "Server Running at https://localhost:52273" ); }); |
// 도메인 주소 // https 기본 포트 443 // key 옵션은 SSL을 위한 개인키를 지정한다. // cert값은 사용할 x509 공개키를 지정한다. // 크로스 브라우저 처리를 위한 userAgent 프로퍼티 // 맞춤형 Agent 객체를 생성한다. // agent : false인경우 주석처리하여 비활성화 한다. |
# 출력결과
'Node.js' 카테고리의 다른 글
[Node.js] 디렉토리내의 파일 정보 가져오기 (0) | 2020.09.07 |
---|---|
[Node.js] exceljs를 이용하여 Excel 파일 읽기 (0) | 2020.08.20 |
[Node.js] socket 통신으로 파일 업로드 하기 (0) | 2020.05.14 |
[Noe.js] 실행시 값 입력하기 (0) | 2020.05.04 |
[Node.js] Email 발송하기 (0) | 2020.05.01 |