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>機密性 (隱私權保護)</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> 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()
或輸入數據,透過引擎移動。 根據的狀態 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
狀態傳回 “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.SSLEngine
Java 檔。
此頁面的部分是根據 Android 開放原始碼專案所建立和共用的工作進行修改,並根據 Creative Commons 2.5 屬性授權中所述的詞彙使用。
建構函式
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) 通訊協定等通訊協定來啟用安全通訊,但傳輸無關。 |