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>認證</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#createSSLEngine()呼叫SSLContext所建立。 在對 、 wrap()或unwrap()進行第一次呼叫beginHandshake()之前,應該先設定任何組態參數。 這些方法都會觸發初始交握。
數據會分別透過呼叫 或 #wrap(ByteBuffer, ByteBuffer) wrap() 輸出#unwrap(ByteBuffer, ByteBuffer) unwrap()或輸入數據,透過引擎移動。 根據的狀態 SSLEngine, wrap() 呼叫可能會從來源緩衝區取用應用程式數據,而且可能會在目的地緩衝區中產生網路數據。 輸出數據可能包含應用程式和/或交握數據。 對 unwrap() 的呼叫會檢查來源緩衝區,而且如果數據是交握資訊,或如果數據是應用程式,則可能會將應用程式數據放在目的地緩衝區中。 基礎 SSL/TLS 演算法的狀態將決定何時取用和產生數據。
呼叫 wrap() 並 unwrap() 傳回 SSLEngineResult ,指出作業的狀態,以及 (選擇性地) 如何與引擎互動以取得進度。
SSLEngine只會產生/取用完整的SSL/TLS 封包,而且不會在對的呼叫wrap()/unwrap()之間內部儲存應用程式數據。 因此,輸入和輸出 ByteBuffer必須適當地調整大小,以保存可產生的最大記錄。 呼叫 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() 用來向引擎發出通知,表示應用程式不會再傳送任何數據。
對等會傳送自己的關閉信號交換訊息,以發出關閉意圖。 在本機呼叫SSLEngine收到並處理unwrap()此訊息之後,應用程式可以呼叫 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 屬性授權中所述的詞彙使用。
建構函式
| 名稱 | Description |
|---|---|
| SSLEngine() |
的 |
| SSLEngine(IntPtr, JniHandleOwnership) |
建立 JNI 物件的 Managed 表示法時使用的建構函式;由運行時間呼叫。 |
| SSLEngine(String, Int32) |
的 |
屬性
| 名稱 | Description |
|---|---|
| ApplicationProtocol |
傳回為此連線交涉的最新應用程式通訊協定值。 |
| Class |
傳回這個 |
| DelegatedTask |
傳回此引擎實例的委派工作。 |
| EnableSessionCreation |
傳回此引擎是否可以建立新的 SSL 工作階段。 |
| Handle |
基礎Android實例的句柄。 (繼承來源 Object) |
| HandshakeApplicationProtocol |
傳回目前正在進行中 SSL/TLS 交握上交涉的應用程式通訊協定值。 |
| HandshakeApplicationProtocolSelector |
擷取在 SSL/TLS 交握期間選取應用程式通訊協定值的回呼函式。 -或- 註冊回呼函式,以選取 SSL/TLS 交握的應用程式通訊協定值。 |
| HandshakeSession |
|
| HandshakeStatus |
傳回這個引擎實例交握的狀態。 |
| IsInboundDone |
傳回此引擎是否不再接受任何輸入數據。 |
| IsOutboundDone |
傳回此引擎是否不會再產生輸出數據。 |
| JniIdentityHashCode |
取得由互通執行時指派給此 Java 對等端的身份雜湊碼。 (繼承來源 Object) |
| JniManagedPeerState |
類別,可使用安全套接字層 (SSL) 或 IETF RFC 2246「傳輸層安全性」(TLS) 通訊協定等通訊協定來啟用安全通訊,但傳輸無關。 (繼承來源 JavaObject) |
| JniPeerMembers |
類別,可使用安全套接字層 (SSL) 或 IETF RFC 2246「傳輸層安全性」(TLS) 通訊協定等通訊協定來啟用安全通訊,但傳輸無關。 |
| NeedClientAuth |
傳回此引擎實例是否需要客戶端驗證。 |
| PeerHost |
傳回對等的主機名。 |
| PeerPort |
傳回對等的埠號碼。 |
| PeerReference |
取得這個 Java 節點的 JNI 物件參考。 (繼承來源 Object) |
| Session |
傳回此引擎實例的 SSL 工作階段。 |
| SSLParameters |
傳回此 SSLEngine 生效的 SSLParameters。 -或- 將 SSLParameters 套用至此引擎。 |
| ThresholdClass |
此 API 支援適用於 Android 的 Mono 基礎結構,並不適合直接從您的程式代碼使用。 |
| ThresholdType |
此 API 支援適用於 Android 的 Mono 基礎結構,並不適合直接從您的程式代碼使用。 |
| UseClientMode |
傳回交握時,此引擎是否設定為在用戶端模式中運作。 |
| WantClientAuth |
傳回此引擎是否會要求客戶端驗證。 |
方法
| 名稱 | Description |
|---|---|
| BeginHandshake() |
在此 SSLEngine 上起始交握(初始或重新談判)。 |
| Clone() |
建立並傳回這個 對象的複本。 (繼承來源 Object) |
| CloseInbound() |
表示不會再將輸入網路資料傳送至此 |
| CloseOutbound() |
訊號表示不會在此 |
| Construct(JniObjectReference, JniObjectReferenceOptions) |
類別,可使用安全套接字層 (SSL) 或 IETF RFC 2246「傳輸層安全性」(TLS) 通訊協定等通訊協定來啟用安全通訊,但傳輸無關。 (繼承來源 JavaObject) |
| Dispose() |
釋放該 Java 節點所持有的資源。 (繼承來源 Object) |
| Dispose(Boolean) |
釋放該 Java 節點所持有的資源。 (繼承來源 Object) |
| DisposeUnlessReferenced() |
類別,可使用安全套接字層 (SSL) 或 IETF RFC 2246「傳輸層安全性」(TLS) 通訊協定等通訊協定來啟用安全通訊,但傳輸無關。 (繼承來源 JavaObject) |
| Equals(Object) |
類別,可使用安全套接字層 (SSL) 或 IETF RFC 2246「傳輸層安全性」(TLS) 通訊協定等通訊協定來啟用安全通訊,但傳輸無關。 (繼承來源 JavaObject) |
| 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) |
| SetPeerReference(JniObjectReference, JniObjectReferenceOptions) |
類別,可使用安全套接字層 (SSL) 或 IETF RFC 2246「傳輸層安全性」(TLS) 通訊協定等通訊協定來啟用安全通訊,但傳輸無關。 (繼承來源 JavaObject) |
| ToArray<T>() |
從這個 Java 陣列包裝器建立一個受管理陣列。 (繼承來源 Object) |
| ToString() |
傳回物件的字串表示。 (繼承來源 Object) |
| UnregisterFromRuntime() |
將此 Java 節點從互通執行時中取消註冊。 (繼承來源 Object) |
| Unwrap(ByteBuffer, ByteBuffer) |
嘗試將 SSL/TLS 網路數據譯碼為純文字應用程式數據緩衝區。 |
| Unwrap(ByteBuffer, ByteBuffer[], Int32, Int32) |
嘗試將 SSL/TLS 網路數據譯碼為純文字應用程式數據緩衝區的子序列。 |
| Unwrap(ByteBuffer, ByteBuffer[]) |
嘗試將 SSL/TLS 網路數據譯碼成一連串純文字應用程式數據緩衝區。 |
| Wait() |
讓目前線程等候直到喚醒為止,通常是藉由em <notified/em>或<em>interrupted</em> 來喚醒它。<> (繼承來源 Object) |
| Wait(Int64, Int32) |
讓目前的線程等到喚醒為止,通常是因為 <em>notified</em> 或 <em>interrupted</em>,或直到經過一定數量的實時為止。 (繼承來源 Object) |
| Wait(Int64) |
讓目前的線程等到喚醒為止,通常是因為 <em>notified</em> 或 <em>interrupted</em>,或直到經過一定數量的實時為止。 (繼承來源 Object) |
| Wrap(ByteBuffer, ByteBuffer) |
嘗試將純文字應用程式數據的緩衝區編碼為 SSL/TLS 網路數據。 |
| Wrap(ByteBuffer[], ByteBuffer) |
嘗試將純文本位元組從數據緩衝區序列編碼為 SSL/TLS 網路數據。 |
| Wrap(ByteBuffer[], Int32, Int32, ByteBuffer) |
嘗試將純文本位元組從數據緩衝區的子序列編碼為 SSL/TLS 網路數據。 |
明確介面實作
| 名稱 | Description |
|---|---|
| IJavaPeerable.Disposed() |
類別,可使用安全套接字層 (SSL) 或 IETF RFC 2246「傳輸層安全性」(TLS) 通訊協定等通訊協定來啟用安全通訊,但傳輸無關。 (繼承來源 JavaObject) |
| IJavaPeerable.Finalized() |
類別,可使用安全套接字層 (SSL) 或 IETF RFC 2246「傳輸層安全性」(TLS) 通訊協定等通訊協定來啟用安全通訊,但傳輸無關。 (繼承來源 JavaObject) |
| IJavaPeerable.JniObjectReferenceControlBlock |
類別,可使用安全套接字層 (SSL) 或 IETF RFC 2246「傳輸層安全性」(TLS) 通訊協定等通訊協定來啟用安全通訊,但傳輸無關。 (繼承來源 JavaObject) |
| IJavaPeerable.SetJniIdentityHashCode(Int32) |
類別,可使用安全套接字層 (SSL) 或 IETF RFC 2246「傳輸層安全性」(TLS) 通訊協定等通訊協定來啟用安全通訊,但傳輸無關。 (繼承來源 JavaObject) |
| IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
類別,可使用安全套接字層 (SSL) 或 IETF RFC 2246「傳輸層安全性」(TLS) 通訊協定等通訊協定來啟用安全通訊,但傳輸無關。 (繼承來源 JavaObject) |
| IJavaPeerable.SetPeerReference(JniObjectReference) |
類別,可使用安全套接字層 (SSL) 或 IETF RFC 2246「傳輸層安全性」(TLS) 通訊協定等通訊協定來啟用安全通訊,但傳輸無關。 (繼承來源 JavaObject) |
擴充方法
| 名稱 | Description |
|---|---|
| GetJniTypeName(IJavaPeerable) |
取得實例 |
| JavaAs<TResult>(IJavaPeerable) |
試著強制 |
| JavaCast<TResult>(IJavaObject) |
執行 Android 執行時間檢查的類型轉換。 |
| JavaCast<TResult>(IJavaObject) |
類別,可使用安全套接字層 (SSL) 或 IETF RFC 2246「傳輸層安全性」(TLS) 通訊協定等通訊協定來啟用安全通訊,但傳輸無關。 |
| TryJavaCast<TResult>(IJavaPeerable, TResult) |
試著強制 |