着信 TCP 接続を受け入れるサーバーを作成しています。サーバーが TCP 接続を受け入れ、クライアントから既に 16 (またはそれくらい) バイトを受信しているとします。これらの 16 バイトを知っている場合、サーバーはクライアントが SSL ハンドシェイクを開始する必要があるかどうかをどのように検出できますか?
実験を行ったところ、SSL 経由で localhost (127.0.0.1 または AF_UNIX) に接続している Linux システムで、クライアントが次のハンドシェイク (hexdump) を送信し、その後に一見ランダムな 16 バイトが送信されることが示されました。
8064010301004b0000001000003900003800003500001600001300000a07
00c000003300003200002f03008000000500000401008000001500001200
0009060040000014000011000008000006040080000003020080
クライアントが SSL ハンドシェイクを送信しているかどうかを判断できるようにするために、サーバーはこれらの最初の数バイトをどのようにプローブする必要がありますか? プローブは、すべての有効な SSL ハンドシェイクに対して true を返す必要があり、SSL ハンドシェイクではないクライアントによって送信されたメッセージに対して高い確率で false を返す必要があります。プローブにライブラリ (OpenSSL など) を使用することは許可されていません。プローブは単純なコードでなければなりません (C または Python の数十行のような)。