SSLEngine クラス
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
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
- 継承
- 属性
注釈
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/O
java.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()
内部的に格納しません。 したがって、入力と出力 ByteBuffer
s は、生成できる最大レコードを保持するように適切なサイズに設定する必要があります。 適切なバッファー サイズを 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 暗号スイートは、エンジンの作成に使用されたキーが SSLContext
にのみ、既定で有効になります。
1\.5 で追加されました。
の Java ドキュメントjavax.net.ssl.SSLEngine
このページの一部は、Android オープンソース プロジェクトによって作成および共有され、クリエイティブ コモンズ 2.5 属性ライセンスに記載されている条件に従って使用される作業に基づく変更です。
コンストラクター
SSLEngine() |
|
SSLEngine(IntPtr, JniHandleOwnership) |
JNI オブジェクトのマネージド表現を作成するときに使用されるコンストラクター。ランタイムによって呼び出されます。 |
SSLEngine(String, Int32) |
の |
プロパティ
ApplicationProtocol |
この接続でネゴシエートされた最新のアプリケーション プロトコル値を返します。 |
Class |
この |
DelegatedTask |
このエンジン インスタンスのデリゲート タスクを返します。 |
EnableSessionCreation |
このエンジンによって新しい SSL セッションが確立されるかどうかを返します。 |
Handle |
基になる Android インスタンスへのハンドル。 (継承元 Object) |
HandshakeApplicationProtocol |
現在進行中の SSL/TLS ハンドシェイクでネゴシエートされたアプリケーション プロトコル値を返します。 |
HandshakeApplicationProtocolSelector |
SSL/TLS ハンドシェイク中にアプリケーション プロトコル値を選択するコールバック関数を取得します。 または、SSL/TLS ハンドシェイクのアプリケーション プロトコル値を選択するコールバック関数を登録します。 |
HandshakeSession |
|
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() |
これ以上受信ネットワーク データがこれに |
CloseOutbound() |
これ以上送信アプリケーション データが送信されていないことを通知します |
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() |
これで |
GetHashCode() |
オブジェクトのハッシュ コード値を返します。 (継承元 Object) |
GetSupportedCipherSuites() |
このエンジンで使用できる暗号スイートの名前を返します。 |
GetSupportedProtocols() |
これで |
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) プロトコルなどのプロトコルを使用してセキュリティで保護された通信を可能にするが、トランスポートに依存しないクラス。 |