HTTPS & TLS 핸드쉐이크

HTTPS 와 HTTP의 차이?

정말 쉽게 이야기하자면 http:// 와 https:// 의 차이인데 여기서 S는 TLS(SSL)를 사용하여 http를 암호화 한 것이 https이다.

HTTP란?

네트워크를 통해 데이터를 전송하는데 사용 되는 프로토콜입니다.
웹 사이트 콘텐츠 및 API 호출할때 인터넷을 통해 전송되는 대부분의 정보는 HTTP 프로토콜을 사용합니다. 이때 HTTP requests과 responses이 두 가지 종류가 있습니다.

HTTP 요청(requests), 응답(responses) 이란?

사용자가 웹과 상호작용하여 서버에 HTTP 메소드를 요청을 보내게 되고 서버에서 HTTP 응답을 생성하고 클라이언트에 보냅니다.

HTTP 와 HTTPS 요청

일반 HTTP의 GET요청

GET /hello.txt HTTP/1.1
User-Agent: curl/7.63.0 libcurl/7.63.0 OpenSSL/1.1.l zlib/1.2.11
Host: www.example.com
Accept-Language: en

암호화 한 HTTPS의 GET 요청을 획득한 공격자는 아래와 같은 문자를 받습니다.

t8Fw6T8UV81pQfyhDkhebbz7+oiwldr1j2gHBB3L3RFTRsQCpaSnSBZ78Vme+DpDVJPvZdZUZHpzbbcqmSW1+3xXGsERHg9YDmpYk0VVDiRvw1H5miNieJeJ/FNUjgH0BmVRWII6+T4MnDwmCMZUI/orxP3HGwYCSIvyzS3MpmmSe4iaWKCOHQ==

HTTPS의 암호화 하는 방법

TLS는 공개 키 암호화 기술을 사용하여 공개 키와 개인 키의 두 가지 키를 이용해 공개키는 서버의 SSL 인증서를 통해 클라이트가 서버와의 연결을 열면 두 잧이는 공개 키와 개인키를 사용하여 세션 키 라고 하는 새키에 동의하여 둘 사이의 추가 통신을 암호화합니다.

이해하기 위해 TLS 핸드쉐이크 기법을 알아 볼까요?

TLS핸드쉐이크(SSL핸드쉐이크)

오래전 SSL은 HTTP용 암호화 프로토콜이였습니다. 그리고 TLS로 이름이 변경되었습니다.


이름에서 핸드쉐이크 악수라고 나와있는데 사람과 사람의 손이 만나야 흔든다는 것을 나타내는 것으로 클라이언트와 서버가 만나서 흔드는것을 보여준다.

TLS는 HTTPS 사용할때 TCP연결이 TCP 핸드 쉐이크 후에 발생합니다.

위 그림에서 파랑색이 TCP 핸드 쉐이크 입니다.

아래 노란 TLS 핸드쉐이크 단계를 알아보죠

설명하기 앞서 짧게 설명하자면

처음에는 서로 비대칭키로 통신을 하여 서로 올바른 대상인지 확인 후
대칭키인 세션 키를 생성해 계속 통신하는 방식이다.

대칭키는 해킹의 위험성이 커서 암호화 통신에 비적합하고
비 대칭키는 주로 RSA 알고리즘으로 복잡한 연산으로 인해 리소스를 크게 소모 하기 때문에 계속 통신하기엔 비효율적이므로 두개를 합쳐서 사용한다.

TLS핸드쉐이크 단계

  1. clientHello: 클라이언트가 헬로 메시지를 전송하면서 시작합니다.
    이때 이 메시지에는 TLS버전,지원디는 암호화제품군 ,"클라이언트 무작위"라고하는 무작위 바이트 문자열이 포함됩니다.

2.serverHello: 클라이언트의 응답으로 서버가 서버의 SSL인증서, 서버에서 선택한 암호화제품군, 서버에서 생성한 "서버 무작위"라고하는 무작위 바이트 문자열이 포함된느 메시지를 전송합니다.

3.인증: 클라이언트가 서버의 SSL인증서를 인증서 발행기관을 통해 검증합니다.
이를 통해 서버가 인증서에 명시된 서버인지, 클라이언트가 상호작용중인 서버가 실제 소유자인지를 확인합니다.

  1. 예비 마스터 암호: 클라이언트가 "예비 마스터 암호"라고 하는 무작위 바이트 문자열을 하나 더 전송합니다. 예비 마스터 암호는 공개 키로 암호화되어 있으며, 서버가 개인 키로만 해독할 수 있습니다. (클라이언트는 서버의 SSL 인증서를 통해 공개 키를 받습니다.)
  1. 개인 키 사용: 서버가 예비 마스터 암호를 개인 키로 해독합니다.
  1. 세션 키 생성: 클라이언트와 서버가 모두 클라이언트 무작위, 서버 무작위, 예비 마스터 암호를 이용해 세션 키를 생성합니다.
    모두 같은 결과여야 합니다.
  1. 클라이언트 준비완료: 클라이언트가 세션 키로 암호화된 완료 메시지를 보냅니다.
  1. 서버 준비완료: 서버가 세션키로 암호화된 완료메시지를 보냅니다.
  1. 안전한 대칭 암호화 성공: 핸드 쉐이크가 완료되고 세션키로 통신이 진행됩니다.

모든 TLS 핸드쉐이크가 비대칭 암호화를 사용하지만 세션키 생성시 모두가 개인키를 사용하지 않습니다.

자세한 내용은 임시 Diffie-Hellman 핸드 쉐이크를 찾아보세요

출처:https://www.cloudflare.com/ko-kr/learning/ssl/what-happens-in-a-tls-handshake/
https://www.cloudflare.com/ko-kr/learning/ssl/why-is-http-not-secure/

좋은 웹페이지 즐겨찾기