SSLEngine クラス

定義

Secure Sockets Layer (SSL) や IETF RFC 2246 "トランスポート層セキュリティ" (TLS) プロトコルなどのプロトコルを使用してセキュリティで保護された通信を可能にするが、トランスポートに依存しないクラス。

[Android.Runtime.Register("javax/net/ssl/SSLEngine", DoNotGenerateAcw=true)]
public abstract class SSLEngine : Java.Lang.Object
[<Android.Runtime.Register("javax/net/ssl/SSLEngine", DoNotGenerateAcw=true)>]
type SSLEngine = class
    inherit Object
継承
SSLEngine
属性

注釈

Secure Sockets Layer (SSL) や IETF RFC 2246 "Transport Layer Security" (TLS) プロトコルなどのプロトコルを使用してセキュリティで保護された通信を可能にするが、トランスポートに依存しないクラス。

セキュリティで保護された通信モードには、UL が含まれます。 <>

<LI><em>Integrity Protection</em>. SSL/TLS は、アクティブな wiretapper によるメッセージの変更から保護します。

<LI><em>Authentication</em>。 ほとんどのモードでは、SSL/TLS によってピア認証が提供されます。 通常、サーバーは認証され、クライアントはサーバーによって要求されたとおりに認証される場合があります。

<LI><em>Confidentiality (Privacy Protection)</em>. ほとんどのモードでは、SSL/TLS はクライアントとサーバーの間で送信されるデータを暗号化します。 これにより、データの機密性が保護されるため、パッシブ ワイヤータッパーは財務情報やさまざまな種類の個人情報などの機密データを表示しません。

</Ul>

これらの種類の保護は、特定の SSL 接続で使用される暗号化アルゴリズムの組み合わせである "暗号スイート" によって指定されます。 ネゴシエーション プロセス中に、2 つのエンドポイントが両方の環境で使用できる暗号スイートに同意する必要があります。 共通のスイートがない場合は、SSL 接続を確立することも、データを交換することもできません。

使用される暗号スイートは、"ハンドシェイク" と呼ばれるネゴシエーション プロセスによって確立されます。 このプロセスの目的は、"セッション" を作成または再参加することです。これにより、時間の経過と同時に多くの接続が保護される可能性があります。 ハンドシェイクが完了したら、 メソッドを使用してセッション属性に #getSession() アクセスできます。

クラスには SSLSocket 同じセキュリティ機能の多くが用意されていますが、すべての受信データと送信データは、基になる java.net.Socket Socketを使用して自動的に転送されます。これは、設計上、ブロック モデルを使用します。 これは多くのアプリケーションに適していますが、このモデルでは大規模なサーバーに必要なスケーラビリティは提供されません。

の主な違い SSLEngine は、トランスポート メカニズムに関係なく、受信バイト ストリームと送信バイト ストリームで動作することです。 ピアへの信頼性の SSLEngine 高い I/O トランスポートを配置するのは、ユーザーの責任です。 SSL/TLS 抽象化を I/O トランスポート メカニズムから分離することで、 SSLEngine は、従来の入出力ストリーム、ローカルjava.nio.ByteBuffer ByteBuffers配列またはバイト配列、将来の非同期 I/O モデルなどjava.nio.channels.spi.AbstractSelectableChannel#configureBlocking(boolean) non-blocking I/O (polling)java.nio.channels.Selector selectable non-blocking I/Ojava.net.Socket Socket、さまざまな I/O 型に使用できます。

大まかに言えば、 は SSLEngine 次のように表示されます。

app data

                           |           ^
                           |     |     |
                           v     |     |
                      +----+-----|-----+----+
                      |          |          |
                      |       SSL|Engine    |
              wrap()  |          |          |  unwrap()
                      | OUTBOUND | INBOUND  |
                      |          |          |
                      +----+-----|-----+----+
                           |     |     ^
                           |     |     |
                           v           |

                              net data

アプリケーション データ (プレーンテキストまたはクリアテキストとも呼ばれます) は、アプリケーションによって生成または使用されるデータです。 対応するデータはネットワーク データであり、ハンドシェークデータまたは暗号テキスト (暗号化) データで構成され、I/O メカニズムを介して転送されます。 受信データはピアから受信されたデータであり、送信データはピア宛てです。

(のコンテキスト SSLEngineでは、"ハンドシェイク データ" という用語は、セキュリティで保護された接続を確立および制御するために交換されたデータを意味します。ハンドシェイク データには、SSL/TLS メッセージ "alert"、"change_cipher_spec"、"ハンドシェイク" が含まれます)。

には 5 つの異なるフェーズがあります SSLEngine

<OL><li> Creation - は SSLEngine 作成および初期化されていますが、まだ使用されていません。 このフェーズでは、アプリケーションで固有の設定 (有効な暗号スイート、クライアント モードまたはサーバー モードでのハンドシェイクの有無SSLEngineなど) を設定SSLEngineできます。 ただし、ハンドシェイクが開始されると、新しい設定 (クライアント/サーバー モードを除く、以下を参照) が次のハンドシェイクに使用されます。

<li> Initial Handshake - 初期ハンドシェイクは、SSLSession が確立されるまで、2 つのピアが通信パラメーターを交換する手順です。 このフェーズでは、アプリケーション データを送信できません。

<li> アプリケーション データ - 通信パラメーターが確立され、ハンドシェイクが完了すると、アプリケーション データが を通過する SSLEngine可能性があります。 送信アプリケーション メッセージは暗号化され、整合性が保護され、受信メッセージはプロセスを逆にします。

