공부 내용


서버 인증서와 서버 비공개 키를 생성합니다. 이를 위해 cryptography 라이브러리를 사용하여 공개키 기반의 서버 인증서를 생성합니다. 서버 인증서는 클라이언트가 서버의 신원을 확인하는 데 사용됩니다.

서버 인증서와 비공개 키는 server.key와 server.cer 파일에 저장됩니다.

  1. Client Hello:

    KakaoTalk_20241017_172953124.png

클라이언트가 서버에 TLS 연결을 요청하고, 지원하는 암호화 스위트를 서버에 전송합니다. 클라이언트는 서버의 인증서를 요구하며, 클라이언트의 암호화 요구사항(암호화 프로토콜, 압축 방법 등)을 서버에 전달합니다. 이때, Wireshark에서 패킷을 필터링하는 규칙 중 ‘tls.handshake.type == 1’을 사용합니다. ‘tls.handshake.type == 1’은 Client Hello 메시지를 필터링하는 규칙입니다. 이 필터를 사용하면 Client Hello 메시지만 캡처하여 분석할 수 있습니다. 이를 통해 클라이언트가 서버와의 연결을 설정할 때 사용한 암호화 스위트 및 프로토콜 정보를 확인할 수 있습니다. 2. Server Hello: 서버는 클라이언트의 요청을 수락하고, 선택한 암호화 스위트 및 SSL/TLS 버전을 클라이언트에 전달합니다. 서버는 자신의 인증서를 클라이언트에 전송하여 자신의 신원을 증명합니다. 이때, Wireshark에서 패킷을 필터링하는 규칙 중 ‘tls.handshake.type == 2’을 사용합니다. ‘tls.handshake.type == 2’은 Server Hello 메시지를 필터링하는 규칙입니다. 이 필터를 사용하면 Server Hello 메시지만 캡처하여 분석할 수 있습니다. 이를 통해 서버가 어떤 암호화 스위트를 선택했는지, 어떤 TLS 버전을 사용하는지 확인할 수 있습니다.

KakaoTalk_20241017_173202536.png

  1. 서버가 자신의 인증서를 클라이언트에 전송합니다.
  2. 클라이언트와 서버는 세션 키를 교환하여, 이후 통신에서 사용할 암호화된 세션을 수립합니다.

소감

이번엔 TLS에 관련해서 직접 server와 client 프로그램을 구현하고 그걸 wireshark라는 프로그램을 통해 확인하니 저번에 단순 프로그램과 비교해서 한눈에 보기 좋았고 훨씬 이해가 잘 되는 기분이 들었습니다.