Share via


SSLEngine Classe

Definizione

Classe che consente comunicazioni sicure usando protocolli come secure Sockets Layer (SSL) o IETF RFC 2246 "Transport Layer Security" (TLS), ma è indipendente dal trasporto.

[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
Ereditarietà
SSLEngine
Attributi

Commenti

Classe che consente comunicazioni sicure usando protocolli come secure Sockets Layer (SSL) o IETF RFC 2246 "Transport Layer Security" (TLS), ma è indipendente dal trasporto.

Le modalità di comunicazione sicure includono: <UL>

<LI><em>Integrity Protection</em>. SSL/TLS protegge dalla modifica dei messaggi da parte di un wiretapper attivo.

<LI><em>Authentication</em>. Nella maggior parte delle modalità SSL/TLS fornisce l'autenticazione peer. I server vengono in genere autenticati e i client possono essere autenticati come richiesto dai server.

<LI><em>Riservatezza (Protezione privacy)</em>. Nella maggior parte delle modalità, SSL/TLS crittografa i dati inviati tra client e server. Ciò protegge la riservatezza dei dati, in modo che i wiretapper passivi non visualizzino dati sensibili, ad esempio informazioni finanziarie o informazioni personali di molti tipi.

</UL>

Questi tipi di protezione vengono specificati da una "suite di crittografia", che è una combinazione di algoritmi di crittografia usati da una determinata connessione SSL. Durante il processo di negoziazione, i due endpoint devono accettare una suite di crittografia disponibile in entrambi gli ambienti. Se non esiste una suite di questo tipo in comune, non è possibile stabilire alcuna connessione SSL e non è possibile scambiare dati.

La suite di crittografia usata viene stabilita da un processo di negoziazione denominato "handshaking". L'obiettivo di questo processo è quello di creare o ricongiurre una "sessione", che può proteggere molte connessioni nel tempo. Al termine dell'handshaking, è possibile accedere agli attributi di sessione usando il #getSession() metodo .

La SSLSocket classe fornisce molte delle stesse funzionalità di sicurezza, ma tutti i dati in ingresso e in uscita vengono automaticamente trasportati usando l'oggetto sottostante java.net.Socket Socket, che in base alla progettazione usa un modello di blocco. Sebbene sia appropriato per molte applicazioni, questo modello non offre la scalabilità richiesta dai server di grandi dimensioni.

La distinzione primaria di un oggetto SSLEngine è che opera sui flussi di byte in ingresso e in uscita, indipendentemente dal meccanismo di trasporto. È responsabilità dell'utente SSLEngine disporre del trasporto di I/O affidabile al peer. Separando l'astrazione SSL/TLS dal meccanismo di trasporto di I/O, SSLEngine è possibile usare per un'ampia gamma di tipi di I/O, ad esempio java.net.Socket Socketjava.nio.channels.spi.AbstractSelectableChannel#configureBlocking(boolean) non-blocking I/O (polling)java.nio.channels.Selector selectable non-blocking I/O, e le tradizionali matrici Input/OutputStream, matrici locali java.nio.ByteBuffer ByteBuffers o byte, modelli di I/O asincroni futuri e così via.

A un livello generale, l'oggetto SSLEngine appare quindi:

app data

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

                              net data

I dati dell'applicazione (noti anche come testo non crittografato) sono dati generati o usati da un'applicazione. La controparte è i dati di rete, costituiti da dati handshaking e/o ciphertext (crittografati) e destinati a essere trasportati tramite un meccanismo di I/O. I dati in ingresso sono dati ricevuti dal peer e i dati in uscita vengono destinati al peer.

Nel contesto di un SSLEngineoggetto , il termine "handshake data" viene preso in modo che qualsiasi dato scambiato per stabilire e controllare una connessione sicura. I dati handshake includono i messaggi SSL/TLS "alert", "change_cipher_spec" e "handshake".

Esistono cinque fasi distinte in un SSLEngineoggetto .

<OL><li> Creation: è SSLEngine stato creato e inizializzato, ma non è ancora stato usato. Durante questa fase, un'applicazione può impostare tutte le SSLEngineimpostazioni specifiche (suite di crittografia abilitate, se l'handshake SSLEngine deve essere in modalità client o server e così via). Una volta avviata l'handshaking, tuttavia, tutte le nuove impostazioni (ad eccezione della modalità client/server, vedere di seguito) verranno usate per l'handshake successivo.

<li> Initial Handshake : l'handshake iniziale è una procedura in base alla quale i due peer scambiano parametri di comunicazione fino a quando non viene stabilita una sessione SSL. I dati dell'applicazione non possono essere inviati durante questa fase.

<li> Application Data : dopo aver stabilito i parametri di comunicazione e l'handshake è stato completato, i dati dell'applicazione possono scorrere attraverso .SSLEngine I messaggi dell'applicazione in uscita sono crittografati e protetti dall'integrità e i messaggi in ingresso invertono il processo.