<li> Rehandshaking - どちらの側も、アプリケーション データ フェーズ中にいつでもセッションの再ネゴシエーションを要求できます。 新しいハンドシェイク データは、アプリケーション データ間で混在させることができます。 再処理フェーズを開始する前に、アプリケーションは、有効な暗号スイートの一覧やクライアント認証を使用するかどうかなどの SSL/TLS 通信パラメーターをリセットできますが、クライアント/サーバー モード間で変更することはできません。 以前と同様に、ハンドシェイクが開始されると、新しい SSLEngine 構成設定は次のハンドシェイクまで使用されません。

<li> クロージャ - 接続が不要になった場合、アプリケーションは を SSLEngine 閉じ、基になるトランスポート メカニズムを閉じる前に、ピアに残っているメッセージを送受信する必要があります。 エンジンを閉じると、再利用できません。新 SSLEngine しいエンジンを作成する必要があります。 </OL> An SSLEngine は、初期化された から を呼び出 SSLContext#createSSLEngine() すことによって作成されます SSLContext。 、、または beginHandshake()の最初の呼び出しを行う前に、構成パラメーターを設定するwrap()unwrap()必要があります。 これらのメソッドはすべて、最初のハンドシェイクをトリガーします。

データは、それぞれ送信データまたは受信データで または #unwrap(ByteBuffer, ByteBuffer) unwrap() を呼び出#wrap(ByteBuffer, ByteBuffer) wrap()すことによってエンジン内を移動します。 の SSLEngine状態によっては、呼び出しで wrap() ソース バッファーからのアプリケーション データが使用され、宛先バッファーにネットワーク データが生成される場合があります。 送信データには、アプリケーションやハンドシェイク データが含まれている場合があります。 の unwrap() 呼び出しはソース バッファーを調べ、データがハンドシェイク情報である場合はハンドシェイクを進めるか、データがアプリケーションの場合は、宛先バッファーにアプリケーション データを配置する可能性があります。 基になる SSL/TLS アルゴリズムの状態によって、データが使用および生成されるタイミングが決まります。

を呼び出してwrap()unwrap()、操作の状態を示す を返し、(必要に応じて) エンジンと対話して進行する方法を返SSLEngineResultします。

SSLEngine 、完全な SSL/TLS パケットのみを生成/使用し、 への呼び出しの間にアプリケーション データを wrap()/unwrap()内部的に格納しません。 したがって、入力と出力 ByteBufferの s は、生成できる最大レコードを保持するために適切なサイズにする必要があります。 と の SSLSession#getPacketBufferSize() 呼び出し SSLSession#getApplicationBufferSize() を使用して、適切なバッファー サイズを決定する必要があります。 一般に、送信アプリケーション データ バッファーのサイズは重要ではありません。 バッファー条件でデータの適切な消費/生成が許可されない場合、アプリケーションは (を介して SSLEngineResult) を決定し、問題を修正してから、呼び出しを再試行する必要があります。

たとえば、 は、 unwrap() 使用可能な SSLEngineResult.Status#BUFFER_OVERFLOW 宛先バッファー領域が不足しているとエンジンが判断した場合に結果を返します。 アプリケーションでは、その値を呼び出 SSLSession#getApplicationBufferSize() し、宛先バッファーで使用可能な領域と比較し、必要に応じてバッファーを拡大する必要があります。 同様に、 を返すSSLEngineResult.Status#BUFFER_UNDERFLOW場合unwrap()、アプリケーションは を呼び出SSLSession#getPacketBufferSize()して、ソース バッファーにレコードを保持するための十分なスペース (必要に応じて拡大) を確保してから、より多くの受信データを取得する必要があります。

{@code
              SSLEngineResult r = engine.unwrap(src, dst);
              switch (r.getStatus()) {
              BUFFER_OVERFLOW:
                  // Could attempt to drain the dst buffer of any already obtained
                  // data, but we'll just increase it to the size needed.
                  int appSize = engine.getSession().getApplicationBufferSize();
                  ByteBuffer b = ByteBuffer.allocate(appSize + dst.position());
                  dst.flip();
                  b.put(dst);
                  dst = b;
                  // retry the operation.
                  break;
              BUFFER_UNDERFLOW:
                  int netSize = engine.getSession().getPacketBufferSize();
                  // Resize buffer if needed.
                  if (netSize > dst.capacity()) {
                      ByteBuffer b = ByteBuffer.allocate(netSize);
                      src.flip();
                      b.put(src);
                      src = b;
                  }
                  // Obtain more inbound network data for src,
                  // then retry the operation.
                  break;
              // other cases: CLOSED, OK.
              }
            }

とは異なり SSLSocket、SSLEngine のすべてのメソッドは非ブロッキングです。 SSLEngine 実装では、完了に長時間かかる可能性があるタスクの結果が必要な場合や、ブロックする場合もあります。 たとえば、TrustManager がリモート証明書検証サービスに接続する必要がある場合や、KeyManager がクライアント認証の一部として使用する証明書をユーザーに確認する必要がある場合があります。 さらに、暗号化署名の作成と検証が遅くなり、ブロックしているように見える場合があります。

