SSLEngine 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
類別,使用安全套接字層 (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
- 繼承
- 屬性
備註
類別,可使用安全套接字層 (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/O
java.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()
來移動引擎。 根據的狀態 SSLEngine
, wrap()
呼叫可能會取用來自來源緩衝區的應用程式數據,而且可能會在目的地緩衝區中產生網路數據。 輸出數據可能包含應用程式和/或交握數據。 的呼叫 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()
用來向引擎發出信號,表示應用程式不會傳送更多數據。
對等會傳送自己的關閉交握訊息來發出關閉意圖的訊號。 在本機呼叫收到並處理SSLEngine
unwrap()
此訊息之後,應用程式可以呼叫 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.SSLEngine
Java 檔。
此頁面的部分是根據 原始碼專案所建立和共用的工作進行修改,並根據 中所述的詞彙使用。
建構函式
SSLEngine() |
的 |
SSLEngine(IntPtr, JniHandleOwnership) |
建立 JNI 物件的 Managed 表示法時使用的建構函式;由運行時間呼叫。 |
SSLEngine(String, Int32) |
的建 |
屬性
ApplicationProtocol |
傳回為此連線交涉的最新應用程式通訊協定值。 |
Class |
傳回這個 |
DelegatedTask |
傳回這個引擎實例的委派工作。 |
EnableSessionCreation |
傳回這個引擎是否可以建立新的 SSL 工作階段。 |
Handle |
基礎Android實例的句柄。 (繼承來源 Object) |
HandshakeApplicationProtocol |
傳回目前正在進行中 SSL/TLS 交握上交涉的應用程式通訊協定值。 |
HandshakeApplicationProtocolSelector |
擷取在 SSL/TLS 交握期間選取應用程式通訊協定值的回呼函式。 -或- 註冊回呼函式,以選取 SSL/TLS 交握的應用程式通訊協定值。 |
HandshakeSession |
傳 |
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() |
訊號,表示不會再將輸入網路數據傳送至這個 |
CloseOutbound() |
訊號,表示此 |
Dispose() |
類別,使用安全套接字層 (SSL) 或 IETF RFC 2246「傳輸層安全性」 (TLS) 通訊協定等通訊協定來啟用安全通訊,但與傳輸無關。 (繼承來源 Object) |
Dispose(Boolean) |
類別,使用安全套接字層 (SSL) 或 IETF RFC 2246「傳輸層安全性」 (TLS) 通訊協定等通訊協定來啟用安全通訊,但與傳輸無關。 (繼承來源 Object) |
Equals(Object) |
指出其他物件是否「等於」這個物件。 (繼承來源 Object) |
GetEnabledCipherSuites() |
傳回目前啟用用於此引擎的 SSL 加密套件名稱。 |
GetEnabledProtocols() |
傳回目前啟用與這個 |
GetHashCode() |
傳回此物件的雜湊碼值。 (繼承來源 Object) |
GetSupportedCipherSuites() |
傳回可啟用此引擎使用之加密套件的名稱。 |
GetSupportedProtocols() |
傳回可與這個 |
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) 通訊協定等通訊協定來啟用安全通訊,但與傳輸無關。 |