4

私のサーバーは、SSLv3 と TLS1.0 プロトコルの両方を受け入れるように構成されています。しかし、少数のクライアントが以下のハンドシェイク パラメータを送信しており、サーバー ハローの後、クライアントは接続を切断し、'handshare failure(40)' アラートを送信します。それがクライアントの障害なのかサーバーなのか不明です。

最初のクライアント 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 を調べましたが、参照が見つかりません。また、どうすればそのようなリクエストを作成できますか?

編集: 問題のトラブルシューティングや修正には興味がありません。そのようなパケットを送信する方法を知りたいだけですか? 何かコマンド?そして、このメソッドに何と名前を付ける必要がありますか? つまり、curl または openssl を使用して ssl3 または tls1 を使用できますが、レコード レイヤーとハンドシェイク レイヤーの両方で同じバージョンを送信します。

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

上記の curl コマンドは、wireshark を参照します。

ワイヤーシャーク

EDIT2:これは合法ですか?私はグーグルで探し回っていますが、例が見つかりません。rfc標準に違反していますか?

ありがとう

4

2 に答える 2

4

はい、これは合法です (少なくとも最近の 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
于 2013-09-05T16:38:02.767 に答える
1

そのようなパケットを送信する方法を知りたいだけですか? 何かコマンド?

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

提供したトレースに似たものが生成されるはずです。

于 2012-03-12T12:12:03.927 に答える