3

httpセッションとhttpsセッションの両方にSSLServerSocketクラスを使用して、1つのポートをリッスンできますか(クライアントにhttpまたはhttpsが付属している自動検出を使用)?または、 2つのポートを開き、httpsにはSSLServerSocketを使用し、httpにはServerSocketを使用する必要がありますか?

ありがとう

4

1 に答える 1

4

あなたがやろうとしていることは、ポートの統合と呼ばれます。たとえば、Grizzly で実装されています。

SSLServerSocketHTTP と HTTPS の両方のトラフィックをリッスンするために を直接使用することはできません。読み取り時に直接ハンドシェイクが開始さServerSocketれるためSocketです。最初の数バイトを読み取って HTTP 要求を取得し、SSLSocket .

s を試したとは言えませんがSocket、TLS Client Hello を先読みし、必要に応じてプッシュバックする必要がありPushBackInputStreamます。

(私が知る限り、グリズリーはこれSSLEngineの代わりに使用SSLSocketしています。)

ポートの統合を使用することは非常に珍しいことに注意してください。先読みのオーバーヘッドが何であるかはわかりません。代わりに複数のポートを使用しても、通常は問題ありません (さらに、HTTP と HTTPS ではデフォルト ポートが異なるため、2 つの URL の少なくとも 1 つでポートを指定する必要があります)。

于 2013-03-15T11:53:36.253 に答える