HTTPS
- HTTP Secure의 약자
- 기존의 HTTP 프로토콜을 더 안전하게(Secure) 사용할 수 있음을 의미
- HTTPS는 HTTP 요청과 응답으로 오가는 내용을 암호화.
- HTTPS 요청 및 응답은 중간에 제 3자에게 데이터가 탈취되더라도 그 내용을 알아볼 수 없다.
- SSL/TLS 프로토콜을 사용해 서버 인증과 데이터 암호화를 진행
- HTTPS = HTTP + SSL/TLS 프로토콜
- 패킷 분석 프로그램
wireshark
를 이용해 확인한 HTTP 요청
👉🏽 email, password 등의 값을 그대로 볼 수 있다.
- 동일한 요청을 HTTPS 프로토콜로 보냈을 때
👉🏽 데이터 암호화됨
참고: 암호화 방식
- 데이터를 암호화 할 때에는 암호화할 때 사용할 키, 복호화(암호화한 키를 해석)할 때 사용할 키가 필요.
- 암호화와 복호화할 때 사용하는 키가 동일하다면 대칭 키 암호화 방식, 다르다면 공개 키(비대칭 키) 암호화 방식이라고 한다.
대칭 키 암호화 방식
- 하나의 키만 사용 (동일한 키로 암호화, 복호화)
- 장점 : 연산 속도가 빠르다
- 단점 : 키를 주고 받는 과정에서 탈취당했을 경우 암호화가 소용없어짐.
공개 키(비대칭 키) 암호화 방식
- 두 개의 키 사용 (공개 키, 비밀 키)
- 암호화 할 때 공개 키, 복호화 할 때 비밀 키 사용
(SSL/TLS에서 CA 인증서는 반대ㅠ)
- 보통 클라이언트가 공개 키, 서버가 비밀 키 가짐
- 장점 : 보안성이 좋음 (공개 키가 탈취 당해도 비밀 키가 없으면 복호화할 수 없음)
- 단점 : 대칭 키 방식보다 더 복잡한 연산이 필요. 더 많은 시간 소모
SSL/TLS 프로토콜
- HTTPS가 서버 인증과 데이터 암호화에 사용하는 프로토콜
- 서버와 클라이언트간의 CA를 통해 서버를 인증하는 과정과 데이터를 암호화하는 과정을 아우른 프로토콜
- HTTP 통신을 하는 소켓 부분에서 SSL 혹은 TLS라는 프로토콜을 사용
(TLS는 SSL이 표준화되며 바뀐 이름. 사실상 같은 프로토콜)
SSL/TLS의 특징
- CA를 통한 인증서 사용
- (대칭 키, 공개 키) 두 가지 암호화 방식을 모두 사용
인증서와 CA(Certificate Authority)
- HTTPS를 사용하면 브라우저는 서버의 응답과 함께 전달된 인증서를 확인할 수 있다.
- 인증서는 서버의 신원을 보증해준다.
- CA(Certificate Authority) : 인증서를 발급해주는 공인된 기관
1. 인증서 발급 받기
1) 서버는 CA로 서버의 정보와 공개 키 전달.
2) CA는 서버의 공개 키와 정보를 CA의 비밀 키로 암호화하여 인증서 발급
👉🏽 서버는 암호화된 인증서(CA 공개 키로 복호화 가능) 가지게 됨
2. 클라이언트의 인증서 확인
3) 서버는 클라이언트에게 요청 받으면 암호화된 인증서 보내줌
(🌈 클라이언트(브라우저)는 CA들의 리스트와 CA 공개 키를 기본으로 내장하고 있음)
4) 클라이언트는 인증서가 리스트에 있는 CA가 발급한 것인지 확인하고 CA 공개 키를 이용해서 인증서 복호화
5) 클라이언트는 해당 서버가 신뢰할 수 있는 서버임을 알게 되고, 서버의 정보와 서버 공개 키를 가지게 된다.
👉🏽 클라이언트가 서버의 정보와 서버 공개 키(이후 대칭 키 암호화 하는데 사용)를 가지게 됨
3. 서버 공개 키를 이용한 대칭 키 전달
6) 클라이언트는 서버 공개 키를 이용해 데이터를 주고 받을 때 사용할 대칭 키를 암호화해서 서버에 전달
7) 서버는 전달받은 암호화된 대칭 키를 서버 비밀키로 복호화
👉🏽 클라이언트와 서버가 동일한 대칭 키(이후 데이터 암호화/복호화 하는데 사용)를 갖게 됨
4. 대칭 키 사용해 데이터 암호화/복호화
8) HTTP 요청과 응답을 주고 받을 때 대칭 키를 사용해 데이터를 암호화해서 전달하고 복호화함.
- 대칭 키 자체는 오고가지 않기 때문에 키가 유출될 위험이 없음.
- 요청과 응답이 중간에 탈취되어도 복호화 할 수 없다.