7계층은 응용 계층(Application Layer)으로, 응용 프로세스 간 통신을 담당한다.
HTTP(Hyper Text Transfer Protocol)는 HTML 문서와 같은 리소스들을 주고받기 위해 사용하는 프로토콜이다.
웹 브라우저(Client)와 서버(Server)는 인터넷 상에서 HTTP를 통해 웹 페이지 등의 자원을 주고 받는다.
HTTP 통신은 별도의 보안 조치가 되어있지 않기 때문에 통신 중 누군가 네트워크 신호를 가로챌 경우 통신 내용이 쉽게 노출된다. 만약 고객의 개인정보나 기밀 정보를 취급하는 데이터라면 큰 문제가 발생할 것이다. 이러한 문제를 해결하기 위해 HTTP에 SSL(Secure Sockets Layer)을 도입한 것이 HTTPS이다.
HTTPS는 인터넷 상에서 정보를 암호화하는 SSL(Secure Sockets Layer)이라는 계층 위에 HTTP 보안이 보장되는 HTTP 통신이 가능한 프로토콜이다.
이 통신 방법을 SSL 암호화 통신이라고도 한다.
SSL 암호화 통신은 공개키 암호화 방식 알고리즘으로 구현된다.
전송 데이터를 암호화하여 신뢰성 있는 통신을 가능하게 하는 프로토콜이다.
SSL은 TLS(Transport Layer Security)라고도 불리며, TLS는 SSL의 최신 버전이라고 생각하면 된다.
HTTPS는 TCP와 HTTP 사이에 SSL 계층을 추가한 통신 방법이다. SSL 암호화 통신은 총 3단계로 나눌 수 있다.
첫 번째로, SSL Handshake를 수행한다.
이때 데이터를 주고받기 위해 어떤 방법을 사용해야 하는지 서로의 상태를 파악한다. SSL은 80번 포트를 사용하는 HTTP와 달리 443번 포트를 기본으로 사용하는 TCP 기반의 프로토콜이다.
TCP 기반으로 통신하기 때문에 TCP의 3-way handshake를 통해 먼저 TCP 연결이 수립된 후 SSL 세션을 생성한다. SSL 세션이 생성되면 클라이언트와 서버가 안전하게 통신할 수 있게 된다.
- 암호화 알고리즘(Cipher Suite) 결정
- 데이터를 암호화하는 대칭키(비밀키) 전달
1) Client Hello (클라이언트 → 서버)
클라이언트가 서버에 연결을 시도하는 패킷을 전송하는 단계이다.
자신(브라우저)가 지원 가능한 암호화 방식(Cipher Suite) 목록, 세션 ID, SSL 프로토콜 버전과 함께 랜덤 데이터를 생성하여 전달한다.
2) Server Hello (서버 → 클라이언트)
ClientHello 패킷을 받으면 Cipher Suite 중 하나를 선택한 다음 자신의 SSL 프로토콜 버전, 랜덤 데이터와 함께 패킷에 담아 Client에게 보낸다.
3) Certificate
서버가 자신의 SSL 인증서를 클라이언트에게 전달한다. 인증서 내에는 서버가 발행한 공개키가 들어있다.
💻 SSL 인증서
CA(Certificate Authority, 인증 기관)는 서버의 공개키와 인증서 발급자, CA 이름 등 인증 정보를 담아 CA의 개인키로 암호화하여 SSL 인증서를 발급한다.
3-1) Server Key Exchange/ServerHello Done
서버의 공개키가 SSL 인증서 내부에 없는 경우, 서버가 직접 자신의 공개키를 클라이언트에게 전달한다. 서버는 모든 데이터를 보낸 후 행동을 마쳤음을 알린다.
클라이언트는 대표적인 CA와 공개키 목록을 가지고 있어 인증서를 복호화할 수 있다. CA의 공개키로 복호화하여 인증서를 검증한다.
4) Client Key Exchange (클라이언트 → 서버)
복호화에 성공하면 클라이언트는 통신에 사용할 대칭키(비밀키)를 생성하여 SSL 인증서 내부에 있던 서버의 공개키로 암호화해 서버에게 전송한다.
SSL Handshake의 목적이자 통신에 가장 중요한 수단인 대칭키를 통해 클라이언트와 서버가 안전하게 통신할 수 있다.
5) ChangeCipherSpec/Finished
클라이언트와 서버는 서로의 패킷으로 데이터 통신에 필요한 모든 정보를 교환하고, 통신할 준비가 되었음을 알리는 ChangeCiperSpec 패킷을 전송한다.
그리고 Handshake 과정이 정상적으로 완료되면 Finished 패킷을 보낸다. 이 패킷 이후에는 데이터를 암호화하여 통신이 가능해진다.
🤷 키 교환 알고리즘 DH와 RSA의 차이를 아시나요? :)
- DH는 Certification 과정 이후에 클라이언트가 서버에게 대칭키를 생성할 데이터를 전달한다.
- RSA는 Certification 과정 이후에 클라이언트가 서버에게 대칭키를 전달한다.