HTTP / HTTPS
Q. HTTPS vs HTTP
HTTP는 암호화가 되지 않은 평문 데이터를 전송하는 프로토콜이라는 문제로 인해 비밀번호, 주민등록번호 등 민감한 정보를 주고 받는 상황에서 제 3자가 정보를 조회할 수 있다는 문제점이 존재했습니다. 이러한 문제점을 해결하기 위해 HTTPS가 등장하게 되었습니다.
HTTPS는 HTTP에 데이터 암호화가 추가된 프로토콜로 중간에 제 3자가 데이터를 볼 수 없도록 암호화를 지원하고 있습니다.
Q. 어떻게 HTTPS는 안전한걸까?
HTTPS를 사용한다면, TLS(SSL) 프로토콜을 통해 데이터를 안전하게 전송하며, 대칭키와 비대칭키 암호화 매커니즘을 통해 보안을 강화합니다.
대칭키와 비대칭키 암호화
HTTPS는 대칭키와 비대칭키 암호화 모두 사용을 한다:
대칭키 암호화
클라이언트와 서버가 동일한 키를 사용하여 암호화/복호화를 진행
키가 노출되면 매우 위험하지만, 연산 속도가 빠르다.
비대칭키 암호화
1개의 쌍으로 구성된 공개키와 개인키를 암호화/복호화 하는데 사용
키가 노출되어도 비교적 안전하지만, 연산 속도가 느리다
공개키: 모두에게 공개 가능한 키
개인키: 나만 가지고 알고 있어야하는 키
Q. SSL Handshake?
SSL Handshake란 클라이언트와 서버가 HTTPS 통신을 시작하기 전에 수행하는 일련의 암호화 협상 과정
Client Hello
클라이언트가 서버에 연결을 시도하며 자신이 지원하는 암호화 방식들을 전송
Server Hello & Certificate
서버가 암호화 방식을 선택하고 SSL 인증서를 클라이언트에 전달
SSL 인증서에는 서버의 공개키와 인증서 발급자(CA) 정보 포함
키 교환
클라이언트는 데이터 암호화에 사용할 대칭키 생성
이 대칭키를 서버의 공개키로 암호화하여 서버에 전송
서버는 자신의 개인키로 복호화하여 대칭키 획득
Handshake 완료
양측이 ChangeCipherSpec을 교환하여 준비 완료를 알림
이후 협상된 대칭 키를 가지고 실제 데이터를 암호화여 통신
Ref.
Last updated