私がデバッグしているC++コードは、ブーストAPI「boost::asio::ssl::context::no_tlsv1」を使用して、TLSv1の場合、クライアントからの接続要求を制限します。TLSv1.2 であれば制限なし。
Client Hello TLS のバージョンが 1.2 であっても、以下のパケット(wireshark キャプチャ)で接続要求が受け付けられない ブースト API の「boost::asio::ssl::context::no_tlsv1」が Record Layer のバージョン番号や Client をチェックしているのだろうかhello バージョン番号 (下の図で強調表示されています)
RFC5246 によると、「古いサーバーとのネゴシエーションを希望する TLS クライアントは、レコード層のバージョン番号として任意の値 {03,XX} を送信できます」。つまり、レコード層のバージョン番号は何でもかまいません
ブーストのドキュメントには、この API が tlsv1 を無効にすることが記載されていますが、その方法については言及されていません https://www.boost.org/doc/libs/1_58_0/doc/html/boost_asio/reference/ssl__context.html
この API の仕組みを理解するための助けを求めています。
- レコード層のバージョンまたはクライアントの hello バージョンをチェックしていますか?
- レコード層のバージョンをチェックして、クライアントのリクエストを制限することを決定した場合、RFC5246 に違反していませんか?
- 議論中の API がレコード層のバージョンをチェックする場合、クライアントの hello バージョンをチェックするブースト API はありますか?
前もって感謝します。