이번 글에서는 구축하는 방법만을 설명하겠습니다.
다음 글에서 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://ko.wikipedia.org/wiki/OpenSSL
https://ko.wikipedia.org/wiki/RSA_%EC%95%94%ED%98%B8
https://www.lesstif.com/pages/viewpage.action?pageId=7635159
'2023년 이전 > Web&Server' 카테고리의 다른 글
NodeJs란 ? 그리고 왜 사용하였는가? (0) | 2019.12.02 |
---|---|
Http 와 Https 그리고 SSL (0) | 2019.12.02 |
Docker에서 mySql 실행하기 - container 접속하기 (0) | 2019.12.02 |
Docker 실행 해보기! (0) | 2019.12.02 |
Docker - Docker란 무엇이고 왜 사용했는가? (0) | 2019.12.02 |