Share via


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>機密性 (Privacy Protection) </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> 應用程式資料 - 一旦建立通訊參數且交握完成,應用程式資料可能會流經 SSLEngine。 輸出應用程式訊息受到加密和完整性保護,而輸入訊息會反轉進程。

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

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

數據會分別在輸出或輸入數據上呼叫 #wrap(ByteBuffer, ByteBuffer) wrap()#unwrap(ByteBuffer, ByteBuffer) unwrap() 來移動引擎。 根據的狀態 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狀態傳回「已關閉」或 #isOutboundDone() 傳回 true 為止。 從 wrap() 方法取得的所有數據都應該傳送至對等。

#closeOutbound() 用來向引擎發出信號,表示應用程式不會傳送更多數據。

對等會傳送自己的關閉交握訊息來發出關閉意圖的訊號。 在本機呼叫收到並處理SSLEngineunwrap()此訊息之後,應用程式可以呼叫 unwrap() 並尋找SSLEngineResult狀態為 「已關閉」的 ,或如果#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>Protocol</h4><會根據>><<預設 (API 層級 <) ) <><> /th/th enabled) /th<>/><tr/thead><tbody<> (tr>>><<<> class=“deprecated”><td>SSLv3</td td td><>1&ndash,25</td td><>1–22</td/tr><td><><> TLSv1</td td><>1+/td><td>1+<</td/tr<><>td>TLSv1.1</td><<> td>20+</t td><td>20+/td></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<>數據表>><><<>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-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<>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/td>><</tr<>class=“deprecated”td>SSL_DH_anon_EXPORT_WITH_RC4_40_MD5</td td><>9-22</<>><td td td/td<>/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>><9-22</>><<td td/td></tr tr<>class=“deprecated”<>>td SSL_DH_anon_WITH_RC4_128_MD5><<>/td td 9-22</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 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=SSL_RSA_WITH_NULL_SHA><“>><deprecated”><>td SSL_RSA_WITH_NULL_MD5</td>><td 9-22</td><td td/><><><<td>9-22</td><td/td<>></tr tr><class=“deprecated”><td>SSL_RSA_WITH_RC4_128_MD5</td><>td 9-25</td<>td>9-19</td></tr><class=“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>><<>td TLS_AES_256_GCM_SHA384</td<>>td 29+/td td 29+/td td 29+<</><>td td><><><>< TLS_CHACHA20_POLY1305_SHA256/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 1-8</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 20-22</><><td/td></tr tr<>class=“deprecated”<<>>td TLS_DHE_DSS_WITH_AES_128_GCM_SHA256/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<>class=“deprecated”><td TLS_DHE_DSS_WITH_><<AES_256_GCM_SHA384/td td><>20-22</td<>td/td/td><></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><>1-8</td<>/tr tr><class=“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>< 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/td/tr<>class=“deprecated”><><>td TLS_DHE_RSA_WITH_AES_256_GCM_SHA384</td>><20-25<</td 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></<>td/tr<>tr class=“deprecated”>><td TLS_DH_RSA_WITH_DES_CBC_SHA</>><td td 1-8</td<>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><>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></td></tr<>class=“deprecated”><td>TLS_DH_anon_WITH_AES_256_CBC_SHA/<<td><td>9-22</td><td/td<>></tr><class=“deprecated”<>td>TLS_DH_anon_WITH_AES_256_CBC_SHA256</td td>><20-22</td><>< td/td<>/td/tr<>tr class=“deprecated”>><td TLS_DH_anon_WITH_AES_256_GCM_SHA384</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 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<>>td 20-28</>><<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></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/td><>></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>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/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><>24+/td>><24+<</td></tr tr><class=“deprecated”td>TLS_ECDHE_RSA_WITH_NULL_SHA</td<>td>20-22</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<>class=“deprecated”>><td TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA>><</td 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<>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>><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 td 20-22</td><td></td></tr tr><class=“deprecated”><><td>TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256</td td<>>20-22</td><td/td></<>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></tr tr<>class=“deprecated”><td>TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384</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/td<>/tr<>class=“deprecated”><>td TLS_ECDH_RSA_WITH_RC4_128_SHA</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/><td></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/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>20+/td td>20+<</td<<>>/tr>><<td>TLS_FALLBACK_SCSV</td<>>21+</><<>td td/<>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+</tdtd>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<>><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/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 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<>class=“deprecated”td TLS_RSA_WITH_NULL_MD5><></Td><td>1-8</td></td/td><></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 檔。

此頁面的部分是根據 原始碼專案所建立和共用的工作進行修改,並根據 中所述的詞彙使用。

建構函式

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) 通訊協定等通訊協定來啟用安全通訊,但與傳輸無關。

適用於