2017-12-15 22 views
0

私はSSL/TLS経由で接続できるWebサーバーを作りたいと思っています。ブラウザはSSLセッションIDをパケットのどこに格納しますか。

HTTPSプロトコルはステートレスであるため、ブラウザがサーバーに接続するたびにハンドシェイクが行われることを想定しています。 同じクライアントブラウザに接続するたびに再ハンドシェークを避け、以前のハンドシェイクと同じ情報を使用したいと思います。

サーバが以前のブラウザとの再接続であることを識別するためには、SSLセッションIDを使用する必要があります。パケット内のSSLセッションIDはどこで確認できますか?

サーバーが再接続であることを知るためには、IDがパケット(つまりTCPヘッダー)内にある必要があります。私が間違っている?

私はサーバーを初めて作成しているので、私はライブラリを使用していません。私は直接パケットを操作しています。私はすでにパケットを操作するためのクラスを作った。 TLSレイヤーはTCPレイヤーの上にあるので、TLSレイヤーデータにアクセスするのに多大な労力は必要ありません。私は '記録層'のデータ構造を見ましたが、私はセッションIDを見つけることができませんでした。それはどこにある?

すでにHTMLサーバーの部分が完成しましたが、SSL/TLS機能を追加したいと思います。

私はhelloプロトコルとハンドシェイクがどのように行われているのか知っています。ハンドシェーク後の次のメインデータのパケットで、SSLセッションIDがどのようにサーバーに知られているかを知りたい。

+0

TLSセッションの再開はTCPレベルではなくTLSレベルで行われます。つまり、情報はTCPヘッダーにはなく、TLSメッセージ、特にブラウザの場合はTLS ClientHelloにあります。 –

+0

ステートレスサービスであるにもかかわらず、WebサービスはどのようにIDを引き出すことができますか? – Parker

+0

SSL/TLSセッションIDとHTTPセッションIDが混在していると思います。どちらも目的によっては全く違うものです。最初はTLSレベルで転送され、次にHTTPレベルで転送されます(通常はCookieとして)。 –

答えて

0

私は自分自身の質問に答えています。 私の仮定は間違っていると思います。 私はhelloプロトコルと他の手続きの後に別の接続を使用すると考えました。

私の新しい命題がさえ、HTTPSプロトコルでは、接続はハンドシェイクからのデータ転送のいくつかの量を時間の間、維持される」 です。 これがhttpsの単位転送である。 ので、すべてのHTTPS接続は、プロトコルのhelloから始まります"

したがって、https接続が行われるたびに、サーバーはhelloプロトコルからセッションIDを認識し、すでに確立されているセッションの中でIDを探します。

これについて明確な言及はありませんでした。 しかし、私が集めた情報から、私はこのように結論づけました。 誰かが明確な答えを知っている場合は、ここに投稿してください。

関連する問題