2012-03-10 5 views
4

내 서버가 SSLv3 및 TLS1.0 프로토콜을 모두 허용하도록 구성됩니다. 그러나 몇몇 클라이언트는 핸드 셰이크 매개 변수 아래로 전송하고 서버 안녕하세요 후에 클라이언트는 연결을 끊고 클라이언트 오류 또는 서버인지 확실하지 않은 'handshare failure (40) 경고를 보냅니다.SSLv3 레코드 계층 내에서 TLS 핸드 셰이크

다음은 초기 클라이언트의 헬로 패킷 :

Secure Socket Layer 
    SSLv3 Record Layer: Client Hello 
    Content Type: Handshake (22) 
    Version: SSL 3.0 (0x0300) <----------------- 
    Length: 103 
    Handshake Protocol: Client Hello 
     Handshake Type: Client Hello (1) 
     Length: 78 
     Version: TLS 1.0 (0x0301) <------------- 
     Random 
     Session ID Length: 0 
     Cipher Suites Length: 18 
     Cipher Suites (9 suites) 

에 녹화 층은 SSL 3.0하지만 내부의 핸드 쉐이크 프로토콜은 TLS 1.0입니다. 제 질문은 이것이 올바른 작업인가, 즉 각 레이어마다 서로 다른 버전을 사용하는 것입니까? 그것이 어떤 방법일까요? 어디서나 찾을 수 없지만 RFC를 검토했지만 참조를 찾을 수 없습니다. 또한 이러한 요청을 어떻게 내릴 수 있습니까?

EDIT : 문제를 해결하고 해결하는 데 관심이 없습니다. 어떻게 이러한 패킷을 보낼 수 있습니까? 어떤 명령? 이 이름을 어떻게 지정해야합니까?

Wireshark

: 와이어 샤크에 보일 것

curl -v -ssl3 https://www.mywebserver.com 

curl 명령 위 : 즉 내가 사용 SSL3 또는 TLS1 하나에 컬 또는 OpenSSL을 사용할 수 있지만 모두 기록 층과 악수를 레이어에 동일한 버전을 보낼 것이다

EDIT2 : 이것은 합법적입니까? 나는 주변에 인터넷 검색하고 어떤 예를 찾을 수 없습니다. 어떤 rfc 표준을 위반합니까?

감사

+0

지금까지 게시 한 추적에 문제가 없습니다. 이것은 TLS와 협상하는 일반적인 방법입니다. 경고 주위에 더 많은 데이터를 제공해야합니다. 대부분 클라이언트는 서버 인증서를 신뢰하지 않습니다. – EJP

+0

@ 마르다 니안 : WireShark와 같은 SSL 프록시를 사용하여 SSL 프로토콜을 자세히 살펴보십시오. 대부분 도구를 사용하는 것이 가장 쉬운 것은 아니지만 대부분의 경우 거기에서 잘못된 점을 볼 수 있습니다. 그러나 EJP가 제안한 것처럼 서버 인증서가 신뢰할 수 있는지 확인해야합니다. –

답변

1
난 그냥 같은 패킷을 보낼 수있는 방법을 알고 싶어요

? 어떤 명령?

openssl s_client -connect www.myserver.com:443 -no_ssl2 

는 사용자가 제공 한 추적 비슷한을 생산한다.

+0

위 이미지와 비슷한 레코드 및 핸드 셰이크 레이어에서 ssl3을 사용합니다. – Mardanian

3

예, 이는 합법입니다 (적어도 최근의 TLS 사양에서 명확히 설명되었습니다).

rfc5246 (TLS 1.2) 또는 rfc6101 (SSL 3.0) 또는 SSL/TLS와 관련된 다른 rfc에서 확인할 수 있습니다.

rfc5246 : 핸드 쉐이크 프로토콜에 관한

Earlier versions of the TLS specification were not fully clear on 
    what the record layer version number (TLSPlaintext.version) should 
    contain when sending ClientHello (i.e., before it is known which 
    version of the protocol will be employed). Thus, TLS servers 
    compliant with this specification MUST accept any value {03,XX} as 
    the record layer version number for ClientHello. 

    TLS clients that wish to negotiate with older servers MAY send any 
    value {03,XX} as the record layer version number. Typical values 
    would be {03,00}, the lowest version number supported by the client, 
    and the value of ClientHello.client_version. 

, 가장 높은 버전을 협상합니다 클라이언트가이 구현했다고 :

문제는 레코드 프로토콜의 초기 버전 및 핸드 쉐이크 프로토콜입니다
client_version: The version of the TLS protocol by which the client wishes to 
     communicate during this session. This SHOULD be the latest 
     (highest valued) version supported by the client 
관련 문제