SSL/TLS Handshake

June·2022년 1월 5일
0
post-thumbnail

SSL/TLS Handshake란?

암호화 통신은 일반적으로 TLS/SSL 프로토콜을 사용하여 이루어지는데 TLS/SSL 암호화 과정에서 필요한 정보(사용할 암호화 알고리즘, 키) 의 교환을 위한 TLS Handshake 과정이 존재한다.
handshake 과정은 통신을 암호화하는 데 사용할 암호화 알고리즘과 키를 결정하고 서버를 확인하며 실제 데이터 전송을 시작하기 전에 보안 연결이 이루어 졌는지 확인한다.

SSL(Secure Sockets Layer)은 주로 전송계층과 응용계층 사이에서 보안조치를 하는 데 사용하며, TLS(Transport Layer Security) 로 최근에 부르는데 SSL은 과거 명칭이라서 같은 말이다.

SSL/TLS 클라이언트와 서버가 통신하는 단계

  1. 사용할 프로토콜 버전에 동의.

  2. 암호화 알고리즘 선택.

  3. 디지털 인증서 교환하고 유효성 검사하여 서로 인증.

  4. 비대칭 암호화 기술을 사용하여 공유 비밀키를 생성. 그런 다음 SSL 또는 TLS는 공유키를 사용하여 메세지를 대칭 암호화 방식으로 암호화.

SSL/TLS handshake 과정

  1. SSL / TLS 클라이언트 자신의 버전, 암호 알고리즘 목록, 그리고 사용 가능한 압축 방식을 "client hello" 메시지에 담아 서버로 보낸다.

  2. SSL / TLS 서버는 클라이언트가 제공한 목록에서 서버가 선택한 암호 알고리즘, 선택한 압축 방식과 세션 ID 및 CA(Certificate Authority)가 사인한 서버의 공개 인증서를 "server hello" 메시지에 담아 응답을 하고 이 인증서는 대칭키가 생성되기 전까지 클라이언트가 나머지 handshake 과정을 암호화하는 데에 쓸 공개키를 담고 있게 된다.

  3. SSL / TLS 클라이언트는 서버의 디지털 인증서가 유효한지 신뢰할 수 있는 CA 목록을 통해 확인

  4. 만약 CA를 통해 신뢰성이 확보되면 클라이언트는 의사 난수(pseudo-random) 바이트를 생성해 서버의 공개키로 암호화하고, 이 난수 바이트는 대칭키를 정하는 데에 사용되며 이 대칭키는 나중에 메시지 데이터를 암호화하는 데 사용된다.

  5. SSL / TLS 서버가 "클라이언트 인증서 요청"을 보낸 경우 클라이언트는 클라이언트의 디지털 인증서 또는 "디지털 인증서 없음 경고" 와 함께 클라이언트의 개인 키로 암호화 된 임의의 바이트 문자열을 보낸다. 이 경고는 경고일 뿐이지만 일부 구현에서 클라이언트 인증이 필수일 경우 handshake 실패합니다.

  6. 서버는 클라이언트의 인증서를 확인하고, 난수 바이트를 자기 개인키로 복호화해 대칭 마스터키 생성에 활용하게 된다.

  7. 클라이언트는 handshake의 클라이언트 부분이 완료되었음을 알리는 Finished 메시지를 서버에 보내면서 지금까지의 교환 내역을 해시한 값을 대칭키로 암호화하여 담는다.

  8. 서버는 스스로도 해시를 생성해 클라이언트에서 도착한 값과 일치하는지 보고, 일치하면 서버도 마찬가지로 대칭키를 통해 암호화한 Finished 메시지를 클라이언트에게 보내게 된다.

  9. 이후부터 SSL / TLS 세션 동안 서버와 클라이언트는 대칭키로 암호화된 어플리케이션(HTTP) 데이터를 주고 받을 수 있게 된다..

출처

https://wangin9.tistory.com/entry/브라우저에-URL-입력-후-일어나는-일들-5TLSSSL-Handshake [잉구블로그]

profile
회사와 “함께” 성장하는 개발자

0개의 댓글