HTTPS 서버 구현
Last updated
Last updated
요즘 대부분 웹 사이트는 HTTPS(Hypertext Transfer Protocol Secure)를 사 용하고 있다. 웹을 통해 TLS를 이용하여 보안 설정된 데이터를 이용할 때 암호화, 데이터 무결성, 인증의 보호 계층을 제공해주는 기능을 해준다. 따라서 본 프로젝트 또한 HTTPS를 적용하여 데이터무결성 및 보안 기능을 강화할 필요가 있다.
클라이언트가 서버에 접속한다.
서버가 보안인증서를 제공한다.
클라이언트가 서버가 제출한 보안인증서의 유효성을 파악한다. 최상위발급 기관과 통신하여 유효성을 확인한다. (최상위 발급기관은 운영체제 또는 웹브라우저에 미리 정의되어 있다.)
보안인증서가 유효하면 인증서에 쓰여져 있는 공개 암호화키 A를 사용
하여 클라이언트 자신의 공개 암호화키 C를 암호화 하여 전송한다.
서버는 전송된 암호화 구문을 자신만 가지고 있는 해독키(개인 비밀키) B 를 통해서 해독한다.
해독한 메세지가 유효한 요청이고 클라이언트의 공개 암호화키 C 를 포함하고 있다면 암호화키 C 를 사용하여 잘 받았다는 메세지를 암호화해서응답한다.
클라이언트는 자신만 가지고 있는 해독키(개인 비밀키) D 를 통해서 해독한다. 서버에서 받은 응답 메시지가 유효하다면 클라이언트는 A 를 통해 암호화해서 메세지를 보내고, 서버는 C 를 통해 암호화해서 메세지를 보낸다.A키로 암호화된 메세지는 B키로만 해독이 가능하고, C키로 암호화된 메세지는 D키로만 해독이 가능하므로 서로 종단간(End-to-End) 암호화 통신이 성립하는 것이다.
따라서, 위 기능에서 필수적으로 필요한 인증서를 발급 받아야 한다.
Ubuntu 16.04 LTS부터 기본 패키지로 등재된 LetsEncrypt 모듈을 통해서 무료로 발급 받을 수 있게 됐 다. 하지만 발급받기 위해서는 서비스의 유요한 도메인이 있어야만 가능하다. 따라서 HTTPS의 구현은 정식 서버를 오픈하여 도메인을 발급 받은 후 구현하는 것으로 연기했다.