<li> Rehandshaking: entrambi i lati possono richiedere una rinegoziazione della sessione in qualsiasi momento durante la fase dei dati dell'applicazione. I nuovi dati di handshaking possono essere intermixati tra i dati dell'applicazione. Prima di avviare la fase rehandshake, l'applicazione può reimpostare i parametri di comunicazione SSL/TLS, ad esempio l'elenco delle suite di crittografia abilitate e se usare l'autenticazione client, ma non può cambiare tra le modalità client/server. Come prima, una volta avviata l'handshaking, tutte le nuove SSLEngine impostazioni di configurazione non verranno usate fino alla prossima handshake.

<li> Closing: quando la connessione non è più necessaria, l'applicazione deve chiudere e deve inviare/ricevere eventuali messaggi rimanenti al peer prima di chiudere SSLEngine il meccanismo di trasporto sottostante. Una volta chiuso un motore, non è riutilizzabile: è necessario creare un nuovo SSLEngine motore. </OL> An SSLEngine viene creato chiamando SSLContext#createSSLEngine() da un oggetto inizializzato SSLContext. Tutti i parametri di configurazione devono essere impostati prima di effettuare la prima chiamata a wrap(), unwrap()o beginHandshake(). Questi metodi attivano tutti l'handshake iniziale.

I dati passano attraverso il motore chiamando o in #wrap(ByteBuffer, ByteBuffer) wrap() uscita o #unwrap(ByteBuffer, ByteBuffer) unwrap() in ingresso rispettivamente i dati in ingresso. A seconda dello stato di , una wrap() chiamata può utilizzare i dati dell'applicazione dal buffer di origine e può produrre dati di SSLEnginerete nel buffer di destinazione. I dati in uscita possono contenere dati dell'applicazione e/o handshake. Una chiamata a unwrap() esaminerà il buffer di origine e può avanzare l'handshake se i dati sono informazioni di handshaking o possono inserire i dati dell'applicazione nel buffer di destinazione se i dati sono applicazione. Lo stato dell'algoritmo SSL/TLS sottostante determina quando i dati vengono utilizzati e prodotti.

Chiama a wrap() e unwrap() restituisce un SSLEngineResult oggetto che indica lo stato dell'operazione e ,facoltativamente, come interagire con il motore per eseguire lo stato di avanzamento.

Produce SSLEngine /usa solo pacchetti SSL/TLS completi e non archivia i dati dell'applicazione internamente tra le chiamate a wrap()/unwrap(). Pertanto, l'input e l'output ByteBufferdevono essere ridimensionati in modo appropriato per contenere il record massimo che può essere prodotto. Le chiamate a SSLSession#getPacketBufferSize() e SSLSession#getApplicationBufferSize() devono essere usate per determinare le dimensioni del buffer appropriate. Le dimensioni del buffer di dati dell'applicazione in uscita in genere non sono importanti. Se le condizioni del buffer non consentono il consumo o la produzione dei dati appropriati, l'applicazione deve determinare (tramite SSLEngineResult) e correggere il problema e quindi riprovare la chiamata.

Ad esempio, unwrap() restituirà un SSLEngineResult.Status#BUFFER_OVERFLOW risultato se il motore determina che non è disponibile spazio buffer di destinazione sufficiente. Le applicazioni devono chiamare SSLSession#getApplicationBufferSize() e confrontare tale valore con lo spazio disponibile nel buffer di destinazione, ampliando il buffer se necessario. Analogamente, se unwrap() fosse necessario restituire un SSLEngineResult.Status#BUFFER_UNDERFLOWoggetto , l'applicazione deve chiamare SSLSession#getPacketBufferSize() per garantire che il buffer di origine disponga di una stanza sufficiente per contenere un record (in estensione se necessario) e quindi ottenere più dati in ingresso.

{@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.
              }
            }

A differenza SSLSocketdi , tutti i metodi di SSLEngine non bloccano. SSLEngine le implementazioni possono richiedere i risultati delle attività che possono richiedere un periodo di tempo prolungato per completare o anche bloccare. Ad esempio, un TrustManager potrebbe dover connettersi a un servizio di convalida del certificato remoto oppure un KeyManager potrebbe dover richiedere a un utente di determinare quale certificato usare come parte dell'autenticazione client. Inoltre, la creazione di firme crittografiche e la verifica che possano essere lente, apparentemente bloccanti.

Per qualsiasi operazione che può potenzialmente bloccare, verrà SSLEngine creata un'attività java.lang.Runnable delegata. Quando SSLEngineResult indica che è necessario un risultato dell'attività delegato, l'applicazione deve chiamare #getDelegatedTask() per ottenere un'attività delegata in sospeso e chiamare il java.lang.Runnable#run() run() relativo metodo (eventualmente usando un thread diverso a seconda della strategia di calcolo). L'applicazione deve continuare a ottenere attività delegate fino a quando non esiste più e riprovare l'operazione originale.

