HTTPS 서버 구현

개요

요즘 대부분 웹 사이트는 HTTPS(Hypertext Transfer Protocol Secure)를 사 용하고 있다. 웹을 통해 TLS를 이용하여 보안 설정된 데이터를 이용할 때 암호화, 데이터 무결성, 인증의 보호 계층을 제공해주는 기능을 해준다. 따라서 본 프로젝트 또한 HTTPS를 적용하여 데이터무결성 및 보안 기능을 강화할 필요가 있다.

SLL(인증서) 기능 및 발급

  • 클라이언트가 서버에 접속한다.

  • 서버가 보안인증서를 제공한다.

  • 클라이언트가 서버가 제출한 보안인증서의 유효성을 파악한다. 최상위발급 기관과 통신하여 유효성을 확인한다. (최상위 발급기관은 운영체제 또는 웹브라우저에 미리 정의되어 있다.)

  • 보안인증서가 유효하면 인증서에 쓰여져 있는 공개 암호화키 A를 사용

    하여 클라이언트 자신의 공개 암호화키 C를 암호화 하여 전송한다.

  • 서버는 전송된 암호화 구문을 자신만 가지고 있는 해독키(개인 비밀키) B 를 통해서 해독한다.

  • 해독한 메세지가 유효한 요청이고 클라이언트의 공개 암호화키 C 를 포함하고 있다면 암호화키 C 를 사용하여 잘 받았다는 메세지를 암호화해서응답한다.

  • 클라이언트는 자신만 가지고 있는 해독키(개인 비밀키) D 를 통해서 해독한다. 서버에서 받은 응답 메시지가 유효하다면 클라이언트는 A 를 통해 암호화해서 메세지를 보내고, 서버는 C 를 통해 암호화해서 메세지를 보낸다.A키로 암호화된 메세지는 B키로만 해독이 가능하고, C키로 암호화된 메세지는 D키로만 해독이 가능하므로 서로 종단간(End-to-End) 암호화 통신이 성립하는 것이다.

따라서, 위 기능에서 필수적으로 필요한 인증서를 발급 받아야 한다.

제약 사항

Ubuntu 16.04 LTS부터 기본 패키지로 등재된 LetsEncrypt 모듈을 통해서 무료로 발급 받을 수 있게 됐 다. 하지만 발급받기 위해서는 서비스의 유요한 도메인이 있어야만 가능하다. 따라서 HTTPS의 구현은 정식 서버를 오픈하여 도메인을 발급 받은 후 구현하는 것으로 연기했다.

Last updated