ブロックする可能性がある操作では、 SSLEngine によって委任されたタスクが java.lang.Runnable 作成されます。 委任されたタスクの結果が必要であることを示す場合 SSLEngineResult 、アプリケーションは を呼び出 #getDelegatedTask() して未処理の委任されたタスクを取得し、そのメソッドを java.lang.Runnable#run() run() 呼び出す必要があります (場合によっては、コンピューティング戦略に応じて異なるスレッドを使用します)。 アプリケーションは、これ以上存在しない限り、委任されたタスクの取得を続行し、元の操作をもう一度試す必要があります。

通信セッションの終了時に、アプリケーションは SSL/TLS リンクを適切に閉じる必要があります。 SSL/TLS プロトコルにはクロージャ ハンドシェイク メッセージがあり、これらのメッセージは、基になるトランスポート メカニズムを SSLEngine 解放して閉じる前にピアに通信する必要があります。 クローズは、SSLException、インバウンド・クロージャ・ハンドシェイク・メッセージ、または close メソッドのいずれかによって開始できます。 いずれの場合も、クロージャ ハンドシェイク メッセージはエンジンによって生成され wrap() 、結果の SSLEngineResultの状態が "CLOSED" を返すか、true #isOutboundDone() を返すまで繰り返し呼び出す必要があります。 メソッドから取得したすべてのデータを wrap() ピアに送信する必要があります。

#closeOutbound() は、アプリケーションがそれ以上データを送信しないことをエンジンに通知するために使用されます。

ピアは、独自のクロージャ ハンドシェイク メッセージを送信して、その意図を閉じるよう通知します。 このメッセージがローカル SSLEngineunwrap() の呼び出しによって受信および処理された後、アプリケーションは を呼び出 unwrap() して状態が "CLOSED" の を SSLEngineResult 探すことによって、または true を返す場合 #isInboundDone() に、クローズを検出できます。 何らかの理由でピアが適切な SSL/TLS クロージャ メッセージを送信せずに通信リンクを閉じる場合、アプリケーションはストリームの終了を検出し、処理する受信メッセージがもうないことを経由して #closeInbound() エンジンに通知できます。 一部のアプリケーションでは、ピアからのメッセージを順番にシャットダウンすることを選択する場合があります。その場合、クローズがハンドシェイク メッセージによって生成され、ストリームの終了条件によって生成されなかったことをチェックできます。

暗号スイートの管理時に知る必要がある暗号スイートには、次の 2 つのグループがあります。

<UL><LI><em>Supported</em> 暗号スイート: SSL 実装でサポートされているすべてのスイート。 この一覧は を使用して #getSupportedCipherSuites()報告されます。

<LI><em>Enabled</em> 暗号スイート。サポートされているスイートの完全なセットより少ない場合があります。 このグループは メソッドを #setEnabledCipherSuites(String []) 使用して設定され、 メソッドを使用してクエリが #getEnabledCipherSuites() 実行されます。 最初は、推奨される最小構成を表す新しいエンジンで、既定の暗号スイート セットが有効になります。 </Ul>

実装の既定値では、サーバーを認証し、機密性を提供する暗号スイートのみを既定で有効にする必要があります。 両方の側が認証されていない通信や非プライベート (暗号化されていない) 通信に明示的に同意した場合にのみ、そのような暗号スイートが選択されます。

各 SSL/TLS 接続には 1 つのクライアントと 1 つのサーバーが必要です。そのため、各エンドポイントは、想定するロールを決定する必要があります。 この選択により、ハンドシェイク プロセスを開始するユーザーと、各パーティから送信するメッセージの種類が決まります。 メソッド #setUseClientMode(boolean) はモードを構成します。 最初のハンドシェイクが開始されると、 SSLEngine 再ネゴシエーションを実行する場合でも、 はクライアント モードとサーバー モードを切り替えできません。

アプリケーションでは、さまざまなスレッドで委任されたタスクを処理することを選択できます。 が SSLEngine 作成されると、現在 java.security.AccessControlContext の が保存されます。 今後の委任されたタスクはすべて、このコンテキストを使用して処理されます。つまり、すべてのアクセス制御の決定は、エンジンの作成時にキャプチャされたコンテキストを使用して行われます。

<人事>

<B>コンカレンシー に関する注意事項</B>: 次の 2 つのコンカレンシーの問題に注意する必要があります。

<OL><li>と unwrap() メソッドはwrap()、互いに同時に実行できます。

<li> SSL/TLS プロトコルでは、順序付けされたパケットが使用されます。 アプリケーションでは、生成されたパケットが順番に配信されるように注意する必要があります。 パケットが順不同で到着すると、予期しない結果または致命的な結果が発生する可能性があります。

例:

synchronized (outboundLock) {
                             sslEngine.wrap(src, dst);
                             outboundQueue.put(dst);
                         }

最終的なパケット順序を保証する方法がないため、2 つのスレッドは同時に同じメソッド ( wrap() または unwrap()) を呼び出そうとしないでください。 </Ol>

<h3>さまざまな Android バージョンの既定の<構成/h3>

SSLEngine 既定値 SSLContext から取得したインスタンスは、次のように構成されます。

