私は使用する必要があるアプリケーションを持っていますが、sで接続を受け入れたり受け入れServerSocketChannel
たりするアプリケーションを提供します。解決策はありますか?ありがとうSocketChannel
SSLContext
ServerSocketFactory
ServerSocket
Socket
2 に答える
「基本的な」JSSE.getSocketFactory
と.getServerSocketFactory
間接的にクライアント側SSLSocket
を作成するか、SSLServerSocket
サーバー側を作成しますSSLSocket
。いずれの場合も、Socket
(いくつかのメソッドを追加して) サブクラス化し、SSL/TLS プロトコルとネットワーク I/O の両方を単純な待機状態で管理します。 (ほとんどの) アプリケーションにとって最も単純なスタイルです。
チャネルを使用するには、代わりに SSL/TLS プロトコルのみを処理し、ネットワーク (またはその他の!) I/Oを処理しないSSLEngine を作成する必要があります。次に、自分自身を読み書きし、「ラップ」したデータを送信し、受信したデータを「アンラップ」に渡します。SocketChannel
SSLEngine
概要については、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 の例には、例を作成した人からのリンクがいくつかありますが、私はそれらを自分で見ていません。