SSLEngine 類別

定義

類別,可使用安全套接字層 (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
屬性

備註

類別,可使用安全套接字層 (SSL) 或 IETF RFC 2246「傳輸層安全性」(TLS) 通訊協定等通訊協定來啟用安全通訊,但傳輸無關。

安全通訊模式包括: <UL>

<LI><em>完整性保護</em>。 SSL/TLS 可防止使用中的 Wiretapper 修改訊息。

<LI><em>Authentication</em>. 在大部分模式中,SSL/TLS 會提供對等驗證。 伺服器通常會經過驗證,而且用戶端可能會依照伺服器的要求進行驗證。

<LI><em>機密性 (隱私權保護)</em>. 在大部分模式中,SSL/TLS 會加密在用戶端與伺服器之間傳送的數據。 這可保護數據的機密性,讓被動竊竊者不會看到敏感數據,例如財務信息或許多種類的個人資訊。

</UL>

這類保護是由「加密套件」所指定,這是指定 SSL 連線所使用的密碼編譯演演算法組合。 在交涉過程中,兩個端點必須就兩個環境中可用的加密套件達成一致。 如果沒有這類套件,則無法建立 SSL 連線,而且無法交換任何數據。

所使用的加密套件是由稱為「交握」的交涉程式所建立。 此程式的目標是建立或重新加入「會話」,這可能會在一段時間內保護許多連線。 交握完成後,您可以使用 方法來存取會話屬性 #getSession()

類別 SSLSocket 提供許多相同的安全性功能,但所有輸入和輸出數據都會使用基礎 java.net.Socket Socket自動傳輸,設計會使用封鎖模型。 雖然這適用於許多應用程式,但此模型不提供大型伺服器所需的延展性。

的主要區別 SSLEngine 在於它會在輸入和輸出位元組數據流上運作,與傳輸機制無關。 用戶負責 SSLEngine 安排可靠的 I/O 傳輸至對等。 藉由分隔 SSL/TLS 抽象與 I/O 傳輸機制,SSLEngine可用於各種不同的 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 和傳統的 Input/OutputStreams、本機java.nio.ByteBuffer ByteBuffers或位元組陣列、未來的異步 I/O 模型等等。

在高層次上, SSLEngine 會隨即出現:

app data

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

                              net data

應用程式數據(也稱為純文本或純文字)是應用程式產生或取用的數據。 其對應專案是網路數據,其中包含交握和/或加密文字(加密)數據,並註定要透過I/O機制傳輸。 輸入數據是已從對等接收的數據,而輸出數據則為對等。

(在 的內容 SSLEngine中,「交握數據」一詞是用來表示任何交換以建立和控制安全連線的數據。交握數據報含 SSL/TLS 訊息「警示」、「change_cipher_spec」和「交握」。

有五個不同的 SSLEngine階段。

<OL><li> Creation - SSLEngine 已建立和初始化 ,但尚未使用。 在這個階段中,應用程式可以設定任何 SSLEngine特定設定(啟用的加密套件、應該 SSLEngine 在用戶端或伺服器模式中交握等等)。 不過,一旦開始交握之後,任何新的設定(用戶端/伺服器模式除外,如下所示)都將用於下一次交握。

<li> Initial Handshake - 初始交握是兩個對等交換通訊參數的程式,直到 SSLSession 建立為止。 此階段無法傳送應用程式數據。

<li> Application Data - 建立通訊參數且交握完成之後,應用程式資料可能會流經 SSLEngine。 輸出應用程式訊息已加密且受到完整性保護,而輸入訊息會反轉程式。

<li> Rehandshaking - 任一端可能會在應用程式數據階段期間隨時要求重新談判會話。 新的交握數據可以混合在應用程式數據之間。 開始重新設置階段之前,應用程式可能會重設 SSL/TLS 通訊參數,例如已啟用的加密套件清單,以及是否要使用用戶端驗證,但無法在用戶端/伺服器模式之間變更。 和之前一樣,一旦開始交握,任何新的 SSLEngine 組態設定都不會使用,直到下一次交握為止。

<li> Close - 當不再需要連線時,應用程式應該關閉 , SSLEngine 並在關閉基礎傳輸機制之前,先傳送/接收任何剩餘的訊息給對等。 關閉引擎之後,它便無法重複使用:必須建立新的 SSLEngine 。 </OL> An SSLEngine 是透過從初始化 的SSLContext呼叫SSLContext#createSSLEngine()所建立。 在對 、 unwrap()beginHandshake()進行第一次呼叫wrap()之前,應該先設定任何組態參數。 這些方法都會觸發初始交握。

數據會分別透過呼叫 或 #unwrap(ByteBuffer, ByteBuffer) unwrap() 輸出#wrap(ByteBuffer, ByteBuffer) wrap()或輸入數據,透過引擎移動。 根據的狀態 SSLEnginewrap() 呼叫可能會從來源緩衝區取用應用程式數據,而且可能會在目的地緩衝區中產生網路數據。 輸出數據可能包含應用程式和/或交握數據。 對 unwrap() 的呼叫會檢查來源緩衝區,而且如果數據是交握資訊,或如果數據是應用程式,則可能會將應用程式數據放在目的地緩衝區中。 基礎 SSL/TLS 演算法的狀態將決定何時取用和產生數據。

呼叫 wrap()unwrap() 傳回 SSLEngineResult ,指出作業的狀態,以及 (選擇性地) 如何與引擎互動以取得進度。

SSLEngine只會產生/取用完整的SSL/TLS 封包,而且不會在對的呼叫wrap()/unwrap()之間內部儲存應用程式數據。 因此,輸入和輸出 ByteBuffer必須適當地調整大小,以保存可產生的最大記錄。 呼叫 SSLSession#getPacketBufferSize()SSLSession#getApplicationBufferSize() 應該用來判斷適當的緩衝區大小。 輸出應用程式數據緩衝區的大小通常無關緊要。 如果緩衝區條件不允許適當的數據耗用量/生產,應用程式必須判斷 (透過 SSLEngineResult) 並更正問題,然後再試一次呼叫。

例如, unwrap() 如果引擎判斷沒有足夠的目的地緩衝區空間可用,則會傳回 SSLEngineResult.Status#BUFFER_OVERFLOW 結果。 應用程式應該呼叫 SSLSession#getApplicationBufferSize() 該值,並將該值與目的地緩衝區中可用的空間進行比較,並視需要放大緩衝區。 同樣地,如果 unwrap() 傳回 SSLEngineResult.Status#BUFFER_UNDERFLOW,應用程式應該呼叫 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、輸入關閉交握訊息或其中一個關閉方法。 在所有情況下,關閉交握訊息都是由引擎產生,而且 wrap() 應該重複呼叫,直到產生的 SSLEngineResult狀態傳回 “CLOSED” 或 #isOutboundDone() 傳回 true 為止。 從 wrap() 方法取得的所有數據都應該傳送至對等。

#closeOutbound() 用來向引擎發出通知,表示應用程式不會再傳送任何數據。

對等會傳送自己的關閉信號交換訊息,以發出關閉意圖。 在本機呼叫unwrap()收到並處理SSLEngine此訊息之後,應用程式可以呼叫 unwrap() 並尋找SSLEngineResult狀態為 “CLOSED” 的 ,或如果#isInboundDone()傳回 true,即可偵測關閉。 如果基於某些原因,對等關閉通訊連結而不傳送適當的 SSL/TLS 關閉訊息,則應用程式可以偵測數據流結尾,並可透過 #closeInbound() 該訊息向引擎發出訊號,這樣就不會再處理任何輸入訊息。 有些應用程式可能會選擇要求從對等端有序關閉訊息,在此情況下,他們可以檢查關閉是由交握訊息產生,而不是由數據流結束條件所產生。

管理加密套件時,您需要瞭解的兩組加密套件:

<UL><LI><em>Supported</em> 加密套件:SSL 實作支援的所有套件。 此清單會使用 #getSupportedCipherSuites()回報。

<LI><em>Enabled</em> 加密套件,可能小於完整的支援套件集。 這個群組是使用 #setEnabledCipherSuites(String []) 方法設定,並使用 方法進行查詢 #getEnabledCipherSuites() 。 一開始,新的引擎會啟用一組預設的加密套件,代表建議的最小組態。 </UL>

實作預設值只需要驗證伺服器並提供機密性的加密套件,預設為啟用。 只有當雙方明確同意未經驗證和/或非私人(未加密)通訊時,才會選取這類加密套件。

每個 SSL/TLS 連線都必須有一個用戶端和一部伺服器,因此每個端點都必須決定要承擔的角色。 這個選擇會決定誰開始交握程式,以及每一方應該傳送哪種類型的訊息。 方法 #setUseClientMode(boolean) 會設定模式。 啟動初始交握之後,即使執行重新談判, SSLEngine 用戶端與伺服器模式之間也無法切換。

應用程式可能會選擇處理不同線程中的委派工作。 SSLEngine建立 時,會儲存目前的 java.security.AccessControlContext 。 所有未來的委派工作都會使用此內容來處理:也就是說,所有訪問控制決策都會使用在引擎建立時擷取的內容進行。

<人力資源>

<B 並行附注</B>>:有兩個並行問題需要注意:

<OL><li>和 wrap()unwrap() 方法可以同時執行。

<li> SSL/TLS 通訊協議採用已排序的封包。 應用程式必須小心,以確保產生的封包會依序傳遞。 如果封包依序抵達,則可能會發生非預期或嚴重的結果。

例如:

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

由於沒有辦法保證最終封包排序,因此兩個線程不得嘗試同時呼叫相同的方法(或 wrap()unwrap())。 </老>

<h3>不同 Android 版本</h3 的預設設定>

SSLEngine 從預設值 SSLContext 取得的實體會設定如下:

<style type=“text/css”> tr.deprecated { background-color: #ccc; color: #999; font-style: italic; }</風格>

<h4>通訊協定/h4<>表<>態><<>為支持的通訊協定</第>><四>個通訊協定</第四個><>默認啟用 (API 層級<)</th></tr></thead><tbody><tr 類別=“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 tr<>><td>TLSv1.3</td><td>29+</td<>td>29+</td></tr<>/tbody></table>

<h4>加密套件</h4<>表><aad><tr><th>Cipher suite</th>><supported (API Levels)/><th 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>9-22</td><td>9-19</td<>/tr<>tr class=“deprecated”<>td>SSL_DHE_DSS_WITH_DES_CBC_SHA</><>td td 9-22</><>td td 9-19</><td/tr><tr class=“deprecated”<>td>SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA</td><td>9-22</td td><>9-19</td></tr><tr class=“deprecated”<>td>SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA</td>><td 9-22</><>td td 9-19</td<>/tr<>tr class=“deprecated”<>>td SSL_DHE_RSA_WITH_DES_CBC_SHA</>><td td 9-22</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 9-22</><><td td td/><td/tr<>tr class=“deprecated”><td>SSL_DH_anon_WITH_3DES_EDE_CBC_SHA</td td><>9-22</td><td></td></tr><tr class=“deprecated”><td SSL_DH_anon_WITH_DES_CBC_SHA</td>><td>9-22</td><<><> td/td/tr<>tr class=“deprecated”<>>td SSL_DH_anon_WITH_RC4_128_MD5</<>>td td 9-22</><><td td td/><td/tr<>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 9-22</>><td td 9-19</td<>/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>9-22</td>><td 9-19><</td/<>tr<>tr class=“deprecated”><>td SSL_RSA_WITH_NULL_MD5</<>>td td 9-22</<><>td td td/><td/td tr class=“deprecated”><td SSL_RSA_WITH_NULL_SHA</td>><<td>9-22</td><td/td<>/tr<>tr 類別=“deprecated”<>td>>< SSL_RSA_WITH_RC4_128_MD5/td><>td 9-25</td<>>td 9-19<></td/tr<>tr 類別=“deprecated”<>>td SSL_RSA_WITH_RC4_128_SHA<</><>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 29+/td td 29+<</<>><>td/tr><tr<>td>TLS_CHACHA20_POLY1305_SHA256<</>><td td 29+</td<>td 29+</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 1-8</><>td td 1-8</td></tr><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 20-22</<>><><td/td/tr tr><class=“deprecated”<>td>TLS_DHE_DSS_WITH_AES_128_GCM_SHA256</td><td>20-22</td td><></td></tr>tr class=“deprecated”><td TLS_DHE_DSS_WITH_AES_256_CBC_SHA</td>><td>9-22</td>><td 20-22</td></tr tr class=“deprecated”<>>td TLS_DHE_DSS_WITH_AES_256_CBC_SHA256</>><td td 20-22</><td td td></td<>/tr<><>tr class=“deprecated”><td TLS_DHE_DSS_WITH_><<AES_256_GCM_SHA384/td<>td>20-22</td<>td/><td></tr<>tr class=“deprecated”<>td>TLS_DHE_DSS_WITH_DES_CBC_SHA</><>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><>1-8</td<>/tr<>tr 類別=“deprecated”><td>TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA</td><>td 1-8/<>>td td 1-8<</<>td/tr<>tr class=“deprecated”><td>TLS_DHE_RSA_WITH_AES_128_CBC_SHA</>><td td 9-25/<>>td td 9-25<</td></tr tr><class=“deprecated”><td>TLS_DHE_RSA_WITH_AES_128_CBC_SHA256</td<>td>20-25</td<>td/td><<>/tr><tr class=“deprecated”><td>TLS_DHE_RSA_WITH_AES_128_GCM_SHA256</td<>>td 20-25</><>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 20-25</<><>><td td/tr tr<>class=“deprecated”<>>td TLS_DHE_RSA_WITH_AES_256_GCM_SHA384</td>><td 20-25/td><td>20-25<</td></tr><tr class=“deprecated”><td TLS_DHE_RSA_WITH_DES_CBC_SHA</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<>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 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>1-8</td<>td>><</tr><tr class=“deprecated”<>>td TLS_DH_RSA_WITH_DES_CBC_SHA</>><td 1-8</>><<td td/td></tr><tr class=“deprecated”><td TLS_DH_anon_EXPORT_WITH_><DES40_CBC_SHA/td><td>1-8</td<>td></td<>/tr<>tr 類別=“deprecated”<>td>TLS_DH_anon_WITH_3DES_EDE_CBC_SHA/<>>td td 1-8</>><<td td/><td/tr 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>>20-22</td><<> td/><td/tr><tr class=“deprecated”>><td TLS_DH_anon_WITH_AES_128_GCM_SHA256</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 20-22</<>><td td/<>td/tr><tr class=“deprecated”<>td>TLS_DH_anon_WITH_AES_256_GCM_SHA384</<>>td td 20-22</td<><> td/tr><><tr class=“deprecated”><td TLS_DH_anon_WITH_DES_CBC_SHA</td>><td>1-8</td><<><> td/tr><tr class=“deprecated”<>>td TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA</td><>td 20-22</>><<td td/td></tr>><<td>TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA</td><td>20+/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><>><td TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256<</>><td td 20+</td><td>20+</td/><tr><tr><td>TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA</td><td>20+/td td>20+<</<>td<>/<>tr tr class=“deprecated”><td>TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384</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 24+<</<<>>>td/tr tr><class=“deprecated”<>td>TLS_ECDHE_ECDSA_WITH_NULL_SHA</td><>td 20-22</td 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 21+<</td<><>>/tr tr><><td><TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA/td><td>21+/td td>21+<</td<><>/tr><>><td TLS_ECDHE_PSK_WITH_CHACHA20_POLY1305_SHA256</><>td td 24+/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>><<td>TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA</td<>>td 20+/td td 20+<</><>td<>/tr tr><class=“deprecated”<>td>TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256</>><td td 20-28</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 20+/<>>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 TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384</<>>td td 20+/td td 20+<</>>><<td/tr><<>tr td>TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256</td td td><>24+</td<>td>24+</td></tr><tr 類別=“deprecated”><td>TLS_ECDHE_RSA_WITH_NULL_SHA</td><>td 20-22<><<>/td td/td td/<>td/tr tr<>class=“deprecated”><>td TLS_ECDHE_RSA_WITH_RC4_128_SHA</><>td td 20-25</td><td>20-23</td></tr><tr class=“deprecated”><td TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA</td<>td>>20-22</td<>td></><td/tr tr<>class=“deprecated”>><td TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA</<>>td 20-22</td>><< td/td<>/tr tr><class=”deprecated“>td>TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256</td><td>20-22</td<>>< td/<>td/<>tr tr class=”deprecated“<>td TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256</td>><td>20-22<>><</td td/td<>/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 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 類別=“deprecated”><td>TLS_ECDH_ECDSA_WITH_NULL_SHA</><>td td 20-22</><><td td/><td/tr tr><class=“deprecated”>><td TLS_ECDH_ECDSA_WITH_RC4_128_SHA</><>td td 20-22</td td/td><><></tr><tr class=“deprecated”><td TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA</td<>td>>20-22</><td td></><td/tr tr<>class=“deprecated”>><td TLS_ECDH_RSA_WITH_AES_128_CBC_SHA</<>>td 20-22</td>><</td<>/tr tr><class=“deprecated”><td>TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256</td td>><20-22</td><td/<>td></tr><tr class=“deprecated”<>td>TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256</td>><td 20-22</>><<td td/td></tr 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 20-22</<<>>><td 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>>20-22</td><><>< td/td/tr><tr class=“deprecated”><>td TLS_ECDH_RSA_WITH_RC4_128_SHA</td<>>td 20-22</>><<td td td/td<>/tr 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 20-22</>><<td td/td></tr 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 20-22</><<<>>td td/tr tr<>class=“deprecated”><>td TLS_ECDH_anon_WITH_RC4_128_SHA</td<>td 20-22</td>><td></td></tr><tr><td>TLS_EMPTY_RENEGOTIATION_INFO_SCSV</td><td>20+/td><td>20+<</><td/>><<>tr tr td TLS_FALLBACK_SCSV</td>><td 21+</<><><>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 21-22</><<><>td td/td/tr<><>>td TLS_PSK_WITH_AES_128_CBC_SHA</td<>>td 21+</td><td>21+</td></tr<>td><>TLS_PSK_WITH_AES_256_CBC_SHA</td><>td 21+/td<>>td 21+<</><td/tr<>tr class=“deprecated”<>td>TLS_PSK_WITH_RC4_128_SHA</><>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<>><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 20+</td><td>20+</td<>/tr><<>td>TLS_RSA_WITH_AES_256_CBC_SHA</td><>td 9+</td>><td 20+</<>td/tr tr><class=“deprecated”<>td>TLS_RSA_WITH_AES_256_CBC_SHA256</<>>td 20-28</td>><< td/td<>/tr tr><><td>TLS_RSA_WITH_AES_256_GCM_SHA384</td><td>20+/td><td>20+<</<>td/tr<>tr class=“deprecated”<>td>TLS_RSA_WITH_DES_CBC_SHA</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 1-8</td<<><>> td/tr><tr class=“deprecated”>><td TLS_RSA_WITH_NULL_SHA256</td td 20-22</><<>>td td td></tr><><></tbody></桌子>

<em>NOTE</em>:只有在 SSLContext 已使用 初始化 PSKKeyManager引擎的 時,才會默認啟用 PSK 加密套件。

已在1.5中新增。

javax.net.ssl.SSLEngineJava 檔。

此頁面的部分是根據 Android 開放原始碼專案所建立和共用的工作進行修改,並根據 Creative Commons 2.5 屬性授權中所述的詞彙使用。

建構函式

SSLEngine()

SSLEngine 建構函式不提供內部會話重複使用策略的提示。

SSLEngine(IntPtr, JniHandleOwnership)

建立 JNI 物件的 Managed 表示法時使用的建構函式;由運行時間呼叫。

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

類別,可使用安全套接字層 (SSL) 或 IETF RFC 2246「傳輸層安全性」(TLS) 通訊協定等通訊協定來啟用安全通訊,但傳輸無關。

(繼承來源 Object)
JniPeerMembers

類別,可使用安全套接字層 (SSL) 或 IETF RFC 2246「傳輸層安全性」(TLS) 通訊協定等通訊協定來啟用安全通訊,但傳輸無關。

NeedClientAuth

傳回此引擎實例是否需要客戶端驗證。

PeerHost

傳回對等的主機名。

PeerPort

傳回對等的埠號碼。

PeerReference

類別,可使用安全套接字層 (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()

類別,可使用安全套接字層 (SSL) 或 IETF RFC 2246「傳輸層安全性」(TLS) 通訊協定等通訊協定來啟用安全通訊,但傳輸無關。

(繼承來源 Object)
Dispose(Boolean)

類別,可使用安全套接字層 (SSL) 或 IETF RFC 2246「傳輸層安全性」(TLS) 通訊協定等通訊協定來啟用安全通訊,但傳輸無關。

(繼承來源 Object)
Equals(Object)

指出其他物件是否「等於」這個物件。

(繼承來源 Object)
GetEnabledCipherSuites()

傳回目前啟用在此引擎上使用之 SSL 加密套件的名稱。

GetEnabledProtocols()

傳回通訊協定版本的名稱,這些版本目前已啟用以便與這個 SSLEngine搭配使用。

GetHashCode()

傳回此物件的雜湊碼值。

(繼承來源 Object)
GetSupportedCipherSuites()

傳回可在此引擎上使用的加密套件名稱。

GetSupportedProtocols()

傳回可與這個 SSLEngine搭配使用的通訊協議名稱。

JavaFinalize()

當垃圾收集決定不再參考物件時,垃圾收集行程在 物件上呼叫。

(繼承來源 Object)
Notify()

喚醒正在等候此物件監視器的單一線程。

(繼承來源 Object)
NotifyAll()

喚醒正在等候此物件監視器的所有線程。

(繼承來源 Object)
SetEnabledCipherSuites(String[])

設定啟用在此引擎上使用的加密套件。

SetEnabledProtocols(String[])

設定啟用在此引擎上使用的通訊協定版本。

SetHandle(IntPtr, JniHandleOwnership)

設定 Handle 屬性。

(繼承來源 Object)
ToArray<T>()

類別,可使用安全套接字層 (SSL) 或 IETF RFC 2246「傳輸層安全性」(TLS) 通訊協定等通訊協定來啟用安全通訊,但傳輸無關。

(繼承來源 Object)
ToString()

傳回物件的字串表示。

(繼承來源 Object)
UnregisterFromRuntime()

類別,可使用安全套接字層 (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 <notified/em>或<em>interrupted</em> 來喚醒它。<>

(繼承來源 Object)
Wait(Int64)

讓目前的線程等到喚醒為止,通常是因為 <em>notified</em> 或 <em>interrupted</em>,或直到經過一定數量的實時為止。

(繼承來源 Object)
Wait(Int64, Int32)

讓目前的線程等到喚醒為止,通常是因為 <em>notified</em> 或 <em>interrupted</em>,或直到經過一定數量的實時為止。

(繼承來源 Object)
Wrap(ByteBuffer, ByteBuffer)

嘗試將純文字應用程式數據的緩衝區編碼為 SSL/TLS 網路數據。

Wrap(ByteBuffer[], ByteBuffer)

嘗試將純文本位元組從數據緩衝區序列編碼為 SSL/TLS 網路數據。

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

嘗試將純文本位元組從數據緩衝區的子序列編碼為 SSL/TLS 網路數據。

明確介面實作

IJavaPeerable.Disposed()

類別,可使用安全套接字層 (SSL) 或 IETF RFC 2246「傳輸層安全性」(TLS) 通訊協定等通訊協定來啟用安全通訊,但傳輸無關。

(繼承來源 Object)
IJavaPeerable.DisposeUnlessReferenced()

類別,可使用安全套接字層 (SSL) 或 IETF RFC 2246「傳輸層安全性」(TLS) 通訊協定等通訊協定來啟用安全通訊,但傳輸無關。

(繼承來源 Object)
IJavaPeerable.Finalized()

類別,可使用安全套接字層 (SSL) 或 IETF RFC 2246「傳輸層安全性」(TLS) 通訊協定等通訊協定來啟用安全通訊,但傳輸無關。

(繼承來源 Object)
IJavaPeerable.JniManagedPeerState

類別,可使用安全套接字層 (SSL) 或 IETF RFC 2246「傳輸層安全性」(TLS) 通訊協定等通訊協定來啟用安全通訊,但傳輸無關。

(繼承來源 Object)
IJavaPeerable.SetJniIdentityHashCode(Int32)

類別,可使用安全套接字層 (SSL) 或 IETF RFC 2246「傳輸層安全性」(TLS) 通訊協定等通訊協定來啟用安全通訊,但傳輸無關。

(繼承來源 Object)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

類別,可使用安全套接字層 (SSL) 或 IETF RFC 2246「傳輸層安全性」(TLS) 通訊協定等通訊協定來啟用安全通訊,但傳輸無關。

(繼承來源 Object)
IJavaPeerable.SetPeerReference(JniObjectReference)

類別,可使用安全套接字層 (SSL) 或 IETF RFC 2246「傳輸層安全性」(TLS) 通訊協定等通訊協定來啟用安全通訊,但傳輸無關。

(繼承來源 Object)

擴充方法

JavaCast<TResult>(IJavaObject)

執行 Android 執行時間檢查的類型轉換。

JavaCast<TResult>(IJavaObject)

類別,可使用安全套接字層 (SSL) 或 IETF RFC 2246「傳輸層安全性」(TLS) 通訊協定等通訊協定來啟用安全通訊,但傳輸無關。

GetJniTypeName(IJavaPeerable)

類別,可使用安全套接字層 (SSL) 或 IETF RFC 2246「傳輸層安全性」(TLS) 通訊協定等通訊協定來啟用安全通訊,但傳輸無關。

適用於