2012-03-10 4 views
4

My Serverは、SSLv3プロトコルとTLS1.0プロトコルの両方を受け入れるように設定されています。しかし、いくつかのクライアントがハンドシェイクパラメータを下回って送信していて、サーバのハローの後にクライアントが接続を切断し、クライアントの障害またはサーバであるかどうかわからない「handshare failure(40)」アラートを送信します。SSLv3レコード層内のTLSハンドシェイク

は、ここで最初のクライアントのHelloパケット:

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

:wiresharkの上になります

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

curlコマンド上: は、すなわち私が使用SSL3またはTLS1のいずれかにカールやOpenSSLを使用することができますが、それは両方の記録層と握手層に同じバージョンを送信します

EDIT2:これも法的ですか?私は周りにグーグルで行っており、例を見つけることができません。それはrfc規格に違反していますか?

おかげ

+0

これまでに投稿したトレースには何も問題はありません。これはTLSとの交渉の通常の方法です。アラートの周りにさらに多くのデータを提供する必要があります。ほとんどの場合、クライアントはサーバー証明書を信頼しません。 – EJP

+0

@Mardanian: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 
関連する問題