Alla fine di una sessione di comunicazione, le applicazioni devono chiudere correttamente il collegamento SSL/TLS. I protocolli SSL/TLS hanno messaggi handshake di chiusura e questi messaggi devono essere comunicati al peer prima di rilasciare e SSLEngine chiudere il meccanismo di trasporto sottostante. Una chiusura può essere avviata da uno di: sslException, un messaggio handshake di chiusura in ingresso o uno dei metodi di chiusura. In tutti i casi, i messaggi handshake di chiusura vengono generati dal motore e wrap() devono essere chiamati ripetutamente fino a quando lo SSLEngineResultstato risultante restituisce "CLOSED" o #isOutboundDone() restituisce true. Tutti i dati ottenuti dal wrap() metodo devono essere inviati al peer.

#closeOutbound() viene usato per segnalare al motore che l'applicazione non invia altri dati.

Un peer segnalerà la sua finalità di chiudere inviando il proprio messaggio di chiusura handshake. Dopo aver ricevuto e elaborato il messaggio dalla chiamata localeSSLEngineunwrap(), l'applicazione può rilevare la chiusura chiamando unwrap() e cercando uno SSLEngineResult stato "CLOSED" o se #isInboundDone() restituisce true. Se per qualche motivo il peer chiude il collegamento di comunicazione senza inviare il messaggio di chiusura SSL/TLS appropriato, l'applicazione può rilevare la fine del flusso e può segnalare il motore tramite #closeInbound() che non vi saranno più messaggi in ingresso per elaborare. Alcune applicazioni possono scegliere di richiedere l'arresto ordinato dei messaggi da un peer, nel qual caso possono verificare che la chiusura sia stata generata da un messaggio handshake e non da una condizione end-of-stream.

Esistono due gruppi di suite di crittografia che sarà necessario conoscere quando si gestiscono le suite di crittografia:

<Suite di crittografia UL><LI><em>supportate</em> : tutte le suite supportate dall'implementazione SSL. Questo elenco viene segnalato usando #getSupportedCipherSuites().

<Suite di crittografia LI><em>Enabled</em> , che possono essere inferiori al set completo di suite supportate. Questo gruppo viene impostato usando il #setEnabledCipherSuites(String []) metodo e sottoposto a query usando il #getEnabledCipherSuites() metodo . Inizialmente, un set predefinito di suite di crittografia verrà abilitato in un nuovo motore che rappresenta la configurazione minima consigliata. </UL>

Le impostazioni predefinite di implementazione richiedono che solo i gruppi di crittografia che autenticano i server e forniscono riservatezza siano abilitati per impostazione predefinita. Solo se entrambe le parti accettano esplicitamente le comunicazioni non autenticate e/o non private (non crittografate) verranno selezionate una suite di crittografia.

Ogni connessione SSL/TLS deve avere un client e un server, pertanto ogni endpoint deve decidere quale ruolo assumere. Questa scelta determina chi inizia il processo di handshaking e il tipo di messaggi da inviare da ogni parte. Il metodo #setUseClientMode(boolean) configura la modalità. Dopo l'avvio dell'handshaking iniziale, SSLEngine non è possibile passare tra le modalità client e server, anche quando si eseguono rinegoziazioni.

Le applicazioni possono scegliere di elaborare attività delegate in thread diversi. Quando viene creato un SSLEngine oggetto, l'oggetto corrente java.security.AccessControlContext viene salvato. Tutte le attività delegate future verranno elaborate usando questo contesto: ovvero tutte le decisioni di controllo di accesso verranno prese usando il contesto acquisito alla creazione del motore.

<HR>

<Note sulla concorrenza< B/B>>: esistono due problemi di concorrenza da tenere presente:

<OL><li>I wrap() metodi e unwrap() possono essere eseguiti simultaneamente tra loro.

<li> I protocolli SSL/TLS usano pacchetti ordinati. Le applicazioni devono prestare attenzione a garantire che i pacchetti generati vengano recapitati in sequenza. Se i pacchetti arrivano fuori ordine, possono verificarsi risultati imprevisti o irreversibili.

Ad esempio:

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

Come corollario, due thread non devono tentare di chiamare lo stesso metodo ( wrap() o unwrap()) simultaneamente, perché non esiste alcun modo per garantire l'ordinamento finale dei pacchetti. </OL>

<configurazione predefinita h3 per versioni< android diverse/h3>>

SSLEngine le istanze ottenute dal valore predefinito SSLContext sono configurate come segue:

