장미정원
HTTPS는 어떻게 동작하는거지? 본문
HTTP? HTTPS?
HTTP는 웹 페이지와 같은 HTML 문서를 전송하기 위한 프로토콜입니다. 현재 보고있는 이 티스토리 웹사이트도 HTTP 통신을 기반으로 웹 페이지를 브라우저가 전송받아 보고있는 것입니다.
하지만 주소창을 확인해보면 http://... 가 아닌 https://... 라고 표기되어있는 것을 볼 수 있습니다. 실제로 http://... 만 지원하는 웹 사이트인 경우 크롬에서 안전하지 않다는 경고를 보내주게 됩니다.
HTTPS
HTTPS는 HTTP 프로토콜과 목적과 골격은 동일한 프로토콜이지만 S(Secure), 보안요소가 포함된 프로토콜입니다. 기본 포트도 HTTP 80포트가 아닌 443를 기본 포트 사용합니다.
인터넷 상에서는 수많은 패킷들을 주고 받게 됩니다. 로그인을 위해 아이디와 비밀번호를 서버에 전송하거나, 계좌번호, 주민등록번호와 같이 민감한 정보들을 웹 사이트에 입력하는 경우는 빈번하게 일어납니다.
하지만 이렇게 민감한 데이터가 담긴 패킷을 누군가 캡쳐하여 들여다본다면 개인정보가 모조리 유출되게 됩니다!
만약 이렇다면 웹 사이트를 신뢰할 수 없게 될 것입니다. 이러한 상황을 대처하기 위해 HTTPS 프로토콜이 등장하게 됩니다. HTTPS 프로토콜은 HTTP 메시지를 암호화하여 패킷을 캡쳐하여도 그 내용을 알아볼 수 없도록 합니다.
SSL
그렇다면 이렇게 좋아보이는 HTTPS는 어떻게 사용하는걸까요?
바로 SSL(Secure Socket Layer) 프로토콜을 사용해 구현할 수 있습니다.
SSL 프로토콜은 OSI 7 Layer에서 응용 계층과 전송 계층 사이에 위치해 있습니다. HTTP 프로토콜에 SSL 프로토콜을 얹어서 사용한다면 HTTPS 통신이 되며 응용 계층의 다양한 프로토콜들(FTP, SMTP)에도 SSL 프로토콜을 얹어서(FTPS, SMTPS) 암호화된 통신을 가능하게 합니다.
SSL? TLS?
SSL에 대해 알아본다면 SSL, TLS라는 용어가 혼용되어 사용되고 있습니다. 이 둘은 같은 의미이며 SSL 프로토콜의 업그레이드 버전이 TLS입니다. 하지만 SSL이라는 용어가 관례처럼 사용되고 있어 대부분 TLS 프로토콜을 사용한다고 해도 SSL이라고 부릅니다.
암호화 방식
SSL 암호화 통신 단계를 알아보기 전에 대표적으로 사용되는 암호화 방식에 대해 알아보겠습니다.
암호화 방식에는 크게 단방향 암호화, 양방향 암호화로 구분할 수 있습니다.
- 단방향 암호화는 키를 사용하여 메시지를 암호화는 할 수 있지만 복호화는 불가능한 암호화입니다. 주로 비밀번호 암호화에 사용됩니다.
- 양방향 암호화는 암호화에 사용되는 키를 사용해서 메시지를 암호화, 복호화를 하는 것입니다.
여기서 살펴볼 내용은 양방향 암호화입니다. 양방향 암호화는 또 크게 대칭키 암호화, 비대칭키 암호화로 나눌 수 있습니다.
대칭키 암호화
대칭키 암호화는 암호화, 복호화시 사용되는 키가 같은 암호화 방식입니다. 암복호화 속도는 비대칭키 암호화 방식보다는 빠르지만 키가 노출된다면 쉽게 복호화가 가능하다는 단점이 있습니다.
비대칭키 암호화
비대칭키 암호화는 암호화, 복호화시 사용되는 키가 서로 다른 암호화 방식입니다. 키 페어를 생성하여 public key, private key로 나눕니다. 특정 키로 암호화를 했다면 복호화하는 암호화시 사용하지 않았던 키를 사용해야합니다.
암복호화 속도는 대칭키에 비해 느리지만 키 노출 염려가 줄어듭니다. 대표적인 구현 알고리즘으로는 RSA가 있습니다.
SSL 암호화 통신 단계
이제 SSL 암호화가 어떻게 진행되는지 단계별로 알아보도록 하겠습니다.
SSL 암호화 통신에는 핸드셰이크, 세션, 세션 종료 과정이 이루어집니다.
1. 핸드셰이킹
Client Hello
클라이언트가 서버에 브라우저가 지원하는 암호화 방식들과 랜덤 데이터를 전송합니다.
Server Hello
서버가 클라이언트에 브라우저가 지원하는 암호화 방식 중 하나를 채택하고 SSL 인증서, 랜덤 데이터를 전송합니다.
Pre Master Secret
클라이언트에서는 전송 받은 SSL 인증서를 검증합니다. 검증이 완료되었다면 클라이언트의 랜덤 데이터와 서버의 랜덤 데이터를 이용해 Session Key를 만들게 됩니다. 그리고 전송 받은 SSL 인증서 안에 포함되어 있는 공개키(public key)를 사용하여 암호화하여 서버에 전송합니다.
(서버에서는 암호화된 Session Key를 복호화하기 위한 private key를 가지고 있으므로 복호화하여 Session Key를 얻을 수 있습니다.)
2. 세션
이제 클라이언트와 서버는 외부에 노출되지 않는 방식으로 서로 동일한 Session Key를 가지게 되었습니다.
이제 대칭키 암호화 방식으로 서로 Session Key를 사용하여 HTTP 메시지를 암호화하여 전송하게 됩니다!
3. 세션 종료
통신이 종료된다면 Session Key를 폐기한다.
마무리 총총
이렇게 간단하게 HTTPS 암호화 통신이 어떻게 실현되는지 알아보았습니다.
SSL 암호화 통신은 상황에 맞게 대칭키와 비대칭키 방식을 모두 사용한다는 점이 굉장히 매력적이였습니다.
'NETWORK' 카테고리의 다른 글
[NETWORK] 패킷이 나에게 오기까지 (0) | 2024.09.23 |
---|