2

私は使用する必要があるアプリケーションを持っていますが、sで接続を受け入れたり受け入れServerSocketChannelたりするアプリケーションを提供します。解決策はありますか?ありがとうSocketChannelSSLContextServerSocketFactoryServerSocketSocket

4

2 に答える 2

1

「基本的な」JSSE.getSocketFactory.getServerSocketFactory間接的にクライアント側SSLSocketを作成するか、SSLServerSocketサーバー側を作成しますSSLSocket。いずれの場合も、Socket(いくつかのメソッドを追加して) サブクラス化し、SSL/TLS プロトコルとネットワーク I/O の両方を単純な待機状態で管理します。 (ほとんどの) アプリケーションにとって最も単純なスタイルです。

チャネルを使用するには、代わりに SSL/TLS プロトコルのみを処理し、ネットワーク (またはその他の!) I/Oを処理しないSSLEngine を作成する必要があります。次に、自分自身を読み書きし、「ラップ」したデータを送信し、受信したデータを「アンラップ」に渡します。SocketChannelSSLEngine

概要については、https://docs.oracle.com/javase/8/docs/technotes/guides/security/jsse/JSSERefGuide.html#SSLEngineを参照してください。これには、クライアント用の部分的なコード例があります。peer-identity ヒントを使用せず変更することで、これを変更する必要がありますsetUseClientMode。(SSL/TLS クライアントは、サーバー ID によって保存されたセッションを (キャッシュして) 選択する必要がありますが、サーバーは以前に割り当てられ、クライアントが記憶していたセッション ID を使用するだけです。)false

次に、 https://docs.oracle.com/javase/8/docs/api/javax/net/ssl/SSLEngine.htmlまたはお気に入りの JDK/IDE でSSLEngineクラスの javadoc (非常に詳細な紹介を含む) を参照してください。

または、Java SSLEngine の例には、例を作成した人からのリンクがいくつかありますが、私はそれらを自分で見ていません。

于 2016-06-11T16:39:36.473 に答える