2016-08-03 3 views
0

클라이언트 측에서는 TLS V1.0,1.1 및 1.2를 지원한다고 가정 해 보겠습니다. 원격 사이트는 TLS V1.0 및 1.1을 지원합니다. 양쪽 모두 동일한 암호를 지원합니다.TLS 버전 불일치 (?)

내 질문 :

1 - 나의 이해하려면 나는 가능한 가장 높은 TLS 버전을 사용하여 통신을 시작 항상 것입니다. 이 경우 상대방과 어떻게 연결할 수 있습니까?

2 - 다음은 위와 같이 클라이언트와 서버 간의 Wireshark CLIENT HELLO 캡처입니다.

TLSv1.1 Record Layer: Handshake Protocol: Client Hello 
    Content Type: Handshake (22) 
    Version: TLS 1.2 (0x0303) 
    Length: 172 
    Handshake Protocol: Client Hello 
     Handshake Type: Client Hello (1) 
     Length: 168 
     Version: TLS 1.2 (0x0303) 
     Random 
     Session ID Length: 0 
     Cipher Suites Length: 52 
     Cipher Suites (26 suites) 
     Compression Methods Length: 1 
     Compression Methods (1 method) 
     Extensions Length: 75 
     Extension: server_name 
     Extension: elliptic_curves 
     Extension: ec_point_formats 
     Extension: signature_algorithms 
     Extension: SessionTicket TLS 
     Extension: renegotiation_info 

이 연결 시도는 "SSL/TLS 보안 채널을 만들지 못함"을 나타냅니다. 나는 이것이 "TLSV1.1 레코드 레이어"과 "버전 : TLS 1.2 (0x0303)"으로 묘사 된 것과 관련이 있다고 생각합니다. 이것이 연결이 실패하는 이유가 될 수 있습니까?

답변

2

클라이언트는 지원하는 최상의 버전 (이 경우 TLS 1.2)을 나타내는 ClientHello로 핸드 셰이크를 시작합니다. 그런 다음 서버는 클라이언트가 제공 한 버전 (즉, 귀하의 경우에는 TLS 1.1) 이하인 서버가 지원하는 최상의 버전으로 ServerHello로 응답합니다. 클라이언트가이 버전 (즉, TLS 1.2 만 지원하도록 구성된 클라이언트)을 기꺼이 수락하지 않으면 연결을 닫습니다.

+0

하지만 "TLSV1.1 레코드 레이어"와 "버전 : TLS 1.2"가 왜 그런가요? – JustAGuy

+0

그냥 혼란스러워하는이 캡쳐 된 것 같습니다 : http://imgur.com/hasn6rs – JustAGuy

+0

@gilfalko : Wireshark 버전에서 "TLSv1.1 Record Layer"가 나오는 이유를 알 수 없습니다. 초기 단계에서 레코드 계층 프로토콜이 TLS 1.2이므로 "TLSv1.2 레코드 계층"입니다. 두 번째 예제에서 레코드 계층 프로토콜은 TLS 1.0이고 ClientHello 프로토콜 버전은 TLS 1.2입니다. 그럼에도 불구하고이 행은 다음 데이터의 요약 일뿐입니다. 즉, 실제 정보는 세부 정보에만 있습니다. –

0

Wireshark의 이전 버전은 TLSv1.1을보고했기 때문에 추후 패킷에서 Record와 ClientHello 모두 TLSv1.2를 명확하게 나타냅니다. 캡처를 저장하고 Wireshark를 업그레이드 한 다음 캡처를 다시로드하십시오.

업데이트 : SSL \ TLS 핸드 셰이크가 완전 함을 보장하는 것이 중요합니다. 그렇지 않으면 어떤 이유로 Wireshark는 "프로토콜"필드에 잘못된 TLS 프로토콜 버전을보고합니다.

0

두 개의 TLS 버전이 클라이언트 Hello 메시지와 함께 전송됩니다. 첫 번째 버전은 통신에 사용하는 TLS 버전을 나타내는 레코드 계층 버전입니다. 두 번째 버전은 클라이언트가 지원하는 최대 버전을 나타내는 클라이언트 Hello 값입니다.

Wireshark 캡처시 세 가지 TLS 버전이 있습니다. 나는 "TLSv1.1 Record Layer : Handshake Protocol : Client Hello"버전 1.1에 대한 참조가 잘못되었다고 생각한다.

클라이언트가 버전 1.2의 클라이언트 Hello를 레코드 레이어 버전 1.2에 표시된 것으로 보입니다. 서버는 버전 1.2를 지원하지 않으므로 레코드 계층에서 거부합니다. 이 문제를 해결하기 위해 클라이언트는 버전 1.0 레코드 내에 버전 1.2 클라이언트 Hello를 보낼 수 있습니다. 이렇게하면 서버는 버전 1.1을 지원하는 버전 1.0을 사용하여 통신 할 수 있으며 이후 통신은 버전 1.1을 사용합니다.