<style type="text/css"> tr.deprecato { background-color: #ccc; colore: #999; tipo di carattere: corsivo; }</Stile>

<tabella<h4 Protocols</h4<>>thead tr th Protocol</>><th th Supportato (livelli API)/th Abilitato per impostazione predefinita (livelli API)><<<><>/th>/tr></thead<>tbody<>tr<>class="deprecato"<>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+</tdd>><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 Pacchetti di crittografia/h4>><tabella><tr th th>Cipher suite>><</th Supportato (livelli API)/th Abilitato per impostazione predefinita (livelli API)<<>></th></tr<<>>/tr/thead><tbody tr class="deprecato"><td>SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA</><td td>9-22><<>/td 9-19</td<<><>>/trd><<tr class="deprecato"><>td SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA<><>/td td 9-22/td td 9-19<<<>>/td/tr class="trecated"td SSL_DHE_DSS_WITH_DES_CBC_SHA/td 9-22<><>/td td 9-19</td></tr><class="deprecato<<>>><>>><"td SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA<<>>><></td 9-22</><td td9-19/td>><</tr class="deprecato"<>td>SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA/td 9-22/>><td td 9-19/td/tr class="deprecato"td>SSL_DHE_RSA_WITH_DES_CBC_SHA><<<>/>><td td 9-22>><>><<<<</td 9-19</td<<>>/tr class="deprecato"<><><>>td SSL_DH_anon_EXPORT_WITH_DES40_CBC_SHA</>><td td 9-22/td td/td/tr class="deprecato"<>td<><>> SSL_DH_anon_EXPORT_WITH_RC4_40_MD5/td td 9-22><<<><<<><><<>>>/td td/td/tr<>class="deprecato">>><<><td SSL_DH_anon_WITH_3DES_EDE_CBC_SHA/td 9-22</Td><><<><>td/td/tr class="deprecato"td SSL_DH_anon_WITH_DES_CBC_SHA/td 9-22<<><><><>/td td/td/tr class="deprecato"<>>td>SSL_DH_anon_WITH_RC4_128_MD5<>>><<></td td 9-22<><><>><</td td/td/tr class="deprecato>><><"td SSL_RSA_EXPORT_ WITH_DES40_CBC_SHA/td td>9-22/td td 9-19><<></td/tr class="trecated><><>><"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 9-19><<<><</Td></tr class="deprecato"><td>SSL_RSA_WITH_DES_CBC_SHA/td 9-22/<>>td 9-19><<></td/tr class="deprecato"td>SSL_RSA_WITH_NULL_MD5<>></td td 9-22>><<<<></td td/td/tr><class="deprecato<<><>>"td SSL_RSA_WITH_NULL_SHA><<>/>td><<>td 9-22><<>><<<>/td td/td/tr class="deprecato"<>td>SSL_RSA_WITH_RC4_128_MD5<><>/td td 9-25/td td 9-19<></td/tr><class="deprecato><"td>SSL_RSA_WITH_RC4_128_SHA<>></td 9-25>><<><></td td 9-23><</td/trd><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><><>td TLS_CHACHA20_POLY1305_SHA256<><><<<>>/td td 29+/td 29+/>td</Tr><tr class="deprecato">td>TLS_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA/td td 1-8>><</td 1-8/td/tr class="deprecato"td TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA><<>/td td><>>< 1-8</td<>>1-8><<><><</td/tr<>class="deprecato>><<>"td TLS_DHE_DSS_WITH_AES_128_< CBC_SHA/td td>9-22/td td 9-22/<<>>td/tr class="trecated"td TLS_DHE_DSS_WITH_AES_128_CBC_SHA256/td td 20-22>><<</td td/tr class="deprecato<>><<><><>>><>"td TLS_DHE_DSS_WITH_AES_128_GCM_SHA256/td 20-22>><><<<><<></td<><></Td></tr class="deprecato"><td>TLS_DHE_DSS_WITH_AES_256_CBC_SHA/td td 9-22>><</td 20-22</<<>>td/tr class="deprecato"td>TLS_DHE_DSS_WITH_AES_256_CBC_SHA256<<><>/><>td td 20-22>><<><</td td/td/tr<>class="deprecato><<>>"td TLS_DHE_DSS_WITH_><<AES_256_GCM_SHA384/><>td td 20-22<<<><><>>/td/td/tr class="deprecato"<>>td TLS_DHE_DSS_WITH_DES_CBC_SHA/td td 1-8/td 1-8/td/tr<>class="deprecato>><<>><"td TLS_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA<<>>/td 1-8<<><<<>><>/td>1-8/td>><</tr class="deprecato"td>TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA/td 1-8/td td 1-8<<><></td/tr class="deprecato"<>td>TLS_DHE_RSA_WITH_AES_128_CBC_SHA<<><>/<>>td 9-25/td 9-25><><</><<>td><<>/tr tr class="deprecato">< td TLS_DHE_RSA_WITH_AES_128_CBC_SHA256/<>>td td 20-25/td td/td/tr class="deprecato"<>td><>>< TLS_DHE_RSA_WITH_AES_128_GCM_SHA256</td td 20-25><><<<>></td 20-25<><></td></tr<>class="deprecato<><>"td TLS_DHE_RSA_WITH_AES_256_CBC_SHA/>td ><><>td 9-25/td td 20-25>><><<<<>/td/tr tr class="deprecato">><td TLS_DHE_RSA_WITH_AES_256_CBC_SHA256/td td 20-25<><><<>/td td td/td/tr><class="deprecato"><td<<>>> TLS_DHE_RSA_WITH_AES_256_GCM_SHA384><<>/td td 20-25><<>/td 20-25</td/tr class="deprecato"><td>TLS_DHE_RSA_WITH_DES_CBC_SHA/td 1-8/td 1-8<<<<>>>></td/tr class="deprecato>>><><<<>>"td TLS_DH_DSS_EXPORT_WITH_DES40_CBC_SHA><></td td 1-8>><><<</td td/td/tr<>class="td"td TLS_DH_DSS_><>< WITH_3DES_EDE_CBC_SHA/td td>1-8/td td/td/tr class="deprecato"><>td TLS_DH_DSS_WITH_DES_CBC_SHA><<>/td td 1-8<>><><<<>/td td/td/tr<>class="deprecato><"td>TLS_DH_RSA_EXPORT_WITH_DES40_CBC_SHA>><</td 1-8><><<<<><>></td td/td<></tr class="deprecato"<>td>TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA/td td 1-8/td td td/td/tr class="deprecato"td TLS_DH_RSA_WITH_DES_CBC_SHA><<>/td td 1-8><><>><<><><<<<>/td td/td/tr><class="deprecato<>><><>><>"td TLS_DH_anon_EXPORT_WITH_><>< DES40_CBC_SHA/td td 1-8/td td/td/tr class="deprecato">><td TLS_DH_anon_WITH_3DES_EDE_CBC_SHA<><>/td 1-8<><<>>><<<><>><<></td td/td/tr class="deprecato<<>><>>"td TLS_DH_anon_WITH_AES_128_CBC_SHA/td td 9-22><<>></td td/td<><></Tr><tr class="deprecato">td>TLS_DH_anon_WITH_AES_128_CBC_SHA256/td td 20-22</>><<><><td td/td/tr class="deprecato"td>TLS_DH_anon_WITH_AES_128_GCM_SHA256><></td 20-22<><><></td td/td/tr<>class="trecated<>>><<"td TLS_DH_anon_WITH_AES_256_CBC_SHA/<><>< td td>9-22/td td/td/tr class="deprecato"<<>><>>td TLS_DH_anon_WITH_AES_256_CBC_SHA256/td td 20-22<>>><<><</td td/td/tr class="deprecato<>"td>><<> TLS_DH_anon_WITH_AES_256_GCM_SHA384/td td 20-22><>><><<><<<<><>/td td/td/trd/tr><><tr class="deprecato"><td>TLS_DH_anon_WITH_DES_CBC_SHA<>></td td 1-8<<><><><>/td td/td/tr class<="trecated<>>>><<"td TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA/td 20-22><<<<>>/td td/td/tr>><><td TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA/tdtd 20+</><>td td 20+<><<>/td/tr class="deprecato"<>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 20+</td td 20<<>+/><>td/><>><tr<>>td TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA</<>>td td 20+/td td 20+>><<</><<>td/tr class="trecated>><>><<"td TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384/td td 20-28<<><<>>/td td/td/tr td/tr>><<>td TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384/< td td 20+</>><td td 20+<>><</td/tr><>tr td TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256/td td 24+/td td 24<<>>+</td><></tr class="deprecato"><td>TLS_ECDHE_ECDSA_WITH_NULL_SHA<<<>>/><td 20-22</>><<td td td/>><> td/tr tr class="deprecato"><>td TLS_ECDHE_ECDSA_WITH_RC4_128_SHA<<>>/td 20-25<>></td 20-23</td/tr td TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA/td td 21+/td td 21+<<>></><td/td><><>>><><</tr tr><>><><<Td><TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA/<>>td td 21+<<>>/td td 21+><</td/tr><tr>><td TLS_ECDHE_PSK_WITH_CHACHA20_POLY1305_SHA256/><>td td 24+/td td 24><><+<><></td/tr class="deprecato"><td>TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA<</tdtd 20-22</><td td<><>/td/tr><tr><>td TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA/td td 20+/td td 20+</td>><</tr class="deprecato"><td>TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256<><></>><td 20-28<>><<></td td td ><>></Td><><><>/tr td TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256/td td 20+/td td 20<><<>+/<>><td/tr>><tr td TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA><<>/td td 20+/><>td 20+<<></td/tr><class="deprecato"><>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 class="deprecato"<>td>TLS_ECDHE_RSA_WITH_NULL_SHA<>></td td 20-22</><td td<>><></td/tr class="deprecato<>"td>TLS_ECDHE_RSA_WITH_RC4_128_SHA</>><td td 20-25><<>/td 20-23</td/tr class="deprecato"td>TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA/td 20-22<<><>><<>/td td/td/tr class="deprecato><"<>td>><>< TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA><<>/td 20-22</td><>< td/td></tr tr<>class="><>< deprecato">td>TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256<>></td td 20-22/td td/td/tr class="trecated"td TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256/td td 20-22<>><<<<<>>/>><<<>td/td/tr><class="deprecato<>><>><<>>"td TLS_ECDH_< ECDSA_WITH_AES_256_CBC_SHA/td td 20-22/<><<>>><td/td/tr class="deprecato">><td TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384/td 20-22>><<><<</td td/td/tr><class="deprecato"><><td TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384><<>/>td<><><>td 20-22/td td/>><<td/tr class="deprecato"><td>TLS_ECDH_ECDSA_WITH_NULL_SHA<<>>/td td 20-22><<<<><<>><>></td td/td/tr class="deprecato<>"td>TLS_ECDH_ECDSA_WITH_RC4_128_SHA<><>/td td 20-22<><></td td/td/tr class="deprecato"><td>TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA/td 20-22</<>><<><>td td/td/tr class="deprecato"td<>><> TLS_ECDH_RSA_WITH_AES_128_CBC_SHA>><</td td 20-22</td<<><>> td/tr<>class="deprecato"><><>< td TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256</><>td td 20-22/td td/td/tr class="deprecato"td><>>< TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256/td td 20-22>>><>><<<<><><<</td td/td/tr<>class="deprecato><>"<>td TLS_ECDH_RSA_WITH_AES_256_><><CBC_SHA/><td td>20-22/<<>><>><td/td/tr class="trecated"td TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384/td td 20-22>><><<<</td td/tr><class="deprecato>>><<><"<>>td TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384<><>/td 20-22</Td><><>><<td/td/tr class="deprecato"td TLS_ECDH_RSA_WITH_NULL_SHA/td 20-22/td td/td/tr class="deprecato"><>td<>><> TLS_ECDH_RSA_WITH_RC4_128_SHA<<>>/td td 20-22><>><<>><><><<<</td td/tr><class="deprecato"><><>td TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA</><>td td 20-22/td td/td/tr class="deprecato"<>td><><> TLS_ECDH_anon_WITH_AES_128_CBC_SHA/td td 20-22>>><<><<><><<<></td td/td/tr><class="deprecato><>"td TLS_ECDH_anon_WITH_AES_256_ <CBC_SHA/<>>td td 20-22/td td/tr class="td/tr class="td TLS_ECDH_anon_WITH_NULL_SHA/td td 20-22><<>><<><<>>><<</td td/td/tr<>class="deprecato">><><<<><>>td TLS_ECDH_anon_WITH_RC4_128_SHA<><>/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 td 21+<><<>></td td/td/tr<>class="deprecato"><tdTLS_NULL_WITH_NULL_NULL/td td>1-8<><<><<>>/td td/td/tr class="deprecato"<>>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 21+</td ><><td 21<+/td<><>/tr><>td TLS_PSK_WITH_AES_256_CBC_SHA/td td 21+<<>>/td 21+<>><</td/tr tr class="deprecato"<>td<<>>> TLS_PSK_WITH_RC4_128_SHA>><</td td 21-25</td<>><<> td/tr tr><><> class="deprecato">td>TLS_RSA_EXPORT_WITH_DES40_CBC_SHA/td td 1-8<<>>/td 1-8/td/tr class="deprecato<>"td TLS_RSA_WITH_3DES_EDE_CBC_SHA<>></td td><<>> 1-8</td><td td>1-8><><<<<>/td/tr>><<>td TLS_RSA_WITH_AES_<<128_CBC_SHA/<>>td td 9+<>></td td 9+<<><>/td/tr tr class="><<>>><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 20+</>td<>td 20+</td<<>>/tr<>>td TLS_RSA_WITH_AES_256_CBC_SHA/td td 9><<>+/td 20+<><<>/td/tr tr class="deprecato"><td TLS_RSA_WITH_AES_256_CBC_SHA256<<>>/td td>><>< 20-28</td<><<>> td/tr tr><td TLS_RSA_WITH_AES_256_GCM_SHA384/<>>td td 20+<<>>/td td 20+<<><>/td/tr class="deprecato"<>td><<>> TLS_RSA_WITH_DES_CBC_SHA</td td 1-8/td td 1-8<><></><td/tr><class="deprecato><>"td TLS_RSA_WITH_NULL_MD5 ><></Td><>td 1-8/td td/td/tr class="deprecato"><td>TLS_RSA_WITH_NULL_SHA<<>>/td td 1-8><<>><<><>><><><<</td td/td/tr class="deprecato<>"td>TLS_RSA_WITH_NULL_SHA256><></td td 20-22><><><</td td td/tr></tbody></tavolo>

<em>NOTE</em>: i pacchetti di crittografia PSK sono abilitati per impostazione predefinita solo se SSLContext il motore è stato creato con un PSKKeyManageroggetto .

Aggiunto nella versione 1.5.

Documentazione Java per javax.net.ssl.SSLEngine.

Le parti di questa pagina sono modifiche in base al lavoro creato e condiviso dal Android Open Source e usato in base ai termini descritti nella .

Costruttori

SSLEngine()

Costruttore per un SSLEngine oggetto senza hint per una strategia di riutilizzo della sessione interna.

SSLEngine(IntPtr, JniHandleOwnership)

Costruttore usato durante la creazione di rappresentazioni gestite di oggetti JNI; chiamato dal runtime.

SSLEngine(String, Int32)

Costruttore per un SSLEngineoggetto .

Proprietà

ApplicationProtocol

Restituisce il valore del protocollo applicazione più recente negoziato per questa connessione.

Class

Restituisce la classe di runtime di questo Objectoggetto .

(Ereditato da Object)
DelegatedTask

Restituisce un'attività delegato per questa istanza del motore.

EnableSessionCreation

Restituisce se le nuove sessioni SSL possono essere stabilite dal motore.

Handle

Handle all'istanza di Android sottostante.

(Ereditato da Object)
HandshakeApplicationProtocol

Restituisce il valore del protocollo dell'applicazione negoziato in un handshake SSL/TLS attualmente in corso.

HandshakeApplicationProtocolSelector

Recupera la funzione di callback che seleziona un valore del protocollo applicazione durante un handshake SSL/TLS. -or- Registra una funzione di callback che seleziona un valore del protocollo applicazione per un handshake SSL/TLS.

HandshakeSession

Restituisce l'oggetto SSLSession costruito durante un handshake SSL/TLS.

HandshakeStatus

Restituisce lo stato dell'handshake di questa istanza del motore.

IsInboundDone

Restituisce se non verranno accettati più dati in ingresso da questo motore.

IsOutboundDone

Restituisce se non verranno generati più dati in uscita da questo motore.

JniIdentityHashCode

Classe che consente comunicazioni sicure usando protocolli come secure Sockets Layer (SSL) o IETF RFC 2246 "Transport Layer Security" (TLS), ma è indipendente dal trasporto.

(Ereditato da Object)
JniPeerMembers

Classe che consente comunicazioni sicure usando protocolli come secure Sockets Layer (SSL) o IETF RFC 2246 "Transport Layer Security" (TLS), ma è indipendente dal trasporto.

NeedClientAuth

Restituisce se questa istanza del motore richiederà l'autenticazione client.

PeerHost

Restituisce il nome host del peer.

PeerPort

Restituisce il numero di porta del peer.

PeerReference

Classe che consente comunicazioni sicure usando protocolli come secure Sockets Layer (SSL) o IETF RFC 2246 "Transport Layer Security" (TLS), ma è indipendente dal trasporto.

(Ereditato da Object)
Session

Restituisce la sessione SSL per questa istanza del motore.

SSLParameters

Restituisce gli SSLParameter in effetti per questo SSLEngine. -o- Applica SSLParameters a questo motore.

ThresholdClass

Questa API supporta l'infrastruttura Mono per Android e non deve essere usata direttamente dal codice.

ThresholdType

Questa API supporta l'infrastruttura Mono per Android e non deve essere usata direttamente dal codice.

UseClientMode

Restituisce se questo motore è impostato su come agire in modalità client durante l'handshaking.

WantClientAuth

Restituisce se questo motore richiederà l'autenticazione client.

Metodi

BeginHandshake()

Avvia l'handshaking (iniziali o rinegoziazione) in questo SSLEngine.

Clone()

Crea e restituisce una copia di questo oggetto.

(Ereditato da Object)
CloseInbound()

Segnali che non verranno inviati più dati di rete in ingresso a questo SSLEngineoggetto .

CloseOutbound()

Segnali che non verranno inviati più dati dell'applicazione in uscita in questo SSLEngineoggetto .

Dispose()

Classe che consente comunicazioni sicure usando protocolli come secure Sockets Layer (SSL) o IETF RFC 2246 "Transport Layer Security" (TLS), ma è indipendente dal trasporto.

(Ereditato da Object)
Dispose(Boolean)

Classe che consente comunicazioni sicure usando protocolli come secure Sockets Layer (SSL) o IETF RFC 2246 "Transport Layer Security" (TLS), ma è indipendente dal trasporto.

(Ereditato da Object)
Equals(Object)

Indica se un altro oggetto è "uguale a" questo.

(Ereditato da Object)
GetEnabledCipherSuites()

Restituisce i nomi delle suite di crittografia SSL attualmente abilitate per l'uso in questo motore.

GetEnabledProtocols()

Restituisce i nomi delle versioni del protocollo attualmente abilitate per l'uso con questo SSLEngineoggetto .

GetHashCode()

Restituisce un valore del codice hash per l'oggetto.

(Ereditato da Object)
GetSupportedCipherSuites()

Restituisce i nomi delle suite di crittografia che possono essere abilitate per l'uso in questo motore.

GetSupportedProtocols()

Restituisce i nomi dei protocolli che possono essere abilitati per l'uso con questo SSLEngineoggetto .

JavaFinalize()

Chiamato dal Garbage Collector in un oggetto quando Garbage Collection determina che non sono presenti più riferimenti all'oggetto.

(Ereditato da Object)
Notify()

Riattiva un singolo thread in attesa del monitoraggio dell'oggetto.

(Ereditato da Object)
NotifyAll()

Riattiva tutti i thread in attesa del monitoraggio dell'oggetto.

(Ereditato da Object)
SetEnabledCipherSuites(String[])

Imposta le suite di crittografia abilitate per l'uso in questo motore.

SetEnabledProtocols(String[])

Impostare le versioni del protocollo abilitate per l'uso in questo motore.

SetHandle(IntPtr, JniHandleOwnership)

Imposta la proprietà Handle.

(Ereditato da Object)
ToArray<T>()

Classe che consente comunicazioni sicure usando protocolli come secure Sockets Layer (SSL) o IETF RFC 2246 "Transport Layer Security" (TLS), ma è indipendente dal trasporto.

(Ereditato da Object)
ToString()

Restituisce una rappresentazione in formato stringa dell'oggetto.

(Ereditato da Object)
UnregisterFromRuntime()

Classe che consente comunicazioni sicure usando protocolli come secure Sockets Layer (SSL) o IETF RFC 2246 "Transport Layer Security" (TLS), ma è indipendente dal trasporto.

(Ereditato da Object)
Unwrap(ByteBuffer, ByteBuffer)

Tenta di decodificare i dati di rete SSL/TLS in un buffer di dati dell'applicazione di testo non crittografato.

Unwrap(ByteBuffer, ByteBuffer[])

Tenta di decodificare i dati di rete SSL/TLS in una sequenza di buffer di dati dell'applicazione di testo non crittografato.

Unwrap(ByteBuffer, ByteBuffer[], Int32, Int32)

Tenta di decodificare i dati di rete SSL/TLS in una sottosequenza di buffer di dati dell'applicazione di testo non crittografato.

Wait()

Causa l'attesa del thread corrente fino a quando non viene svegliata, in genere eseguendo>una notifica</em o <em interrotto</>em>>.<

(Ereditato da Object)
Wait(Int64)

Causa l'attesa del thread corrente fino a quando non viene svegliata, in genere <>eseguendo una notifica</em o <em interrotto/>>em>o fino a quando non è trascorsa< una determinata quantità di tempo reale.

(Ereditato da Object)
Wait(Int64, Int32)

Causa l'attesa del thread corrente fino a quando non viene svegliata, in genere <>eseguendo una notifica</em o <em interrotto/>>em>o fino a quando non è trascorsa< una determinata quantità di tempo reale.

(Ereditato da Object)
Wrap(ByteBuffer, ByteBuffer)

Tenta di codificare un buffer di dati dell'applicazione di testo non crittografato nei dati di rete SSL/TLS.

Wrap(ByteBuffer[], ByteBuffer)

Tenta di codificare byte di testo non crittografato da una sequenza di buffer di dati nei dati di rete SSL/TLS.

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

Tenta di codificare byte di testo non crittografato da una sottosequenza dei buffer di dati nei dati di rete SSL/TLS.

Implementazioni dell'interfaccia esplicita

IJavaPeerable.Disposed()

Classe che consente comunicazioni sicure usando protocolli come secure Sockets Layer (SSL) o IETF RFC 2246 "Transport Layer Security" (TLS), ma è indipendente dal trasporto.

(Ereditato da Object)
IJavaPeerable.DisposeUnlessReferenced()

Classe che consente comunicazioni sicure usando protocolli come secure Sockets Layer (SSL) o IETF RFC 2246 "Transport Layer Security" (TLS), ma è indipendente dal trasporto.

(Ereditato da Object)
IJavaPeerable.Finalized()

Classe che consente comunicazioni sicure usando protocolli come secure Sockets Layer (SSL) o IETF RFC 2246 "Transport Layer Security" (TLS), ma è indipendente dal trasporto.

(Ereditato da Object)
IJavaPeerable.JniManagedPeerState

Classe che consente comunicazioni sicure usando protocolli come secure Sockets Layer (SSL) o IETF RFC 2246 "Transport Layer Security" (TLS), ma è indipendente dal trasporto.

(Ereditato da Object)
IJavaPeerable.SetJniIdentityHashCode(Int32)

Classe che consente comunicazioni sicure usando protocolli come secure Sockets Layer (SSL) o IETF RFC 2246 "Transport Layer Security" (TLS), ma è indipendente dal trasporto.

(Ereditato da Object)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

Classe che consente comunicazioni sicure usando protocolli come secure Sockets Layer (SSL) o IETF RFC 2246 "Transport Layer Security" (TLS), ma è indipendente dal trasporto.

(Ereditato da Object)
IJavaPeerable.SetPeerReference(JniObjectReference)

Classe che consente comunicazioni sicure usando protocolli come secure Sockets Layer (SSL) o IETF RFC 2246 "Transport Layer Security" (TLS), ma è indipendente dal trasporto.

(Ereditato da Object)

Metodi di estensione

JavaCast<TResult>(IJavaObject)

Esegue una conversione dei tipi controllati dal runtime Android.

JavaCast<TResult>(IJavaObject)

Classe che consente comunicazioni sicure usando protocolli come secure Sockets Layer (SSL) o IETF RFC 2246 "Transport Layer Security" (TLS), ma è indipendente dal trasporto.

GetJniTypeName(IJavaPeerable)

Classe che consente comunicazioni sicure usando protocolli come secure Sockets Layer (SSL) o IETF RFC 2246 "Transport Layer Security" (TLS), ma è indipendente dal trasporto.

Si applica a