次の方法で共有


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 "トランスポート層セキュリティ" (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.Selector selectable non-blocking I/Ojava.nio.channels.spi.AbstractSelectableChannel#configureBlocking(boolean) non-blocking I/O (polling)java.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。 最初の呼び出しを行う前に、構成パラメーターを設定するwrap()必要があります。 unwrap()beginHandshake() これらのメソッドはすべて、最初のハンドシェイクをトリガーします。

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

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

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

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

{@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、アプリケーションは未処理の委任されたタスクを取得し、そのメソッドをjava.lang.Runnable#run() run()呼び出すために呼び出#getDelegatedTask()す必要があります (場合によっては、コンピューティング戦略に応じて異なるスレッドを使用します)。 アプリケーションは、これ以上存在しない限り、委任されたタスクの取得を続行し、元の操作をもう一度試す必要があります。

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

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

ピアは、独自のクロージャ ハンドシェイク メッセージを送信して、終了の意図を通知します。 このメッセージが受信され、ローカルSSLEngineの呼び出しによって処理された後、アプリケーションは呼び出unwrap()して状態 "CLOSED" を探SSLEngineResultすことによって、または true を返す場合#isInboundDone()に、クローズを検出unwrap()できます。 何らかの理由でピアが適切な 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 が保存されます。 今後の委任されたタスクはすべて、このコンテキストを使用して処理されます。つまり、すべてのアクセス制御の決定は、エンジンの作成時にキャプチャされたコンテキストを使用して行われます。

<HR>

<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 enabled>><by default (API Levels)</th<>/tr></thead><tbody<>tr class="deprecated"><td>SSLv3</td 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+</tdd>><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>Cipher suites</h4><table><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>9-22</td<>td>9-19</td></tr><tr class="deprecated"><td>SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA</td<>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>9-19</td<>/tr tr><class="deprecated"<>td>SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA</td 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 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 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 tr<>class="deprecated"><td>SSL_DH_anon_WITH_3DES_EDE_CBC_SHA</td td><td>9-22</td><td></td></tr><tr class="deprecated"><td>SSL_DH_anon_WITH_DES_CBC_SHA</td td<>td>9-22</td td><></td></tr class><="deprecated"><td>SSL_DH_anon_WITH_RC4_128_MD5</td><td td>9-22</td td>><</td></tr tr<>class="deprecated"><td SSL_RSA_EXPORT_><WITH_DES40_CBC_SHA/td<>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 tr><class="deprecated"><td>SSL_RSA_WITH_NULL_MD5</td td<>td>9-22</td<>td></td<>/tr 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 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><>29+</td<>/tr tr><<>td>TLS_AES_256_GCM_SHA384</td><td td>>29+<</td<<>>/tr td><>><TLS_CHACHA20_POLY1305_SHA256</td><td td>29+</td><td>29+</td td></tr><tr class="deprecated">td>TLS_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA</td><td>1-8</td td><>1-8</td></tr tr<>class="deprecated"<>td>TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA</td><td td>1-8/td<>td>1-8<</td<>/tr tr><class="deprecated"<>td>TLS_DHE_DSS_WITH_AES_128_<<CBC_SHA/td<>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><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<>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 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><<>/>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 td>1-8</td<>/tr tr><class="deprecated"><td>TLS_DHE_RSA_WITH_AES_128_CBC_SHA</td><td td>9-25</td td><td>9-25</td<>/tr 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>20-25</td<>/tr 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 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 td>1-8</td<>td></td<>/tr tr><class="deprecated"><td TLS_DH_DSS_>><<WITH_3DES_EDE_CBC_SHA/td<>td td>1-8</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><></tr><tr class="deprecated"><td>TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA</td td><td>1-8</td><td><></tr tr><class="deprecated"<>td>TLS_DH_RSA_WITH_DES_CBC_SHA</td><td td>1-8</td><td></td></tr tr<>class="deprecated"><td TLS_DH_anon_EXPORT_WITH_><DES40_CBC_SHA/td<>td td>1-8</td><></td></tr tr<>class="deprecated"<>td>TLS_DH_anon_WITH_3DES_EDE_CBC_SHA</td td><td>1-8</td<>td></td></tr tr><class="deprecated"><td>TLS_DH_anon_WITH_AES_128_CBC_SHA</td><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 tr<>class="deprecated"><td>TLS_DH_anon_WITH_AES_128_GCM_SHA256</td td<>td>20-22</td td><<>/td<>/tr 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 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><></tr 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>><20-28</td><td></td<>/tr 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<>>20-28</td><td></td></tr><tr<>td>TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384/<td><td>20+</td td<>>20+</td<>/tr tr>><<td>TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256</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<>>20-25</td td<>>20-23</td></tr tr><<>td>TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA</td><td>21+</td><td td>21+</td<>/tr tr><><td><TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA/td><td>21+</td td>><21+</td></tr tr<>><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</td><td>20-22</td<>td></td<>/tr 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>20+</td></tr td><><>TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA</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 tr<><>td>TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384</td<>td td>>20<+</td<>></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 tr><class="deprecated"><td>TLS_ECDHE_RSA_WITH_RC4_128_SHA</td><td td>20-25</td td<>>20-23</td/tr><tr class="deprecated"><td>TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA</td td><td>20-22</td td>><</td<>/tr tr<>class="deprecated"<>td>TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA</td><td td>20-22</td td><></td></tr 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 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 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 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 tr><class="deprecated"><td>TLS_ECDH_RSA_WITH_AES_128_CBC_SHA</td td<>td>20-22</td><td></td></tr 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 tr<>class="deprecated"><td>TLS_ECDH_RSA_WITH_AES_256_<CBC_SHA/td><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 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 tr<>class="deprecated"<>td>TLS_ECDH_RSA_WITH_RC4_128_SHA</td><td td>20-22</td td>><</td<>/tr><tr class="deprecated"><td>TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA</td<>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 tr<>class="deprecated"><td>TLS_ECDH_anon_WITH_AES_256_<CBC_SHA/td><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 tr<>class="deprecated"><td>TLS_ECDH_anon_WITH_RC4_128_SHA</td td<>td>20-22</tdtd></td></tr tr><><td>TLS_EMPTY_RENEGOTIATION_INFO_SCSV</td><td td>20+</td<>td>20+</td></tr tr<><>td>TLS_FALLBACK_SCSV</td><td>21+</td<>td></td<>/tr tr><class="deprecated"><td ><><TLS_NULL_WITH_NULL_NULL/td><td td>1-8</td>><</td></tr tr><class="deprecated"><td>TLS_PSK_WITH_3DES_EDE_CBC_SHA</td td><>21-22</td td<>/td<>></tr<><>td>TLS_PSK_WITH_AES_128_CBC_SHA</td<>td td>21+<td><td>21+</td<>/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></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<>>20-28</td<>td/td><></tr><<>td>TLS_RSA_WITH_AES_128_GCM_SHA256</td<>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>><</td<>/tr tr><><td>TLS_RSA_WITH_AES_256_GCM_SHA384</td><td td>20+</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 tr><class="deprecated"<>td>TLS_RSA_WITH_NULL_SHA256</td><td td>20-22</td td<>></td></tr><></tbody></テーブル>

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

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

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

このページの一部は、Android オープンソース プロジェクトによって作成および共有され、クリエイティブ コモンズ 2.5 属性ライセンスに記載されている条件に従って使用される作業に基づく変更です。

コンストラクター

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 は Android 用 Mono インフラストラクチャをサポートしており、コードから直接使用するためのものではありません。

ThresholdType

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

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) プロトコルなどのプロトコルを使用してセキュリティで保護された通信を可能にするが、トランスポートに依存しないクラス。

適用対象