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の上になりますcurl -v -ssl3 https://www.mywebserver.com
curlコマンド上: は、すなわち私が使用SSL3またはTLS1のいずれかにカールやOpenSSLを使用することができますが、それは両方の記録層と握手層に同じバージョンを送信します
EDIT2:これも法的ですか?私は周りにグーグルで行っており、例を見つけることができません。それはrfc規格に違反していますか?
おかげ
これまでに投稿したトレースには何も問題はありません。これはTLSとの交渉の通常の方法です。アラートの周りにさらに多くのデータを提供する必要があります。ほとんどの場合、クライアントはサーバー証明書を信頼しません。 – EJP
@Mardanian:WireSharkのようなSSLプロキシなどを使用して、SSLプロトコルを詳しく調べます。たいていの場合、そこで何が起こっているのかを見ることができますが、ツールは使いやすいものではありません。しかし、EJPが示唆するように、サーバー証明書が信頼できるものであることを確認することは可能です。 –