본문 바로가기
2023년 이전/Web&Server

OpenSSL을 사용해서 Https 서버 open

by JeongUPark 2019. 11. 28.
반응형

이번 글에서는 구축하는 방법만을 설명하겠습니다.

 

다음 글에서 OpenSSL 사용 방법 및 상세 내용들을 정리하도록 하겠습니다.

 

Sever 연동을 만들고 나서 보안관련 사항을 위해 https 서버를 구축하였다. https 사용하기 위해서는 SSL 이라는 인증서가 필요합니다.

간단하게 http, https, ssl에 대한 설명을 하자면.

 

Http - Hypertext Transfer Protocol 의 약자. Hypertext인 HTML을 전송하기 위한 통신 규약을 의미

Https -  S는 Over Secure Socket Layer의 약자로 Secure라는 말을 통해서 알 수 있듯이 보안이 강화된 HTTP. Https는 SSL 위에서 구동되는 프로토콜 중 1개

SSL - SSL 인증서는 클라이언트와 서버간의 통신을 제3자가 보증해주는 전자화된 문서

 

입니다.

그래서 SSL을 구하기위해 생활코딩에서 알려주는 무료 ssl 인증서 제공하는 startcom Ca는 2018 . 01.01을 기점으로 종료 되습니다. 그리고 다른 여러방식을 찾아봤지만 Test를 위한 ssl를 제공해주는 Ca 사이트가 없었습니다. 

CA란 CA (Certificate Authority) 디지털 인증서를 제공하는 공인된 기업 (Certificate Authority 혹은 Root Certificate) 을 말합니다.

 

그래서 더 구글링을 해보니 OpenSSL이라는 오픈 소스를 통하여 SSL을 만들 수 있었습니다.

(1. OpenSSL은 네트워크를 통한 데이터 통신에 쓰이는 프로토콜인 TLS와 SSL의 오픈 소스 구현판이다.

 2. 생활코딩을 보면 무료 SSL 하는 방법이 나오는데 그 사이트가 2018.01.01부로 문을 닫았다)

 

OpenSSL은 다운로드하는 방법이 많던데 전 OepnSSL 사이트에 적혀있는 github에서 다운로드받아 사용했습니다.

 

다운로드 받은 후 압축을 풀어 줍니다.

 

그리고 그 압축을 풀어준 폴더에서 cmd를 열어 다음 명령어를 수행합니다.

 

 

openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365

위 cmd의 의미는 x509 인증서 형태로 새로운키를 만드는데, rsa:4096 방식으로 key.pem으로 공개키를 만들고 cert.pem으로 비공개키를 만듭니다. 그리고 기간은 365일로 한다는 의미입니다. (여기서 rsa란 공개키 암호시스템의 하나로, 암호화뿐만 아니라 전자서명이 가능한 최초의 알고리즘 입니다.)

 

(위에 이미지에서 PEM Pass phrase는 인증서 비밀번호입니다.)

그러면 cert.pem 과 key.pem 두개가 생성 됩니다.

 

SSL의 방식중 공개키라는 방식이있는데 이 방식은

 

1. 비공개키는 자신만이 가지고 있고, 공개키를 타인에게 제공한다.

2. 공개키를 제공 받은 타인은 공개키를 이용해서 정보를 암호화한다.

3. 암호화한 정보를 비공개키를 가지고 있는 사람에게 전송한다.

4. 비공개키의 소유자는 이 키를 이용해서 암호화된 정보를 복호화 한다. 

 

의 방식입니다.

 

생성된 key 2개를 Server code들이 있는 폴더에 옮긴 후 coding을 다음과 같이 합니다.

 

var ip = require('ip');
var http = require('http');
var https = require('https');
const fs = require('fs');
const option = {
   key: fs.readFileSync('key.pem', 'utf8'),
    cert: fs.readFileSync('cert.pem', 'utf8'),
    passphrase:'비공개 키 만들 때 설정한 비밀번호'
};

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

