Https의 보안 | SSL/TLS
Http의 취약점, 보안
Http는 암호화 하지 않은 상태로 정보를 전송 평문(plain text)으로 전송되어 개발자는 메세지를 쉽게 확인하고 작성할 수 있지만 중간에 몰래 탈취되는 위험이 있다. 대표적인 보안 문제로 중간자 공격(MITM)이 있다.
통신 상대를 확인하지 않는다. 누가 요청했는지, 통신하는 상대가 허가된 상태인지 파악할 수 없다.
이러한 보안 문제를 보완하여 Https(HyperText Transfer Protocol Secure) 라는 프로토콜이 탄생한 것이다.
Https의 보안의 핵심, SSL/TLS
HTTPS (HyperText Transfer Protocol Secure)는 HTTP protocol의 암호화된 버전이다.
SSL과TLS
SSL(Secure Scokets Layer)은 클라이언트와 서버가 서로 데이터를 암호화 하여 통신할 수 있게 돕는 보안 기술(계층)이다.
TLS(Transport Layer Security)는 SSL의 업데이트 된 버전으로 SSL 3.0버전 이후 기존 버전과 구분하기 위해 TLS라 새로 명명하였다. 더 이상 SSL을 사용하진 않지만 TLS를 지금까지도 SSL이라고 부르고 있다.
SSL/TLS 동작 방식을 이해하기 위한 사전 지식 - [대칭키, 공개키]
먼저 암호화를 위해서는 비밀번호와 같은 개념인 키(key)가 필요하다.
대칭키 기법
하나의 키로 암호화와 복호화가 가능하다.
장점: 빠르다
단점: 안전하게 교환하기 어렵다. 서버와 클라이언트는 같은 키를 가지고 있어야 하므로 키를 주고 받는 중간에 가로챌 위험이 있다.
공개키 기법(비대칭키 기법)
서로 다른 키로 암호화 복호화 한다.
클라이언트는 공개키를, 서버는 개인키를 가지며 공개키로 암호화한 데이터는 개인키로만 복호화 할 수 있고 개인키로 암호화한 데이터는 공개키로만 복호화할 수 있다.
장점: 안전하게 데이터를 주고 받을 수 있다.
단점: 암호화 과정이 복잡하여 속도가 느리다.
SSL에서 이 두 기법을 함께 사용하여 각 기법의 단점을 보완하였다.
SSL/TLS 동작 과정 (핸드셰이크)
'Client Hello' 메시지 클라이언트는 서버에게 위 메세지를 전송하면서 핸드셰이크를 개시한다. 이 메세지는 무작위 바이트 문자열과 현재 지원 가능한 암호화 방식을 포함한다. (서로 어떤 암호화 방식을 사용할지 협의 하는 과정)
'Server Hello' 메시지 서버는 클라이언트에게 이전 내용과 같이 랜덤한 데이터, 지원 가능한 암호화 방식, CA(Certificate Authority, 서버가 공식으로 인증한 기관)에서 발급한 증인서를 전달한다.
인증: 클라이언트는 인증서를 검증한다. CA가 발급한 인증서 목록 중에 서버가 전달한 인증서가 있는지 확인하고 CA에서 공유하는 공개키로 인증서를 복호화한다. 복호화에 성공한다면 인증서는 서버 자신의 비밀키로 암호화했다는 것이 검증되므로 서버를 신뢰할 수 있게 된다.
클라이언트는 임시키를 생성한다. 클라이언트와 서버가 주고받은 데이터(무작위 바이트 문자열)를 조합하여 실제 데이터 통신에 사용할 대칭키를 임시로 만든다. (임시키 = 대칭키) 중간에 노출될 위험을 막기 위해 가지고 있던 공개키로 암호화하여 서버에게 전달한다.
서버는 비밀키로 암호 해독하여 임시키를 전달 받는다. => 클라이언트와 서버는 같은 키를 가지게 된다.
임시키 -> 세션키
클라이언트 준비 완료 클라이언트가 세션 키로 암호화된 "완료" 메시지를 전송한다.
서버 준비 완료 서버가 세션 키로 암호화된 "완료" 메시지를 전송한다.
안전한 대칭 암호화 성공 핸드셰이크가 완료되고, 이 세션키로 클라이언트와 서버가 본격적으로 통신할 수 있게 된다.
세션단계 전송이 끝나면 세션이 종료되고 통신이 끝나며 세션키도 함께 삭제된다.
참고 사이트
Last updated