• 카테고리

    질문 & 답변
  • 세부 분야

    취업 · 이직

  • 해결 여부

    미해결

TLS 핸드쉐이크 관련 해서 질문이 있습니다.

24.05.01 21:01 작성 24.05.03 14:43 수정 조회수 99

0

안녕하세요~다름이 아니고 TLS 핸드쉐이크 관련해서 이해가 안되는 부분이 있어서 문의 드립니다.

 

TLS 핸드쉐이크 과정에선 비대칭키 암호화 방식으로 통신하고 세션키가 공유된 이후엔 해당 세션키를 기반으로 대칭키 암호화 방식으로 데이터를 주고 받는다고 이해했는데요..

 

서버와 클라이언트간에 비대칭키 암호화 방식으로 통신하려면 서버에서 발급한 공개키를 클라이언트에서 가지고 있는 상태여야 되는거 아닌가요??

 

제가 이해하기로는 TLS 1.3 핸드쉐이크에선 Server Hello단계를 거쳐야만 공개키가 포함된 서버의 SSL 인증서를 전달 받게 되는거 같은데..그렇다면 공개키를 가지고 있지 않은 Client hello 단계에서는 서버에 데이터를 평문으로 보내게 되고

Server Hello 단계 이후는 Finished 단계로 핸드쉐이크가 끝나게 되니..그럼 결과적으로 핸드쉐이크 중 비대칭 암호화 통신은 핸드쉐이크 전 과정이 아닌 Server Hello 과정에서만 부분적으로 이루어지고 끝나는게 되는걸까요?? 머릿속에서 정리가 잘 안돼서 여쭤 봅니다 ㅎㅎ;;


 

답변 2

·

답변을 작성해보세요.

0

안녕하세요 상진님ㅎㅎ

이렇게 질문하신 거 맞으시죠? 제가 질문을 정리해봤는데요.

 

Q1. 서버와 클라이언트간에 비대칭키 암호화 방식으로 통신하려면 서버에서 발급한 공개키를 클라이언트에서 가지고 있는 상태여야 되는거 아닌가요??

>> 네 맞습니다. 여기서는 공개키가 포함된 SSL 인증서를 서버가 클라이언트에게 전달합니다.

Q2. 핸드쉐이크 중 비대칭 암호화 통신은 핸드쉐이크 전 과정이 아닌 Server Hello 과정에서만 국한적으로 이루어지는 건가요?

>> 아닙니다. 비대칭키 암호화부분은 크게 키교환, 인증서와 서명이라고 보시면 되고 이 과정과 관련이 되어있다면 비대칭키 암호화 통신 과정이라고 볼 수 있고 핸드쉐이크 과정은 비대칭키 암호화통신과정과 모두 다 연관이 되어있다고 보시면 됩니다.

좀 더 자세히 설명하면 다음과 같습니다.

  1. Client Hello

    • 클라이언트는 TLS 버전, 지원 가능한 암호 스위트 목록 등을 보냅니다. (비대칭 키 교환에 사용될 수 있는 암호화 알고리즘 포함)

  2. Server Hello

    • 서버는 클라이언트가 제공한 키 교환 매개변수를 기반으로 자신의 키 교환 매개변수를 생성하고 이를 클라이언트에게 전송합니다.

  3. Encrypted Extensions

    • 필요한 추가 확장 정보를 암호화된 형태로 교환합니다.

  4. Certificate

    • 서버는 자신의 인증서를 클라이언트에게 전송합니다. 이 인증서에는 서버의 공개 키가 포함되어 있으며, 이를 통해 서버의 신원을 검증할 수 있습니다.

  5. Certificate Verify

    • 서버는 자신의 개인 키를 사용하여 생성된 디지털 서명을 전송하여, 제공된 인증서의 유효성과 서버의 소유권을 증명합니다.

  6. Finished

    • 서버와 클라이언트 모두 이전에 교환된 모든 메시지에 대한 무결성과 인증을 확인하는 메시지를 보냅니다.

       

       

      이후부터는 세션 키를 사용하여 암호화됩니다.




또 질문 있으시면 언제든지 질문 부탁드립니다.

좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다. :)

감사합니다.

강사 큰돌 올림.


 

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.05.01

안녕하세요, 인프런 AI 인턴입니다.

sangjin.yoo님께서 TLS 핸드쉐이크 과정과 관련하여 가지고 계신 의문점에 대해 답변드리겠습니다.

TLS 핸드쉐이크 과정 중 초기 단계는 클라이언트가 서버에게 데이터를 평문으로 보낼 수 있습니다. 이것이 가능한 이유는 TLS 핸드쉐이크의 초기 단계에서 주고받는 정보는 암호화 필요성이 크지 않거나 중요하지 않은 정보(예: 지원하는 암호화 방식 리스트, 세션 ID 등)로 구성되기 때문입니다. 이후 단계에서 서버는 공개키가 포함된 인증서를 클라이언트에게 전달하며, 이 공개키를 사용하여 클라이언트는 서버와의 통신을 암호화할 수 있게 됩니다. 이러한 과정을 통해 최종적으로 안전한 통신 채널이 형성됩니다.

즉, Client Hello 단계에서는 고유한 식별 정보나 세션 재협상을 위한 정보 등 비암호화된 데이터를 주고받을 수 있으며, 이는 통신 시 보안이 크게 요구되지 않는 정보입니다. 실제 중요한 데이터 교환은 서버로부터 인증서를 받아 공개키를 확인한 후 안전하게 이루어집니다.

질문에 대해 더 구체적인 설명을 원하실 경우, ‘HTTPS프로토콜에 대해서 질문이 있습니다’에서 다룬 답변을 참고하시는 것도 도움이 될 수 있습니다. 해당 답변에서는 TLS 핸드쉐이크와 그 과정에 대한 개념적 설명을 제공하고 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.