//Start server
http.createServer(app).listen(8080,function() {
  console.log('http://' + ip.address() + ':' + 8080+ "| start time : "+new Date());
});
https.createServer(option,app).listen(3000,function() {
  console.log('https://' + ip.address() + ':' + 3000+ "| start time : "+new Date());
});

module.exports = app; 

식으로 코딩을 작성하면 됩니다. (프로젝트 때 사용한 code를 가져왔기 때문에 전부다는 적을 수 없고 http 및 https로 server를 start 할때 중요한 code들만 남겨놓고 다 삭제하고 테스트를 해보진 않아서 정상 동작 하지 않을 수 있습니다. 방식만 참고하면 좋을 것 같습니다.)

 

그래서 server를 시작하고 브라우저에서 실행을 하면

 

위와 같이 브라우저에 나타나고 고급을 눌려  ~로 이동을 눌려 사이트에 접속을 하면

성공 적으로 작동하는 것을 볼 수 있습니다. 하지만 주의 요함이라고 뜬 이유는 오픈소스인 OpenSSL 사용한 인증서로 위에서 말한 CA가 아니기 때문입니다. (CA에서 발행한 인증서라면 브라우저에서 그 리스트를 가지고 있어서 주의 요함이라는 문구가 나타나지 않습니다.)

 

아무튼 hppts로 동작함을 확인 했습니다. 다음번에 각각의 내용에 대하여 상세히 다뤄보도록 하겠습니다.

 

 

참고

https://opentutorials.org/course/228/4894

 

HTTPS와 SSL 인증서 - 생활코딩

HTTPS VS HTTP HTTP는 Hypertext Transfer Protocol의 약자다. 즉 Hypertext 인 HTML을 전송하기 위한 통신규약을 의미한다. HTTPS에서 마지막의 S는 Over Secure Socket Layer의 약자로 Secure라는 말을 통해서 알 수 있듯이 보안이 강화된 HTTP라는 것을 짐작할 수 있다. HTTP는 암호화되지 않은 방법으로 데이터를 전송하기 때문에 서버와 클라이언트가 주고 받는 메시지를 감청하는 것이

opentutorials.org

https://ko.wikipedia.org/wiki/OpenSSL

 

OpenSSL - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. OpenSSL은 네트워크를 통한 데이터 통신에 쓰이는 프로토콜인 TLS와 SSL의 오픈 소스 구현판이다. C 언어로 작성되어 있는 중심 라이브러리 안에는, 기본적인 암호화 기능 및 여러 유틸리티 함수들이 구현되어 있다. OpenSSL은 Eric A. Young과 Tim Hudson이 만든 SSLeay에 그 근거를 두고 있다. SSLeay의 개발은 Young과 Hudson이 RSA Security로 적을 옮긴 1998년 1

ko.wikipedia.org

https://ko.wikipedia.org/wiki/RSA_%EC%95%94%ED%98%B8

 

RSA 암호 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 둘러보기로 가기 검색하러 가기 RSA는 공개키 암호시스템의 하나로, 암호화뿐만 아니라 전자서명이 가능한 최초의 알고리즘으로 알려져 있다. RSA가 갖는 전자서명 기능은 인증을 요구하는 전자 상거래 등에 RSA의 광범위한 활용을 가능하게 하였다. 1978년 로널드 라이베스트(Ron Rivest), 아디 샤미르(Adi Shamir), 레너드 애들먼(Leonard Adleman)의 연구에 의해 체계화되었으며, RSA라는 이름은

ko.wikipedia.org

https://www.lesstif.com/pages/viewpage.action?pageId=7635159

 

OpenSSL 자주 쓰는 명령어(command) 및 사용법, tip 정리

HTTPS 설정, 데이타 암복호등 OpenSSL 을 활용할 일이 많으므로 사례별로 자주 사용하는 명령어를 정리했습니다.

www.lesstif.com

 

반응형