Network

[ 프로토콜 ] SSL/TLS 이란? (SSL Handshake)

jogaknabi_1023 2024. 3. 26. 16:30

SSL (Secure Sockets Layer)

암호화 기반 인터넷 보안 프로토콜. TLS(Transport Layer Security)프로토콜의 이전 버전이다.

인터넷 통신의 개인정보 보호, 인증, 데이터 무결성을 보장하기 위해 Netscape가 1995년 처음으로 개발했다. 버전의 차이는 크지 않으며, 이름이 바뀐 것은 소유권 변경을 나타내기 위한 것이기 때문에 두 용어가 혼합되어 사용되는 경우가 많다.

 

 

SSL/TLS 사용 이유

원래 웹 상의 데이터는 메시지를 가로채면 누구나 읽을 수 있는 일반 텍스트 형태로 전송되었다.

SSL은 사용자 개인 정보를 보호하기 위해 제작되었다. 사용자와 웹 서버 사이를 이동하는 모든 데이터를 암호화하여, 누군가 데이터를 가로채더라도 무작위 문자만 볼 수 있게 한다.

또한 SSL은 특정한 유형의 사이버 공격도 차단한다. SSL은 웹 서버를 인증하는데, 공격자들이 사용자를 속여 데이터를 훔치기 위한 가짜 웹사이트를 만드는 일이 있기 때문에, 이러한 인증이 중요하다. 또한 공격자가 전송 중인 데이터를 조작하지 못하게 막기도 한다.

 

SSL/TLS 작동 원리

SSL/TLS 핸드셰이크SSL/TLS 암호화를 사용하는 통신 세션을 실행하는 프로세스이다. 통신하는 양측에서는 메시지를 교환하여 서로를 인식하고 서로를 검증하며 사용할 암호화 알고리즘을 구성하고 세션 키에 합의한다. SSL/TLS 핸드셰이크는 HTTPS 작동원리의 근간이라고도 할 수 있다.

 

(출처: https://www.cloudflare.com/ko-kr/learning/ssl/what-happens-in-a-tls-handshake/)

 

 

실습

Wireshark로 패킷을 봤을 때 TCP handshake가 일어나고, 그 후 SSL handshake가 일어나는 것을 볼 수 있다. 밑의 그림은 SSL handshake 과정을 단계별로 진행된 것이다.

 

 

1) Client Hello (클라이언트 -> 서버)

암호화 알고리즘 나열 및 전달

클라이언트는 통신하고자 하는 TLS 버전 자신이 원하는 cipher 리스트, 클라이언트가 생성한 난수 정보를 보낸다. Cipher Suite 알고리즘에 따라 데이터를 암호화 하게 된다. 여기서 클라이언트가 사용 가능한 Cipher Suite를 Server에게 제공하는 목록을 확인할 수 있다.

Client Hello 패킷

 

 

2) Server Hello (서버 -> 클라이언트)

암호화 알고리즘 선택

서버는 자신의 SSL 버전, 자신이 만든 임의의 난수와 클라이언트의 Cipher 리스트(Cipher Suite) 중 하나를 선택하여 그 정보를 클라이언트에게 보낸다.

Server Hello 패킷

 

 

3) 인증서 교환(Certificate) (서버 -> 클라이언트)

서버는 자신이 갖고 있는 인증서 정보(SSL 인증서)를 클라이언트에게 전송한다. 이 인증서 내부에는 서버가 발행한 공개키가 들어있다.

공개키로 복호화에 성공하면 인증서가 진짜임이 증명되며 인증서 검증 단계를 거치게 된다.

Certificate 패킷

 

4) 서버 키 교환(Server key Exchange), Server Hello Done (서버 -> 클라이언트)

서버의 공개키가 SSL 인증서 내부에 없는 경우, 서버가 직접 전달했다는 내용이다. 일부 경우에는 서버는 Server Key Exchange 메시지를 통해 자신의 공개키를 직접 제공하는 대신에 임시 세션 키를 생성하고, 이를 클라이언트에게 전달한다.

[ 서버 키 교환 단계가 추가로 필요한 경우 ]

- 서버 인증서의 인증 기관(인증기관)이 신뢰할 수 없는 경우
클라이언트가 서버의 인증서의 발급 기관을 신뢰하지 않을 수 있습니다. 이 경우, 서버가 직접 임시 세션 키를 생성하고 이를 클라이언트에게 제공함으로써 클라이언트는 신뢰할 수 있는 키 교환을 수행할 수 있습니다.

- 임시 키를 사용하여 완전한 Forward Secrecy 보장
일부 보안 요구 사항에서는 Forward Secrecy를 보장하기 위해 임시 키를 사용하는 것이 권장됩니다. 이를 위해 서버는 서버 키 교환 단계에서 임시 키를 생성하고 이를 사용하여 세션 키를 암호화하고 교환합니다. 이렇게 함으로써, 나중에 공격자가 장기적으로 저장된 세션 키를 획득하여 과거 통신을 해독하는 것을 방지할 수 있습니다.

- 특정 알고리즘 또는 키 교환 방법의 선택
SSL/TLS 프로토콜은 여러 가지 암호화 알고리즘과 키 교환 방법을 지원합니다. 서버 키 교환 단계에서는 서버가 클라이언트에게 어떤 알고리즘과 방법을 사용할 것인지 알릴 수 있습니다.

 

Server Exchange, Server Hello Done 패킷

 

패킷을 분석했을 때, 위의 경우에는 Diffie-Hellman 알고리즘으로 키 교환 프로토콜이 사용된 것을 볼 수 있다. Diffie-Hellman 알고리즘은 공개 키 암호 시스템의 일종으로, 비대칭 키 알고리즘의 일종이다.

클라이언트는 데이터 암호화에 사용할 대칭키(비밀키)를 생성한 후 SSL 인증서 내부에 들어있던 공개키를 사용해 암호화하여 서버에게 전송해야 한다. 이 때, SSL 인증서가 해시 알고리즘으로 SHA512로 서명되었음을 알 수 있다.

 

5) Client Key Exchange(클라이언트 -> 서버), Change Cipher Spec (클라이언트 <-> 서버)

데이터를 암호화할 대칭키 전달, Encrypted Handshake Message(Finished)를 통해 SSL Handshake 종료된다.

 

  • Client Key Exchange대칭키(비밀키=데이터를 실제로 암호화하는 키)를 클라이언트가 생성하여 SSL 인증서 내무에서 추출한 Server의 공개키를 이용해 암호화한 후 서버에게 전달한다. 여기서 전달된 '대칭키'가 SSL Handshake의 목적이자 가장 중요한 수단인 데이터를 실제로 암호화할 대칭키(비밀키)이다.
  • Change Cipher Spec
    SSL/TLS 핸드셰이크 프로세스 중에서 클라이언트와 서버 양쪽에서 보내는 메시지이다. 현재의 암호화 키 및 암호화 방법이 변경되었음을 나타낸다.

Client Key Exchange, Change Ciper Spec 패킷