<style type="text/css"> tr.deprecated { background-color: #ccc; color: #999; font-style: italic; }</スタイル>

<h4>Protocols</h4><table><thead><tr><th>Protocol</th>><Supported (API Levels)</th th>><Enabled by default (API Levels)</th<>/tr></thead><tbody<>tr class="deprecated"><td>SSLv3</td td><>1–25</td><td>1–22</td<>/tr tr><td>><TLSv1</td<>td>1+</td><td>1+</td<>/tr tr>><<td>TLSv1.1</td<>td>20+</td<>td>20+</td<>/tr tr<<>>td>TLSv1.2</td><td>20+</td<>td>20+</td></tr td>><><TLSv1.3</Td><td>29+</td<>td>29+</td></tr<>/tbody></table>

<h4>暗号スイート</h4><テーブル><thead><tr><th>Cipher suite</th>><Supported (API Levels)</th><>Enabled by default (API Levels)</th<>/tr></thead><tbody<>tr class="deprecated"<>td>SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA</td td<>td>9-22</td td<>>9-19</td></tr><tr class="deprecated"><td>SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA</td><td>9-22</td td<>>9-19</td<>/tr tr><class="deprecated"<>td>SSL_DHE_DSS_WITH_DES_CBC_SHA</td<>td td>9-22</td<>td td>9-19</td></tr tr><class="deprecated"<>td>SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA</td><td>9-22</td td td><>9-19</td></tr tr<>class="deprecated"><td>SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA</td><td td>9-22</td><td>9-19</td<>/tr<>class="deprecated"<>td>SSL_DHE_RSA_WITH_DES_CBC_SHA</td<>td td>9-22</td><td td>9-19</td<>/tr tr<>class="deprecated"><td>SSL_DH_anon_EXPORT_WITH_DES40_CBC_SHA</td><td>9-22</td td><></td<>/tr><tr class="deprecated"><td>SSL_DH_anon_EXPORT_WITH_RC4_40_MD5</td td><td>9-22</td<>td></td></tr<>class="deprecated"><td>SSL_DH_anon_WITH_3DES_EDE_CBC_SHA</td td><>9-22</Td><td></td></tr><class="deprecated"><td>SSL_DH_anon_WITH_DES_CBC_SHA</td td><td>9-22</td td><></td></tr tr><class="deprecated"><td>SSL_DH_anon_WITH_RC4_128_MD5</td><td td>9-22</td td>><</td></tr<>class="deprecated"><td SSL_RSA_EXPORT_><WITH_DES40_CBC_SHA/td><td>9-22</td td<>>9-19</td<>/tr tr><class="deprecated"><td>SSL_RSA_EXPORT_WITH_RC4_40_MD5</td><td td>9-22</td td><>9-19</td></tr tr><<>td>SSL_RSA_WITH_3DES_EDE_CBC_SHA</td td>><9+</td><td>9-19</Td></tr>tr class="deprecated"><td>SSL_RSA_WITH_DES_CBC_SHA</td td><td>9-22</td td>><9-19</td<>/tr><class="deprecated"><td>SSL_RSA_WITH_NULL_MD5</td td><td>9-22</td td<>></td<>/tr><class="deprecated"<>td>SSL_RSA_WITH_NULL_SHA</td><<td>9-22</td<>td></td></tr tr><class="deprecated"<>td>SSL_RSA_WITH_RC4_128_MD5</td><td td>9-25</td<>td td>9-19</td></tr tr><class="deprecated"<>td>SSL_RSA_WITH_RC4_128_SHA</td td<>td>9-25</td td<>>9-23</td></tr><Tr><td>TLS_AES_128_GCM_SHA256</td><td>29+</td td<>td>29+</td></tr td<>><td>TLS_AES_256_GCM_SHA384</td><td>29+</td<>td td>29+</td<>/tr<>td><>TLS_CHACHA20_POLY1305_SHA256</td><td>29+</td td 29+/td><td>29+</td td></Tr><tr class="deprecated">td>TLS_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA</td td><td>1-8</td td<>>1-8</td<>/tr tr><class="deprecated"><td>TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA</td><td>1-8</td><td td>1-8</td<>/tr class><="deprecated"<>td>TLS_DHE_DSS_WITH_AES_128_<<CBC_SHA/td<>td>9-22</td td><>9-22</td<>/tr tr<>class="deprecated"><td>TLS_DHE_DSS_WITH_AES_128_CBC_SHA256</td td<>td>20-22</td td<>>><</tr<>tr class="deprecated"<>td>TLS_DHE_DSS_WITH_AES_128_GCM_SHA256</td td>><20-22</td td><td></Td></tr>tr class="deprecated"><td>TLS_DHE_DSS_WITH_AES_256_CBC_SHA</td td<>td>9-22</td td>><20-22</td<>/tr tr><class="deprecated"<>td>TLS_DHE_DSS_WITH_AES_256_CBC_SHA256</td td<>td>20-22</td td<><>/td<>/tr<>class="deprecated"><td TLS_DHE_DSS_WITH_><<AES_256_GCM_SHA384/td><td td>20-22</td td><<>/td></tr tr><class="deprecated"<>td>TLS_DHE_DSS_WITH_DES_CBC_SHA</td><td td>1-8</td><td>1-8</td<>/tr tr><class="deprecated"<>td>TLS_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA</td td>><1-8</td td td td><>1-8</td></tr tr<>class="deprecated"><td>TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA</td<>td td>1-8</td><td>1-8</td></tr class><="deprecated"><td>TLS_DHE_RSA_WITH_AES_128_CBC_SHA</td<>td>9-25</td td td><>9-25</td<>/tr><class="deprecated"td>TLS_DHE_RSA_WITH_AES_128_CBC_SHA256</td><td td>20-25</td td><></td<>/tr tr<>class="deprecated"><td>TLS_DHE_RSA_WITH_AES_128_GCM_SHA256</td<>td td>20-25</td<>td td>20-25</td<>/tr<>class="deprecated"><td>TLS_DHE_RSA_WITH_AES_256_CBC_SHA</td>><<td>9-25</td td>><20-25</td<>/tr tr<>class="deprecated"><td>TLS_DHE_RSA_WITH_AES_256_CBC_SHA256</td td><td>20-25</td<>td></td></tr><class="deprecated"><td>TLS_DHE_RSA_WITH_AES_256_GCM_SHA384</td<>td>20-25/td td 20-25<</td><td>></tr><tr class="deprecated"><td>TLS_DHE_RSA_WITH_DES_CBC_SHA</td><td td>1-8</td<>td>1-8</td></tr tr><class="deprecated"><td>TLS_DH_DSS_EXPORT_WITH_DES40_CBC_SHA</td td>><1-8</td><td/td><></tr<>class="deprecated"><td TLS_DH_DSS_><WITH_3DES_EDE_CBC_SHA/td<>td>1-8</td td<><>/td<>/tr tr<>class="deprecated"><td>TLS_DH_DSS_WITH_DES_CBC_SHA</td td<>td>1-8</td<>td></td<>/tr><tr class="deprecated"<>td>TLS_DH_RSA_EXPORT_WITH_DES40_CBC_SHA</td td>><1-8</td td></td></td/tr><tr class="deprecated"><td>TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA</td td<>td>1-8</td td><></td></tr<>class="deprecated"<>td>TLS_DH_RSA_WITH_DES_CBC_SHA</td><td td>1-8</td<>td></td<>/tr><class="deprecated"><td TLS_DH_anon_EXPORT_WITH_>><<DES40_CBC_SHA/td<>td>1-8</td><td></td<>/tr tr><class="deprecated"><td>TLS_DH_anon_WITH_3DES_EDE_CBC_SHA</td><td td>1-8</td<>td></td></tr<>class="deprecated"><td>TLS_DH_anon_WITH_AES_128_CBC_SHA</td<>td>9-22</td td></td><></Tr><tr class="deprecated"><td>TLS_DH_anon_WITH_AES_128_CBC_SHA256</td td<>td>20-22</td<>td></td<>/tr<>class="deprecated"<>td>TLS_DH_anon_WITH_AES_128_GCM_SHA256</td<>td td>20-22</td><td></td></tr<>class="deprecated"><td>TLS_DH_anon_WITH_AES_256_CBC_SHA</td td>9-22</td><td></td></tr tr<>class="deprecated"<>td>TLS_DH_anon_WITH_AES_256_CBC_SHA256</td td><td>20-22</td<>td></td<>/tr<>class="deprecated"<>td>TLS_DH_anon_WITH_AES_256_GCM_SHA384</td><td td>20-22</td td><></td></tr><><tr class="deprecated"><td>TLS_DH_anon_WITH_DES_CBC_SHA</td td<>td>1-8</td td>><</td></tr><class="deprecated"<>td>TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA</td<>td td>20-22</td<>td></td<>/tr><<>td>TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA</td><td>20+</td><td td>20+</td></tr tr<>class="deprecated"><td>TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256</td td<>td>20-28</td<>td></td></tr><<>td>TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256</td<>td td>20+</td><td>20+</td/><tr><tr><td>TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA</td><td>20+</td<>td td>20+</td<>/tr tr<>class="deprecated"<>td>TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384</td td<>td>20-28</td td>><</td></tr tr>><<td>TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384/<td td>20+</td<>td>20+</td<>/tr td><>><TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256</td<>td>24+</td<>td td>24+</td></tr tr<>class="deprecated"<>td>TLS_ECDHE_ECDSA_WITH_NULL_SHA</td td<>>20-22</td td/>><<><td></tr><tr class="deprecated"><td>TLS_ECDHE_ECDSA_WITH_RC4_128_SHA</td><td td>20-25</td td>><20-23</td<>/tr tr>><<td>TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA</td<>td>21+</td td>21+</td<<>>/tr tr><><Td><TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA/td<>td>21+</td td<>td>21+</td></tr td>><<td>TLS_ECDHE_PSK_WITH_CHACHA20_POLY1305_SHA256</td<><>td td>>24+<</td<>/tr tr<>class="deprecated"<>td>TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA</tdtd>20-22</td<>td></td<>/tr td>><<>TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA</td><td td>20<+</td>><<>/tr tr><class="deprecated"<>td>TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256</td<>td>20-28</td td td<>><></Td></tr><tr><td>TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256</td><td>20+</td<>td td>20+</td></tr tr<<>>td>TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA</td><td>20+</td td<>td>20+</td></tr tr<>class="deprecated"><td TLS_><ECDHE_RSA_WITH_AES_256_CBC_SHA384/td<>td>20-28</td><td></td></tr td><><td>TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384</td><td td>20+</td><td>20+</td></tr tr>><<td>TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256</td td td><>24+</td><td td>24+</td></tr tr><class="deprecated"><td>TLS_ECDHE_RSA_WITH_NULL_SHA</td><td td>20-22</td<>td<><>/tr><class="deprecated"><td>TLS_ECDHE_RSA_WITH_RC4_128_SHA</td><td td>20-25</td td 20-23</td><td>></tr><tr class="deprecated"><td>TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA</td td><td>20-22</td><td></td<>/tr<>class="deprecated"<>td>TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA</td td<>td>20-22</td td>><</td<>/tr class><="deprecated">td>TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256</td td><td>20-22</td td><<>/td<>/tr tr><class="deprecated"><td>TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256</td td><td>20-22</td td><></td<>/tr tr<>class="deprecated"><td TLS_ECDH_><<ECDSA_WITH_AES_256_CBC_SHA/td<>td>20-22</td td<>></td<>/tr tr><class="deprecated"<>td>TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384</td td<>td>20-22</td td>><</td<>/tr<>class="deprecated"><td>TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384</td><td>20-22</td<>td></td<>/tr tr><class="deprecated"><td>TLS_ECDH_ECDSA_WITH_NULL_SHA</td td><td>20-22</td<>td></td<>/tr<>class="deprecated"<>td>TLS_ECDH_ECDSA_WITH_RC4_128_SHA</td<>td td>20-22</td td><></td></tr><tr class="deprecated"><td>TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA</td><td td>20-22</td<>td></td></tr<>class="deprecated"<>td>TLS_ECDH_RSA_WITH_AES_128_CBC_SHA</td td><>20-22</td td>><</td<>/tr><class="deprecated"><td>TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256</td<>td td>20-22</td td<>></td<>/tr><tr class="deprecated"<>td>TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256</td td<>td>20-22</td><td></td></tr<>class="deprecated"><td TLS_ECDH_RSA_WITH_AES_256_><CBC_SHA/td><td>20-22</td td>><</td<>/tr tr><class="deprecated"><td>TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384</td td><td>20-22</td<>td></td></tr<>class="deprecated"><td>TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384</td td><td>20-22</Td><td></td></tr><tr class="deprecated"><td>TLS_ECDH_RSA_WITH_NULL_SHA</td td><td>20-22</td<>td></td></tr><class="deprecated"><td>TLS_ECDH_RSA_WITH_RC4_128_SHA</td td<>td>20-22</td td></td<<>>/tr><class="deprecated"><td>TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA</td><td>20-22</td td><></td></tr tr><class="deprecated"<>td>TLS_ECDH_anon_WITH_AES_128_CBC_SHA</td><td td>20-22</td><td></td></tr<>class="deprecated"><td TLS_ECDH_anon_WITH_AES_256_><CBC_SHA/td><td>20-22</td td><></td<>/tr tr><class="deprecated"<>td>TLS_ECDH_anon_WITH_NULL_SHA</td td<>td>20-22</td><td></td></tr<>class="deprecated"><td>TLS_ECDH_anon_WITH_RC4_128_SHA</td td<>>20-22</td><td></td></tr td><<>>TLS_EMPTY_RENEGOTIATION_INFO_SCSV</td<>td td>20+</td td><>20+</td></tr><<>td>TLS_FALLBACK_SCSV</td><td td>21+</td<>td></td<>/tr tr<>class="deprecated"><td><TLS_NULL_WITH_NULL_NULL/td><td>1-8</td td><<>/td<>/tr tr<>class="deprecated"<>td>TLS_PSK_WITH_3DES_EDE_CBC_SHA</td td<>td>21-22</td<>td></td<>/tr<><>td>TLS_PSK_WITH_AES_128_CBC_SHA</td<>td>21+</td><td>21+</td></tr tr><td>><TLS_PSK_WITH_AES_256_CBC_SHA</td<>td td>21+/td td><td>21+<</td<>/tr tr><class="deprecated"><td>TLS_PSK_WITH_RC4_128_SHA</td<>td td>21-25</td td><<><>/tr tr><class="deprecated">td>TLS_RSA_EXPORT_WITH_DES40_CBC_SHA</td<>td>1-8</td td<>>1-8</td></tr tr<>class="deprecated"><td>TLS_RSA_WITH_3DES_EDE_CBC_SHA</td><td>1-8/td<>td>1-8<</td></tr tr><><td TLS_RSA_WITH_AES_><<128_CBC_SHA/td><td>9+</td><td>9+</td<>/tr tr<>class="deprecated"><td>TLS_RSA_WITH_AES_128_CBC_SHA256</td td<>td>20-28</td><td></td<>/tr><><td>TLS_RSA_WITH_AES_128_GCM_SHA256</td><td>20+</td><td>20+</td></tr td>><<>TLS_RSA_WITH_AES_256_CBC_SHA</td<>td td>9+/td td<>td>20+<</td<>/tr tr><class="deprecated"<>td>TLS_RSA_WITH_AES_256_CBC_SHA256</td<>td>20-28</td td><<>/tr tr<>><><td>TLS_RSA_WITH_AES_256_GCM_SHA384</td<>td>20+</td><td td>20+</td></tr tr><class="deprecated"<>td>TLS_RSA_WITH_DES_CBC_SHA</td><td td>1-8</td td><>1-8</td></tr tr<>class="deprecated"><td TLS_RSA_WITH_NULL_MD5></Td><td 1-8/td><td></td></tr tr><class="deprecated"<>td>TLS_RSA_WITH_NULL_SHA</td td<>td>1-8</td<>td></td></tr><class="deprecated"<>td>TLS_RSA_WITH_NULL_SHA256</td><td>20-22</td td<>></td></tr><></Tbody></テーブル>

<em>NOTE</em>: PSK 暗号スイートは、エンジンの作成に使用された が SSLContext で初期化されている場合にのみ、既定で PSKKeyManager有効になります。

1\.5 で追加されました。

の Java ドキュメント javax.net.ssl.SSLEngine

このページの一部は、によって作成および共有され、に記載されている条件に従って使用される作業に基づく変更です。

コンストラクター

SSLEngine()

SSLEngine内部セッション再利用戦略のヒントを提供しない のコンストラクター。

SSLEngine(IntPtr, JniHandleOwnership)

JNI オブジェクトのマネージド表現を作成するときに使用されるコンストラクター。ランタイムによって呼び出されます。

SSLEngine(String, Int32)

SSLEngineコンストラクター。

プロパティ

ApplicationProtocol

この接続でネゴシエートされた最新のアプリケーション プロトコル値を返します。

Class

この Objectのランタイム クラスを返します。

(継承元 Object)
DelegatedTask

このエンジン インスタンスのデリゲート タスクを返します。

EnableSessionCreation

このエンジンによって新しい SSL セッションを確立できるかどうかを返します。

Handle

基になる Android インスタンスへのハンドル。

(継承元 Object)
HandshakeApplicationProtocol

現在進行中の SSL/TLS ハンドシェイクでネゴシエートされたアプリケーション プロトコル値を返します。

HandshakeApplicationProtocolSelector

SSL/TLS ハンドシェイク中にアプリケーション プロトコル値を選択するコールバック関数を取得します。 または、SSL/TLS ハンドシェイクのアプリケーション プロトコル値を選択するコールバック関数を登録します。

HandshakeSession

SSLSession SSL/TLS ハンドシェイク中に構築されている を返します。

HandshakeStatus

このエンジン インスタンスのハンドシェイクの状態を返します。

IsInboundDone

このエンジンによって受信データが受け入れられないかどうかを返します。

IsOutboundDone

このエンジンによって送信データが生成されないかどうかを返します。

JniIdentityHashCode

Secure Sockets Layer (SSL) や IETF RFC 2246 "トランスポート層セキュリティ" (TLS) プロトコルなどのプロトコルを使用してセキュリティで保護された通信を可能にするが、トランスポートに依存しないクラス。

(継承元 Object)
JniPeerMembers

Secure Sockets Layer (SSL) や IETF RFC 2246 "トランスポート層セキュリティ" (TLS) プロトコルなどのプロトコルを使用してセキュリティで保護された通信を可能にするが、トランスポートに依存しないクラス。

NeedClientAuth

このエンジン インスタンスでクライアント認証が必要かどうかを返します。

PeerHost

ピアのホスト名を返します。

PeerPort

ピアのポート番号を返します。

PeerReference

Secure Sockets Layer (SSL) や IETF RFC 2246 "トランスポート層セキュリティ" (TLS) プロトコルなどのプロトコルを使用してセキュリティで保護された通信を可能にするが、トランスポートに依存しないクラス。

(継承元 Object)
Session

このエンジン インスタンスの SSL セッションを返します。

SSLParameters

この SSLEngine に対して有効な SSLParameters を返します。 または、 SSLParameters をこのエンジンに適用します。

ThresholdClass

この API は Mono for Android インフラストラクチャをサポートしており、コードから直接使用するためのものではありません。

ThresholdType

この API は Mono for Android インフラストラクチャをサポートしており、コードから直接使用するためのものではありません。

UseClientMode

ハンドシェイク時にこのエンジンがクライアント モードで動作するように設定されているかどうかを返します。

WantClientAuth

このエンジンがクライアント認証を要求するかどうかを返します。

メソッド

BeginHandshake()

この SSLEngine でハンドシェーク (初期または再ネゴシエーション) を開始します。

Clone()

このオブジェクトのコピーを作成して返します。

(継承元 Object)
CloseInbound()

これ SSLEngine以上受信ネットワーク データがこの に送信されていないことを通知します。

CloseOutbound()

この SSLEngineで送信アプリケーション データが送信されなくなることを通知します。

Dispose()

Secure Sockets Layer (SSL) や IETF RFC 2246 "トランスポート層セキュリティ" (TLS) プロトコルなどのプロトコルを使用してセキュリティで保護された通信を可能にするが、トランスポートに依存しないクラス。

(継承元 Object)
Dispose(Boolean)

Secure Sockets Layer (SSL) や IETF RFC 2246 "トランスポート層セキュリティ" (TLS) プロトコルなどのプロトコルを使用してセキュリティで保護された通信を可能にするが、トランスポートに依存しないクラス。

(継承元 Object)
Equals(Object)

他のオブジェクトがこのオブジェクトと "等しい" かどうかを示します。

(継承元 Object)
GetEnabledCipherSuites()

このエンジンで現在使用が有効になっている SSL 暗号スイートの名前を返します。

GetEnabledProtocols()

この SSLEngineで現在使用が有効になっているプロトコル バージョンの名前を返します。

GetHashCode()

オブジェクトのハッシュ コード値を返します。

(継承元 Object)
GetSupportedCipherSuites()

このエンジンでの使用を有効にできる暗号スイートの名前を返します。

GetSupportedProtocols()

この SSLEngineで使用できるプロトコルの名前を返します。

JavaFinalize()

オブジェクトへの参照がなくなったとガベージ コレクションが判断したときに、オブジェクトのガベージ コレクターによって呼び出されます。

(継承元 Object)
Notify()

このオブジェクトのモニターで待機している 1 つのスレッドを起動します。

(継承元 Object)
NotifyAll()

このオブジェクトのモニターで待機しているすべてのスレッドを起動します。

(継承元 Object)
SetEnabledCipherSuites(String[])

このエンジンで使用が有効になっている暗号スイートを設定します。

SetEnabledProtocols(String[])

このエンジンで使用するプロトコル バージョンを設定します。

SetHandle(IntPtr, JniHandleOwnership)

Handle プロパティを設定します。

(継承元 Object)
ToArray<T>()

Secure Sockets Layer (SSL) や IETF RFC 2246 "トランスポート層セキュリティ" (TLS) プロトコルなどのプロトコルを使用してセキュリティで保護された通信を可能にするが、トランスポートに依存しないクラス。

(継承元 Object)
ToString()

オブジェクトの文字列形式を返します。

(継承元 Object)
UnregisterFromRuntime()

Secure Sockets Layer (SSL) や IETF RFC 2246 "トランスポート層セキュリティ" (TLS) プロトコルなどのプロトコルを使用してセキュリティで保護された通信を可能にするが、トランスポートに依存しないクラス。

(継承元 Object)
Unwrap(ByteBuffer, ByteBuffer)

SSL/TLS ネットワーク データをプレーンテキスト アプリケーション データ バッファーにデコードしようとします。

Unwrap(ByteBuffer, ByteBuffer[])

SSL/TLS ネットワーク データをプレーンテキスト アプリケーション データ バッファーのシーケンスにデコードしようとします。

Unwrap(ByteBuffer, ByteBuffer[], Int32, Int32)

SSL/TLS ネットワーク データをプレーンテキスト アプリケーション データ バッファーのサブシーケンスにデコードしようとします。

Wait()

現在のスレッドが起動するまで待機します。通常<は、通知</em> または>< em 中断</em によって待機します>。>

(継承元 Object)
Wait(Int64)

現在のスレッドが起動するまで待機します。通常<は、通知></em> または <>em 中断</em>、または特定のリアルタイムが経過するまで待機します。

(継承元 Object)
Wait(Int64, Int32)

現在のスレッドが起動するまで待機します。通常<は、通知></em> または <>em 中断</em>、または特定のリアルタイムが経過するまで待機します。

(継承元 Object)
Wrap(ByteBuffer, ByteBuffer)

プレーンテキスト アプリケーション データのバッファーを SSL/TLS ネットワーク データにエンコードしようとします。

Wrap(ByteBuffer[], ByteBuffer)

一連のデータ バッファーから SSL/TLS ネットワーク データにプレーンテキスト バイトをエンコードしようとします。

Wrap(ByteBuffer[], Int32, Int32, ByteBuffer)

データ バッファーのサブシーケンスから SSL/TLS ネットワーク データにプレーンテキスト バイトをエンコードしようとします。

明示的なインターフェイスの実装

IJavaPeerable.Disposed()

Secure Sockets Layer (SSL) や IETF RFC 2246 "トランスポート層セキュリティ" (TLS) プロトコルなどのプロトコルを使用してセキュリティで保護された通信を可能にするが、トランスポートに依存しないクラス。

(継承元 Object)
IJavaPeerable.DisposeUnlessReferenced()

Secure Sockets Layer (SSL) や IETF RFC 2246 "トランスポート層セキュリティ" (TLS) プロトコルなどのプロトコルを使用してセキュリティで保護された通信を可能にするが、トランスポートに依存しないクラス。

(継承元 Object)
IJavaPeerable.Finalized()

Secure Sockets Layer (SSL) や IETF RFC 2246 "トランスポート層セキュリティ" (TLS) プロトコルなどのプロトコルを使用してセキュリティで保護された通信を可能にするが、トランスポートに依存しないクラス。

(継承元 Object)
IJavaPeerable.JniManagedPeerState

Secure Sockets Layer (SSL) や IETF RFC 2246 "トランスポート層セキュリティ" (TLS) プロトコルなどのプロトコルを使用してセキュリティで保護された通信を可能にするが、トランスポートに依存しないクラス。

(継承元 Object)
IJavaPeerable.SetJniIdentityHashCode(Int32)

Secure Sockets Layer (SSL) や IETF RFC 2246 "トランスポート層セキュリティ" (TLS) プロトコルなどのプロトコルを使用してセキュリティで保護された通信を可能にするが、トランスポートに依存しないクラス。

(継承元 Object)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

Secure Sockets Layer (SSL) や IETF RFC 2246 "トランスポート層セキュリティ" (TLS) プロトコルなどのプロトコルを使用してセキュリティで保護された通信を可能にするが、トランスポートに依存しないクラス。

(継承元 Object)
IJavaPeerable.SetPeerReference(JniObjectReference)

Secure Sockets Layer (SSL) や IETF RFC 2246 "トランスポート層セキュリティ" (TLS) プロトコルなどのプロトコルを使用してセキュリティで保護された通信を可能にするが、トランスポートに依存しないクラス。

(継承元 Object)

拡張メソッド

JavaCast<TResult>(IJavaObject)

Android ランタイムチェック型変換を実行します。

JavaCast<TResult>(IJavaObject)

Secure Sockets Layer (SSL) や IETF RFC 2246 "トランスポート層セキュリティ" (TLS) プロトコルなどのプロトコルを使用してセキュリティで保護された通信を可能にするが、トランスポートに依存しないクラス。

GetJniTypeName(IJavaPeerable)

Secure Sockets Layer (SSL) や IETF RFC 2246 "トランスポート層セキュリティ" (TLS) プロトコルなどのプロトコルを使用してセキュリティで保護された通信を可能にするが、トランスポートに依存しないクラス。

適用対象