꼬꼬마 블로그

꼬꼬마의 기술 블로그

2020-03-22 16:08:36 작성된 글

 


 

저번 블로그를 제작글 이후 받은 피드백중 SSL을 붙이면 좋겠다고 하셨습니다.

그래서 이번엔 HTTPS, SSL에 관해서 간단히 알아보고 직접 블로그에 HTTPS를 적용해보겠습니다.

기존 HTTP의 문제 ?

기존 HTTP의 문제는 통신되는 데이터가 암호화 되지 않는다는 것입니다. 그로 인해 데이터가 노출되거나 악의적으로 변경 될 수 있습니다.

HTTPS?

위와 같은 문제점을 보완한 것이 HTTPS입니다. HTTPS는 SSL위에서 돌아가는 프로토콜 중 하나로 HTTP + SSL을 의미합니다. 그럼 SSL이란 무엇일까요?

SSL

SSL - 위키백과

SSL(Secure Socket Layer) 프로토콜은 처음에 Netscape사에서 웹서버와 브라우저 사이의 보안을 위해 만들었다. SSL은 Certificate Authority(CA)라 불리는 서드 파티로부터 서버와 클라이언트의 인증을 하는데 사용된다.

SSL을 다루기 전에 TLS 또한 SSL과 같은 의미로 보시면 되겠습니다. 위의 정의에서 서드 파티란 제 3자를 의미합니다. 고로 SSL은 웹서버와 브라우저 사이의 보안을 위한 프로토콜으로 CA라 불리는 제 3자로 부터 서버와 클라이언트를 인증하는데 사용한다고 볼 수 있습니다. 위 인증과정에서의 발생한 전자화된 문서를 SSL 인증서라고 합니다.

암호화 ?

SSL에서 사용하는 암호화 방식은 대칭키공개키방식이 있습니다.

1. 대칭키

대칭키 암호화 방식은 하나의 키로 암호화와 복호화를 하는 방식입니다. 예를 들어 (data + 키) 암호화 알고리즘에서 키를 10으로 둔다면 30을 암호화 할때는 data + 10인 40이 됩니다. 이를 복호화 하기 위해서는 암호화된 값인 40에서 키인 10을 뺀 값으로 복호화가 가능합니다. 하지만 키가 유출 된다면 암호의 내용이 복호화 되기에 위험합니다.

2. 공개키

이 방식은 개인키와 공개키를 가지는데 공개키는 이름 그대로 공개된 키로 주로 인증서에 포함되어 있습니다. 개인키로 암호화된 내용은 공개키로 밖에 복호화를 할 수 없고, 공개키로 암호화된 내용은 개인키로 밖에 복호화가 되지 않습니다. 즉 아래의 방식으로 통신이 이루어 지는 것입니다. 클라이언트가 공개
키를 사용해 암호화를 합니다. 서버는 비밀키를 사용해 복호화를 합니다.

HTTPS에 관해 더 자세한 내용은 생활코딩 - HTTPS와 SSL 인증서 에서 살펴볼 수 있습니다.

블로그에 적용해보자 ?

일단은 백엔드에만 적용을 해보았습니다. HTTP -> HTTPS의 통신은 가능하기 때문입니다. 아래의 마지막 참고 문서를 보며 적용해보았습니다. (저는 위 참고문서와 완전히 동일한 방식으로 진행 하지는 않았습니다.) 저는 ubuntu 환경에서 아래와 같은 명령어를 작성 해 주었습니다.

$ sudo apt-get update
$ sudo apt-get install software-properties-common
$ sudo add-apt-repository ppa:certbot/certbot
$ sudo apt-get update
$ sudo apt-get install python-certbot-nginx
$ sudo certbot --nginx

중간 질문 중 HTTP를 HTTPS로 리다이렉트 시킬 것인지 물어보는데 저는 리다이렉트를 시켜주었습니다. (그외 도메인을 입력하거나 이메일, 약관동의 등의 내용이 나옵니다.)

shell What would you like to do?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 

1: No redirect - Make no further changes to the webserver configuration. 2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for new sites, or if you're confident your site works on HTTPS. You can undo this change by editing your web server's configuration.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2 

이렇게 하고 Nginx를 재 시작하면 HTTPS가 적용됩니다.

$ sudo service nginx restart

HTTPS를 사용하여 들어가보면 아래와 같이 적용이 완료 됩니다.

마무리

HTTPS의 기본적인 개념과 실제 적용도 해보았는데 적용할 때 아직은 모르는 부분이 많아서 따라 보고만 적용을 해보았습니다. 다음에는 조금 더 공부해서 웹에도 적용을 해 보도록 하겠습니다.


참고 문서
SSL Certificates HOWTO][정보보안] SSL(Secure Socket Layer) 이란]
10. HTTPS 란?]
Node js에 관한 것 아무거나 3편, Node에서 NGINX를 리버스 프록시로 사용하기 (번역)]

'개발' 카테고리의 다른 글

Git-flow를 사용한 프로젝트 관리  (0) 2020.12.02
Docker(도커) + Node.js 배포  (2) 2020.08.11
웹과 인터넷, 차이점  (0) 2020.06.21
HTTP란?  (0) 2020.06.21
컴파일과 빌드 (feat. Gradle)  (0) 2020.06.21