HTTPS
: HTTP + Secure Socket의 약자로, 기존의 HTTP 프로토콜을 더 안전하게 사용할 수 있는 프로토콜
- HTTPS는 HTTP 요청과 응답에서 주고 받는 내용을 암호화한다.
암호화 방식
대칭 키 암호화 방식 (Symmetric Key)
: 하나의 키만 사용하며, 암호화할 때 사용한 키로만 복호화가 가능하다.
- 공개 키 방식에 비해서 연산 속도가 빠르다.
- 키를 주고 받는 과정에서 탈취당할 경우, 암호화가 소용없어지기 때문에 키를 관리하는 데 신경을 많이 써야 한다.
공개 키(비대칭 키) 암호화 방식 (Asymmetric Key)
: 두 개의 키를 사용하며, 암호화할 떄 사용한 키와 다른 키로만 복호화가 가능하다.
- 이때 두 개의 키를 각각 공개 키, 비밀 키라고 부른다.
- 보통 요청을 보내는 사용자가 공개 키를, 서버가 비밀 키를 가진다.
이때 비밀 키는 서버가 해킹당하지 않는 이상, 탈취되지 않는다.
- 공개 키를 사용해 암호화한 데이터가 탈취당하더라도, 비밀 키가 없으면 복호화할 수 없으므로 대칭키 방식보다 보안성이 더 좋다.
- 하지만 대칭 키 방식보다 더 복잡한 연산이 필요하여 더 많은 시간을 소모한다.
SSL/TLS 프로토콜
HTTPS는 HTTP 통신을 하는 소켓 부분에서 SSL/TLS 프로토콜을 사용하여 서버 인증과 데이터 암호화를 진행한다.
SSL/TLS 프로토콜의 특징
- CA(Certificate Authority)를 통한 인증서 방식
- 대칭 키, 공개 키 암호화 방식을 모두 사용한다.
CA(Certificate Authority)
: 서버에 인증서를 발급해주는 공인된 기관들
인증서 발급 과정
- 서버는 인증서를 발급받기 위해 CA로 서버의 정보와 서버의 공개 키를 전달한다.
- CA는 서버의 정보와 서버의 공개 키를 CA의 비밀 키로 암호화하여 인증서를 발급한다.
- 서버는 클라이언트에게 요청을 받으면, 인증서를 보내준다.
- 브라우저(클라이언트)는 CA 리스트와 CA의 공개 키를 내장하고 있기 때문에, 인증서를 복호화하여 서버의 정보와 서버의 공개 키를 얻을 수 있다. + 해당 서버가 신뢰할 수 있는 서버임을 알게 된다.
- 위의 과정을 통해 클라이언트는 서버의 공개 키를 확보했지만, 이 공개 키를 이용해서 데이터를 암호화하여 요청과 응답을 주고 받지는 않는다.
- 공개 키 암호화 방식은 보안은 확실하지만, 복잡한 연산과 많은 시간을 소모하기 때문이다.
대칭 키 전달
➡️ 대신에 이 공개 키를 사용해서, 클라이언트와 서버가 함께 사용하게 될 대칭 키를 주고 받는다.
- 대칭 키는 속도가 빠르지만, 오고 가는 과정에서 탈취될 수 있다는 위험성이 있다.
- 하지만 서버의 공개 키를 사용해서 대칭 키 를 암호화하여 보내준다면, 서버의 비밀 키를 가지고 있지 않다면 해당 대칭 키를 복호화할 수 없으므로 탈취될 위험성이 줄어든다.
- 이제 클라이언트와 서버는 HTTPS 요청을 주고 받을 때, 대칭 키를 사용하여 데이터를 암호화하여 전달한다.
- 이때, 대칭 키 자체는 오고가지 않기 때문에 키가 유출될 위험이 없어졌으며, 요청이 중간에 탈취되어도 제 3자는 암호화된 데이터를 복호화할 수 없다.
➡️ HTTPS는 이러한 암호화 과정을 통해 HTTP보다 더 안전하게 요청과 응답을 주고받을 수 있다.
정리
- SSL/TLS : 서버와 클라이언트 간에 CA를 통해 서버를 인증하는 과정과 데이터를 암호화하는 과정을 아우른 프로토콜
- HTTPS : HTTP에 SSL/TLS 프로토콜을 더한 것