TLS / SSL HandShake

이유석·2022년 5월 3일
0

CS - Network

목록 보기
6/8
post-thumbnail

SSL - Secure Sockets Layer

정의

  • 웹사이트와 브라우저 사이(또는 두 서버 사이)에 전송되는 데이터를 암호화하여 인터넷 연결을 보호하기 위한 표준 보안 프로토콜 입니다.

  • 이 기술은 해커가 개인 데이터나 금융 데이터 등의 전송되는 정보를 보거나 훔치는 것을 방지합니다.

특징

  • SSL은 우 통신 장치 사이에 HandShake라는 인증 프로세스를 시작하여 두 장치의 ID를 확인합니다.

  • 데이터 무결성을 제공하기 위해, 데이터에 디지털 서명을 하여 데이터가 의도된 수신자에게 도착하기 전에 조작되지 않았다는 것을 확인합니다.


TLS - Transport Layer Security

정의

  • SSL의 향상된, 더욱 안전한 버전입니다.

  • 인터넷을 통해 서로 통신하는 클라이언트 / 서버 응용 프로그램 간의 통신 보안을 제공하는 프로토콜 입니다.

SSL vs TLS

  • 둘다 보안 통신에 사용되는 암호화 프로토콜 입니다.
  • SSL은 컴퓨터 네트워크에서 통신 보안을 제공하는 프로토콜 입니다.
  • TLS는 SSL 의 발전이며 추가 개인 정보 보호 및 보안 기능으로 구성됩니다.

TLS / SSL HandShake

정의

  • HTTPS에서 클라이언트와 서버간의 통신 전에 SSL 인증서로 신뢰성 여부를 판단하기 위한 연결 방식 입니다.

진행 순서

  1. 클라이언트는 서버에게 "client hello" 메시지를 암호화된 정보와 함께 전송한다.
    이때 암호화된 정보에는 버전, 암호 알고리즘, 압축 방식, 등을 담는다.

  2. 서버는 클라이언트가 보낸 암호 알고리즘, 압축 방식 을 받는다.
    그 후, 세션 ID, CA 공개 인증서"server hello"메시지와 함께 담아 클라이언트에게 응답한다.
    이 CA 인증서에는 앞으로 HandShake(연결) 이후에 사용할 대칭키가 생성되기 전, 클라이언트에서 HandShake 과정 속 암호화에 사용될 공개키를 담고 있다.

  3. 클라이언트 측은 서버에서 보낸 CA 인증서에 대해 유효한 지 CA 목록에서 확인하는 과정을 진행한다.

  4. CA 인증서에 대한 신뢰성이 확보되었다면, 클라이언트는 난수 바이트를 생성하여 서버의 공개키로 암호화한다.
    이 난수 바이트는 대칭키를 정하는데 사용이 되고, 앞으로 서로 메시지를 통신할 때 암호화하는데 사용된다.

  5. 만약 2번 단계에서 서버가 클라이언트 인증서를 함께 요구했다면, 클라이언트의 인증서와 클라이언트의 개인키로 암호화된 임의의 바이트 문자열을 함께 보내준다.

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

  7. 클라이언트는 handshake 과정이 완료되었다는 finished 메시지를 서버에 보내면서, 지금까지 보낸 교환 내역들을 해싱 후 그 값을 대칭키로 암호화하여 같이 담아 보내준다.

  8. 서버도 동일하게 교환 내용들을 해싱한 뒤 클라이언트에서 보내준 값과 일치하는 지 확인한다. 일치하면 서버도 마찬가지로 finished 메시지를 이번에 만든 대칭키로 암호화하여 보낸다.

  9. 클라이언트는 해당 메시지를 대칭키로 복호화하여 서로 통신이 가능한 신뢰받은 사용자란 걸 인지하고, 앞으로 클라이언트와 서버는 해당 대칭키로 데이터를 주고받을 수 있게 된다.

profile
https://github.com/yuseogi0218

0개의 댓글