서버 인증서와 서버 비공개 키를 생성합니다. 이를 위해 cryptography 라이브러리를 사용하여 공개키 기반의 서버 인증서를 생성합니다. 서버 인증서는 클라이언트가 서버의 신원을 확인하는 데 사용됩니다.
서버 인증서와 비공개 키는 server.key와 server.cer 파일에 저장됩니다.
Client Hello:
클라이언트가 서버에 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 버전을 사용하는지 확인할 수 있습니다.
이번엔 TLS에 관련해서 직접 server와 client 프로그램을 구현하고 그걸 wireshark라는 프로그램을 통해 확인하니 저번에 단순 프로그램과 비교해서 한눈에 보기 좋았고 훨씬 이해가 잘 되는 기분이 들었습니다.