HTTPS 란?
HTTP
HTTP는 Hypertext Transfer Protocol의 약자로 서버와 클라이언트간 통신을 위한 통신 규약이다. 하지만, HTTP는 암호화되지 않는 평문 데이터를 전송하기 때문에 제 3자가 정보를 조회할 수 있다는 위험이 있다. 이를 해결하기 위해 HTTPS가 등장했다.
HTTPS는 Hypertext Transfer Protocol Secure의 약자로 HTTP에 데이터 암호화가 추가된 것이다. 암호화된 데이터를 전송하기 때문에 제 3자가 볼 수 없도록 할 수 있다.
HTTPS는 어떻게 적용할 수 있을까?
HTTPS를 적용하기 위해서는 인증된 기관(Certificate Authority, CA)에게 인증서를 발급받아야한다. CA에 인증서를 요청하면 CA 이름, 서버의 공개키, 서버의 정보를 활용해서 인증서를 만들고, 이를 CA 개인키로 암호화해서 서버로 전송한다. 이때 인증서는 CA 개인키로 암호화하기 때문에 신뢰성을 확보할 수 있다. 이러한 인증서를 서버측에서 발급받으면 HTTPS를 적용할 수 있다.
HTTPS 동작 원리
클라이언트가 서버로 최초 요청할 때 암호화 알고리즘, 프로토콜 버전, 무작위 값을 전달한다. 이를 받은 서버는 클라이언트에게 암호화 알고리즘, 인증서, 무작위 값을 전달하고, 클라이언트는 서버의 인증서를 CA의 공개로 복화하하여 검증한다. 검증이 끝난 후 클라이언트와 서버에서 생성된 무작위 값을 조합해 Pre Master Secret 값을 생성하여 서버 공개키로 암호화하여 전달한다.
서버는 전달받은 암호화된 데이터를 개인키로 복호화하여 Pre Master Secret를 얻는다. 서버와 클라이언트는 일련의 과정을 통해서 Pre Master Secret을 Master Secret으로 변경하고, 해당 정보를 이용해 세션키를 생성한다. 이러한 과정을 TLS 핸드쉐이크라고 하며, 이후부터 클라이언트와 서버는 세션키를 활용한 대칭키 암호화 방식으로 데이터를 송수신한다.