SSLEngine Classe
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
Classe qui permet des communications sécurisées à l’aide de protocoles tels que les protocoles SSL (Secure Sockets Layer) ou IETF RFC 2246 « Transport Layer Security » (TLS), mais qui sont indépendants du transport.
[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
- Héritage
- Attributs
Remarques
Classe qui permet des communications sécurisées à l’aide de protocoles tels que les protocoles SSL (Secure Sockets Layer) ou IETF RFC 2246 « Transport Layer Security » (TLS), mais qui sont indépendants du transport.
Les modes de communication sécurisés sont les suivants : <UL>
<Li><em>Integrity Protection</em>. SSL/TLS protège contre la modification des messages par un wiretapper actif.
<Authentification< LI><em>/em>. Dans la plupart des modes, SSL/TLS fournit une authentification homologue. Les serveurs sont généralement authentifiés et les clients peuvent être authentifiés comme demandé par les serveurs.
<Li><em>Privacyy (Protection de la confidentialité)</em>. Dans la plupart des modes, SSL/TLS chiffre les données envoyées entre le client et le serveur. Cela protège la confidentialité des données, de sorte que les wiretappers passifs ne voient pas les données sensibles telles que les informations financières ou les informations personnelles de nombreux types.
</UL>
Ces types de protection sont spécifiés par une « suite de chiffrement », qui est une combinaison d’algorithmes de chiffrement utilisés par une connexion SSL donnée. Pendant le processus de négociation, les deux points de terminaison doivent s’entendre sur une suite de chiffrement disponible dans les deux environnements. S’il n’existe aucune suite de ce type en commun, aucune connexion SSL ne peut être établie et aucune donnée ne peut être échangée.
La suite de chiffrement utilisée est établie par un processus de négociation appelé « négociation ». L’objectif de ce processus est de créer ou de rejoindre une « session », qui peut protéger de nombreuses connexions au fil du temps. Une fois la négociation terminée, vous pouvez accéder aux attributs de session à l’aide de la #getSession()
méthode.
La SSLSocket
classe fournit une grande partie des mêmes fonctionnalités de sécurité, mais toutes les données entrantes et sortantes sont automatiquement transportées à l’aide du sous-jacent java.net.Socket Socket
, qui, par conception, utilise un modèle bloquant. Bien que cela soit approprié pour de nombreuses applications, ce modèle ne fournit pas la scalabilité requise par les serveurs volumineux.
La principale distinction est qu’elle SSLEngine
opère sur les flux d’octets entrants et sortants, indépendamment du mécanisme de transport. Il incombe à l’utilisateur SSLEngine
d’organiser un transport d’E/S fiable vers l’homologue. En séparant l’abstraction SSL/TLS du mécanisme de transport d’E/S, vous SSLEngine
pouvez l’utiliser pour un large éventail de types d’E/S, tels que 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
et les tableaux d’entrée/sortie traditionnels, les tableaux locaux java.nio.ByteBuffer ByteBuffers
ou d’octets, les futurs modèles d’E/S asynchrones, etc.
À un niveau élevé, il SSLEngine
apparaît ainsi :
app data
| ^
| | |
v | |
+----+-----|-----+----+
| | |
| SSL|Engine |
wrap() | | | unwrap()
| OUTBOUND | INBOUND |
| | |
+----+-----|-----+----+
| | ^
| | |
v |
net data
Les données d’application (également appelées texte clair ou clair) sont des données produites ou consommées par une application. Son équivalent est des données réseau, qui se composent de données de négociation et/ou de texte chiffré (chiffré) et destinées à être transportées via un mécanisme d’E/S. Les données entrantes sont des données qui ont été reçues de l’homologue, et les données sortantes sont destinées à l’homologue.
(Dans le contexte d’un SSLEngine
, le terme « données de négociation » est pris pour désigner toutes les données échangées pour établir et contrôler une connexion sécurisée. Les données de négociation incluent les messages SSL/TLS « alerte », « change_cipher_spec » et « négociation ».
Il existe cinq phases distinctes à un SSLEngine
.
<Ol><li Creation : le SSLEngine
fichier> a été créé et initialisé, mais n’a pas encore été utilisé. Pendant cette phase, une application peut définir n’importe quel SSLEngine
paramètre spécifique (suites de chiffrement activées, que la SSLEngine
négociation doit être en mode client ou serveur, etc.). Une fois la négociation commencée, cependant, les nouveaux paramètres (à l’exception du mode client/serveur, voir ci-dessous) seront utilisés pour la négociation suivante.
<li> Initial Handshake : la négociation initiale est une procédure par laquelle les deux homologues échangent des paramètres de communication jusqu’à ce qu’une session SSL Soit établie. Les données d’application ne peuvent pas être envoyées pendant cette phase.
<li> Application Data : une fois les paramètres de communication établis et la négociation terminée, les données de l’application peuvent transiter par le SSLEngine
. Les messages d’application sortant sont chiffrés et protégés par l’intégrité, et les messages entrants inversent le processus.
<li> Rehandshaking : l’un ou l’autre côté peut demander une renégociation de la session à tout moment pendant la phase Données d’application. Les nouvelles données de négociation peuvent être mélangées entre les données de l’application. Avant de commencer la phase de rehandshake, l’application peut réinitialiser les paramètres de communication SSL/TLS, tels que la liste des suites de chiffrement activées et l’utilisation de l’authentification du client, mais ne peut pas changer entre les modes client/serveur. Comme précédemment, une fois la négociation commencée, tous les nouveaux SSLEngine
paramètres de configuration ne seront pas utilisés tant que la négociation suivante n’est pas utilisée.
<li> Fermeture : lorsque la connexion n’est plus nécessaire, l’application doit fermer l’application SSLEngine
et doit envoyer/recevoir les messages restants à l’homologue avant de fermer le mécanisme de transport sous-jacent. Une fois qu’un moteur est fermé, il n’est pas réutilisable : un nouveau SSLEngine
doit être créé. </OL> An SSLEngine
est créé en appelant SSLContext#createSSLEngine()
à partir d’un initialisé SSLContext
. Tous les paramètres de configuration doivent être définis avant d’effectuer le premier appel à wrap()
, unwrap()
ou beginHandshake()
. Ces méthodes déclenchent toutes la négociation initiale.
Les données transitent par le moteur en appelant #wrap(ByteBuffer, ByteBuffer) wrap()
ou #unwrap(ByteBuffer, ByteBuffer) unwrap()
sur des données sortantes ou entrantes, respectivement. Selon l’état du , un wrap()
appel peut consommer des données d’application SSLEngine
à partir de la mémoire tampon source et produire des données réseau dans la mémoire tampon de destination. Les données sortantes peuvent contenir des données d’application et/ou de négociation. Un appel à unwrap()
examiner la mémoire tampon source et peut avancer la négociation si les données sont des informations de négociation, ou placer les données d’application dans la mémoire tampon de destination si les données sont l’application. L’état de l’algorithme SSL/TLS sous-jacent détermine quand les données sont consommées et produites.
Appelle et wrap()
unwrap()
retourne un SSLEngineResult
élément qui indique l’état de l’opération, et (éventuellement) comment interagir avec le moteur pour progresser.
Le SSLEngine
produit/consomme uniquement des paquets SSL/TLS complets et ne stocke pas les données d’application en interne entre les appels à wrap()/unwrap()
. Ainsi, les entrées et sorties ByteBuffer
doivent être dimensionnées de manière appropriée pour contenir l’enregistrement maximal qui peut être produit. Les appels vers SSLSession#getPacketBufferSize()
et SSLSession#getApplicationBufferSize()
doivent être utilisés pour déterminer les tailles de mémoire tampon appropriées. La taille de la mémoire tampon de données d’application sortante n’a généralement pas d’importance. Si les conditions de mémoire tampon n’autorisent pas la consommation/production appropriée des données, l’application doit déterminer (via SSLEngineResult
) et corriger le problème, puis réessayer l’appel.
Par exemple, unwrap()
retourne un SSLEngineResult.Status#BUFFER_OVERFLOW
résultat si le moteur détermine qu’il n’y a pas suffisamment d’espace tampon de destination disponible. Les applications doivent appeler SSLSession#getApplicationBufferSize()
et comparer cette valeur à l’espace disponible dans la mémoire tampon de destination, en agrandissant la mémoire tampon si nécessaire. De même, s’il unwrap()
s’agissait de retourner un SSLEngineResult.Status#BUFFER_UNDERFLOW
, l’application doit appeler SSLSession#getPacketBufferSize()
pour s’assurer que la mémoire tampon source a suffisamment de place pour contenir un enregistrement (en agrandissant si nécessaire), puis obtenir plus de données entrantes.
{@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.
}
}
Contrairement SSLSocket
à , toutes les méthodes de SSLEngine ne sont pas bloquantes. SSLEngine
les implémentations peuvent nécessiter les résultats des tâches qui peuvent prendre une période prolongée pour se terminer, ou même bloquer. Par exemple, un TrustManager peut avoir besoin de se connecter à un service de validation de certificat distant, ou un KeyManager peut avoir besoin d’inviter un utilisateur à déterminer quel certificat utiliser dans le cadre de l’authentification du client. En outre, la création de signatures de chiffrement et leur vérification peut être lente, apparemment bloquante.
Pour toute opération qui peut potentiellement bloquer, la SSLEngine
tâche est créée java.lang.Runnable
. Lorsque SSLEngineResult
cela indique qu’un résultat de tâche délégué est nécessaire, l’application doit appeler #getDelegatedTask()
pour obtenir une tâche déléguée en attente et appeler sa java.lang.Runnable#run() run()
méthode (éventuellement à l’aide d’un thread différent en fonction de la stratégie de calcul). L’application doit continuer à obtenir des tâches déléguées jusqu’à ce qu’il n’existe plus, puis réessayer l’opération d’origine.
À la fin d’une session de communication, les applications doivent fermer correctement le lien SSL/TLS. Les protocoles SSL/TLS ont des messages de négociation de fermeture, et ces messages doivent être communiqués à l’homologue avant de libérer et SSLEngine
de fermer le mécanisme de transport sous-jacent. Une fermeture peut être lancée par l’un des suivants : une exception SSLException, un message d’établissement de liaison de fermeture entrant ou l’une des méthodes de fermeture. Dans tous les cas, les messages de négociation de fermeture sont générés par le moteur et wrap()
doivent être appelés à plusieurs reprises jusqu’à ce que l’état du résultat SSLEngineResult
retourne « CLOSED » ou #isOutboundDone()
retourne true. Toutes les données obtenues à partir de la wrap()
méthode doivent être envoyées à l’homologue.
#closeOutbound()
est utilisé pour signaler au moteur que l’application n’envoie plus de données.
Un homologue signale son intention de fermer en envoyant son propre message de négociation de fermeture. Une fois que ce message a été reçu et traité par l’appel local SSLEngine
, l’application unwrap()
peut détecter la fermeture en appelant unwrap()
et en recherchant un SSLEngineResult
état « CLOSED » ou si #isInboundDone()
elle retourne true. Si, pour une raison quelconque, l’homologue ferme le lien de communication sans envoyer le message de fermeture SSL/TLS approprié, l’application peut détecter la fin du flux et signaler au moteur #closeInbound()
qu’il n’y aura plus de messages entrants à traiter. Certaines applications peuvent choisir d’exiger des messages d’arrêt ordonnés d’un homologue, auquel cas ils peuvent vérifier que la fermeture a été générée par un message de négociation et non par une condition de fin de flux.
Il existe deux groupes de suites de chiffrement dont vous aurez besoin pour gérer les suites de chiffrement :
<Suites de chiffrement UL><LI><em>Supported</em> : toutes les suites prises en charge par l’implémentation SSL. Cette liste est signalée à l’aide #getSupportedCipherSuites()
de .
<Suites de chiffrement LI><em>Enabled</em> , qui peuvent être inférieures à l’ensemble complet de suites prises en charge. Ce groupe est défini à l’aide de la #setEnabledCipherSuites(String [])
méthode et interrogé à l’aide de la #getEnabledCipherSuites()
méthode. Initialement, un ensemble par défaut de suites de chiffrement sera activé sur un nouveau moteur qui représente la configuration minimale suggérée. </UL>
Les valeurs par défaut de l’implémentation nécessitent que seules les suites de chiffrement qui authentifient les serveurs et fournissent une confidentialité activée par défaut. Uniquement si les deux parties acceptent explicitement les communications non authentifiées et/ou non privées (non chiffrées) seront sélectionnées.
Chaque connexion SSL/TLS doit avoir un client et un serveur, donc chaque point de terminaison doit décider du rôle à assumer. Ce choix détermine qui commence le processus de négociation ainsi que le type de messages à envoyer par chaque partie. La méthode #setUseClientMode(boolean)
configure le mode. Une fois la négociation initiale démarrée, il SSLEngine
n’est pas possible de basculer entre les modes client et serveur, même en effectuant des renégociations.
Les applications peuvent choisir de traiter des tâches déléguées dans différents threads. Lorsqu’un SSLEngine
est créé, le courant java.security.AccessControlContext
est enregistré. Toutes les futures tâches déléguées seront traitées à l’aide de ce contexte : autrement dit, toutes les décisions de contrôle d’accès seront prises à l’aide du contexte capturé lors de la création du moteur.
<RH>
<B>Notes< d’accès concurrentiel/B> : il existe deux problèmes d’accès concurrentiel à connaître :
<OL><li>Les wrap()
méthodes et unwrap()
les méthodes peuvent s’exécuter simultanément les unes des autres.
<li> Les protocoles SSL/TLS utilisent des paquets ordonnés. Les applications doivent s’assurer que les paquets générés sont remis en séquence. Si des paquets arrivent hors commande, des résultats inattendus ou irrécupérables peuvent se produire.
Par exemple :
synchronized (outboundLock) {
sslEngine.wrap(src, dst);
outboundQueue.put(dst);
}
En tant que corollaire, deux threads ne doivent pas tenter d’appeler la même méthode (soit wrap()
unwrap()
) simultanément, car il n’existe aucun moyen de garantir l’ordre des paquets éventuels. </OL>
<Configuration h3>par défaut pour différentes versions< Android/h3>
SSLEngine
Les instances obtenues à partir de la valeur par défaut SSLContext
sont configurées comme suit :
<style type="text/css »> tr.deprecated { background-color : #ccc ; color : #999 ; font-style : italique ; }</style>
<Table h4 Protocols/h4><<>>thead><tr><th>Protocol</th><>th Supported (API Levels)</th th<>>Enabled by default (API Levels)</th></tr></thead<>tbody<>tr class="deprecated"<>td SSLv3</td td>><>1&ndash ;< 25</td td><>1&ndash ; 22</td<>/tr tr><<>td>TLSv1</td td>><1+</<>>td td 1+</td></tr><tr><>TLSv1.1</td td><>20+</td td 20+/td<>>td 20+</td></tr tr<><>>td TLSv1.2</td><td>20+</td>><td 20+</td<>/tr><td><>TLSv1.3</Td><td>29+</td td><>29+</td/td></tr></tbody></table>
<Suites de chiffrement h4/table><h4<>>thead><tr><th>Cipher suite</th 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><<tr class="déprécié »><>td SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA</<>>td td 9-22</td td><>9-19</td></tr tr><class="déprécié"<>td>SSL_DHE_DSS_WITH_DES_CBC_SHA</td td><>9-22</td 9-19</td<>>></tr><class="déprécié"<>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 class="deprecated »><>td SSL_DH_anon_EXPORT_WITH_DES40_CBC_SHA</<>td td>9-22</td/td>><</td<>/tr tr<>class="déprécié"><td>SSL_DH_anon_EXPORT_WITH_RC4_40_MD5</td td<>>9-22</td td<><>/td/td/td<>/tr><class="déprécié"><td>SSL_DH_anon_WITH_3DES_EDE_CBC_SHA</td td><>9-22</Td><td></td></tr tr><class="déprécié"<>td>SSL_DH_anon_WITH_DES_CBC_SHA</td td>><9-22</td><></td<>/tr<>tr class="déprécié"<>td>SSL_DH_anon_WITH_RC4_128_MD5</td td>9-22</td><><<>/tr<> tr<>class="déprécié"><td SSL_RSA_EXPORT_><WITH_DES40_CBC_SHA/<>td td>9-22</td td<>>9-19</td<>/tr tr<>class="déprécié"<>td>SSL_RSA_EXPORT_WITH_RC4_40_MD5</td td><>9-22</td td><>9-19</td></tr><tr<>td>SSL_RSA_WITH_3DES_EDE_CBC_SHA</td td>><9+</td td><>9-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<>/tr tr><class="deprecated"<>td>SSL_RSA_WITH_NULL_SHA</td><<>td 9-22</td<>td></td></tr tr><tr class="déprécié"><td>SSL_RSA_WITH_RC4_128_MD5</><td td>9-25</td td>><9-19</td<>/tr tr><class="déprécié"><td SSL_RSA_WITH_RC4_128_SHA</td>td>><9-25</td td<>>9-23</td></tr/tr><Tr><>td TLS_AES_128_GCM_SHA256</><td td>29+</td td<>>29+/td 29+</td><<> 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 29+</td></Tr><tr class="déprécié"td TLS_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA/td td><>1-8</td<>td>1-8</td></tr<>tr class="déprécié">><<td>TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA</td td>><1-8</td td 1-8</><td>></tr tr><class="déprécié"><td TLS_DHE_DSS_WITH_AES_128_><><CBC_SHA/><td td>9-22</td td>><9-22</td></tr<>tr class="déprécié"<>td>TLS_DHE_DSS_WITH_AES_128_CBC_SHA256</td td>><20-22</td><></td<>/tr tr<>tr class="déprécié"><td>TLS_DHE_DSS_WITH_AES_128_GCM_SHA256</td td>><20-22/td td td 20-22</td><></Td></tr>tr class="déprécié"td>TLS_DHE_DSS_WITH_AES_256_CBC_SHA</td td><>9-22</td<>td>20-22</td<>/tr tr><class="déprécié"><><td>TLS_DHE_DSS_WITH_AES_256_CBC_SHA256</td td>20-22</><<>><td<>/tr tr<>class="déprécié"><td TLS_DHE_DSS_WITH_><<AES_256_GCM_SHA384/><td td>20-22</td/td>><</td></tr tr><class="déprécié"><td>TLS_DHE_DSS_WITH_DES_CBC_SHA</td td><>1-8</td td>><1-8</td></tr tr<>class="déconseillé"><td>TLS_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA</td td>><1-8/td 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="déprécié"><td>TLS_DHE_RSA_WITH_AES_128_CBC_SHA</td td<>>9-25</td td><>9-25/td td 9-25</td<>/tr tr><class="déprécié » td TLS_DHE_RSA_WITH_AES_128_CBC_SHA256</><td td>20-25</td td></td<>></tr tr<>class="déprécié"<>td>TLS_DHE_RSA_WITH_AES_128_GCM_SHA256</td td>><20-25</td td>20-25</td><<>/tr tr<>class="déprécié"<>td>TLS_DHE_RSA_WITH_AES_256_CBC_SHA</td>><><>td 9-25</<>td td>20-25</td></tr tr><tr class="déprécié"><td>TLS_DHE_RSA_WITH_AES_256_CBC_SHA256</td td<>>20-25</td<>td></td></tr<>class="déprécié"><td TLS_DHE_RSA_WITH_AES_256_GCM_SHA384</td>td><>20-25</td<>>20-25/td 20-25</td></tr><tr class="déprécié"><td>TLS_DHE_RSA_WITH_DES_CBC_SHA</td td><>1-8</td><td>1-8</td<>/tr<>tr class="déprécié"<>td>TLS_DH_DSS_EXPORT_WITH_DES40_CBC_SHA</td td>1-8</td><><></<>tr><tr class="déprécié"><td TLS_DH_DSS_><WITH_3DES_EDE_CBC_SHA/<>>td td 1-8</td><<>/td<>/tr tr<>class="déprécié"<>td>TLS_DH_DSS_WITH_DES_CBC_SHA</td td>><1-8</td/td<>></td></tr><tr tr class="déprécié"<>td>TLS_DH_RSA_EXPORT_WITH_DES40_CBC_SHA</td td<>>1-8</td><td></td></tr><tr class="déprécié"><td>TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA</td td<>>1-8</td<>td></td/td></tr tr<>class="déprécié"><td>TLS_DH_RSA_WITH_DES_CBC_SHA</td td>><1-8</td td></td<>/td></tr tr<>class="déprécié"><td TLS_DH_anon_EXPORT_WITH_><DES40_CBC_SHA/<>>td td 1-8</td<>td></tr<> tr tr><class="deprecated"><td>TLS_DH_anon_WITH_3DES_EDE_CBC_SHA</td><td>1-8</td>><</td></tr tr><class="déprécié"<>td TLS_DH_anon_WITH_AES_128_CBC_SHA</td>><td>9-22</td<>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 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><<>/tr>< tr<>class="déprécié"<>td>TLS_DH_anon_WITH_AES_256_GCM_SHA384</td td><>20-22</td<>>< td/td/td></tr/tr><><tr class="déprécié"td>TLS_DH_anon_WITH_DES_CBC_SHA</td td>><1-8</td<><>/td/td></tr tr<>tr class="déprécié"<><>td>TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA</td td>><20-22</td td></td<>/td/td></tr>><<td>TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA</tdtd 20+</><td td>20+</td></tr tr><tr class="déprécié"<>td>TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256</td<>td>20-28</td><<>/td/td></tr<>tr><>TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256</td td<>>20+</td td><>20+/td 20+</td/><><> tr tr td><>><TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA</td td><>20+</td td><>20+</td<>/tr<>tr class="déprécié"><td>TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384</td td<>>20-28</td<><>/td/td<>/tr tr>><<>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 tr<>tr class="déprécié"><td>TLS_ECDHE_ECDSA_WITH_NULL_SHA</td td<>>20-22</td td/>><<>< td></tr tr<>class="déprécié"<>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 21+</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 tr<>class="déprécié"<>td>TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA</td><td>20-22</td td>><</td></tr tr><<>td>TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA</td>><td 20+</td>><td 20+</td></tr tr<>tr class="déprécié"<>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 tr<>>><td TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA</td td>><20+</td td>><20+/td 20+</td></tr tr<>class="déprécié"><td TLS_><ECDHE_RSA_WITH_AES_256_CBC_SHA384/<>td td>20-28</td/td<><>/td<>/tr<>tr<>>TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384</td td>><20+</td td><>20+</td<>/tr tr tr<<>>td>TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256</td td><>24+</>td td>24+</td<>/tr tr><tr class="deprecated"<>td>TLS_ECDHE_RSA_WITH_NULL_SHA</>><td 20-22</td><></td></tr tr<>class="déprécié"<>td>TLS_ECDHE_RSA_WITH_RC4_128_SHA</td td<>>20-25</td<>td>20-23/td 20-23</td<></tr><tr class="deprecated"><td>TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA</td td<>>20-22</td<>td></td/td></tr tr><class="deprecated"<>td>TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA</td td<>>20-22</td><<> td/tr><>< class= » déprécié">td TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256/td td>><20-22</><><td/td></tr tr<>class="déconseillé"<>td>TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256</td td>><20-22</td/td/td><><></tr tr><tr class="déprécié"><td TLS_ECDH_><><<ECDSA_WITH_AES_256_CBC_SHA/<>td td>20-22</td/td<>></td<>/tr tr><class="déprécié"<>td>TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384</td td<>>20-22</td td><></td/td/td></tr><class="déprécié"><td>TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384</td><>td 20-22</td><td></td></tr tr><tr class="deprecated"><td>TLS_ECDH_ECDSA_WITH_NULL_SHA</td><>20-22</td><></td></tr tr<>class="déprécié"><td TLS_ECDH_ECDSA_WITH_RC4_128_SHA</td>td<>>20-22</td><td></td/td></tr><tr class="déprécié"<>td>TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA</td td>><20-22</td<>td></td/td></tr><tr class="déprécié"<>td>TLS_ECDH_RSA_WITH_AES_128_CBC_SHA</td td>20-22</td<>td><></<>tr><class="déprécié » td TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256</td><td>20-22</td/td><></td<>/tr tr<>class="déprécié"<>td>TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256</td td<>>20-22</td td></td></td></tr><class="déprécié"><td TLS_ECDH_RSA_WITH_AES_256_>><><CBC_SHA/<>td td>20-22</td/td>><</td<>/tr tr<>class="déprécié"><td>TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384</td td<>>20-22</td td<><>/td></td/tr><class="déprécié"><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></tr<>tr class="déprécié"<>td>TLS_ECDH_RSA_WITH_RC4_128_SHA</td td>><20-22</td><<>/td<>/tr tr><class="déprécié » td TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA/td><td>20-22</td/td/td<><><>/tr tr<>class="déprécié"><td>TLS_ECDH_anon_WITH_AES_128_CBC_SHA</td td<>>20-22</td td<><>/td></tr<>class="déprécié"><td TLS_ECDH_anon_WITH_AES_256_><>><<CBC_SHA/><td td>20-22</td></td><<>/tr tr<>tr class="déprécié"><td>TLS_ECDH_anon_WITH_NULL_SHA</td td>><20-22</td td></td></td/td></tr><class="déprécié"<>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<>/td<>/tr tr<>tr class="déprécié"td><><TLS_NULL_WITH_NULL_NULL/><td td>1-8</td>><</td<>/tr tr<>class="déprécié"<>td>TLS_PSK_WITH_3DES_EDE_CBC_SHA</td td>><21-22</td td></td<>/td/td/><<>>td>< TLS_PSK_WITH_AES_128_CBC_SHA</td td<>>21+</td><td>21+</td></tr tr><><td>TLS_PSK_WITH_AES_256_CBC_SHA</td td>><21+</td<>td>21+</td></tr<>tr class="déprécié"<>td>TLS_PSK_WITH_RC4_128_SHA</td td<>>21-25</td><>< td<>/tr tr>< class="déconseillé">td TLS_RSA_EXPORT_WITH_DES40_CBC_SHA/td td>><1-8</><td td>1-8/td 1-8</td></tr><tr class="déprécié"><td>TLS_RSA_WITH_3DES_EDE_CBC_SHA</td td>1-8</td<>td 1-8</td><><>/tr tr<>td TLS_RSA_WITH_AES_>><<><<128_CBC_SHA/<>>td td 9+</td td>><9+</td<>/tr tr><class="déprécié"><td>TLS_RSA_WITH_AES_128_CBC_SHA256</td td><>20-28</td td<>></td/td/td/td>><>><< TLS_RSA_WITH_AES_128_GCM_SHA256</td td<>>20+</td><td>20+</td></tr tr>><<td>TLS_RSA_WITH_AES_256_CBC_SHA</td td<>>9+</td><>20+</td></tr tr<>class="déprécié"><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="déprécié"><td>TLS_RSA_WITH_DES_CBC_SHA</td td>><1-8</td td><>1-8</td<>/tr tr><class="déconseillé"><td TLS_RSA_WITH_NULL_MD5>><></Td><td 1-8/td><td></td></tr tr<>tr class="déprécié"<>td>TLS_RSA_WITH_NULL_SHA</td td>><1-8</td><td></td/tr><>< tr class="déprécié"<>td>TLS_RSA_WITH_NULL_SHA256</td td>><20-22</td<>td></td></tr/tr><></tbody></table>
<em>REMARQUE</em> : les suites de chiffrement PSK sont activées par défaut uniquement si le SSLContext
moteur a été créé a été initialisé avec un PSKKeyManager
.
Ajouté à la version 1.5.
Documentation Java pour javax.net.ssl.SSLEngine
.
Les parties de cette page sont des modifications basées sur le travail créé et partagé par le projet Android Open Source et utilisés en fonction des termes décrits dans la licence d’attribution Creative Commons 2.5.
Constructeurs
SSLEngine() |
Constructeur pour fournir |
SSLEngine(IntPtr, JniHandleOwnership) |
Constructeur utilisé lors de la création de représentations managées d’objets JNI ; appelée par le runtime. |
SSLEngine(String, Int32) |
Constructeur pour un |
Propriétés
ApplicationProtocol |
Retourne la valeur de protocole d’application la plus récente négociée pour cette connexion. |
Class |
Retourne la classe runtime de ce |
DelegatedTask |
Retourne une tâche déléguée pour cette instance de moteur. |
EnableSessionCreation |
Retourne si de nouvelles sessions SSL peuvent être établies par ce moteur. |
Handle |
Handle de l’instance Android sous-jacente. (Hérité de Object) |
HandshakeApplicationProtocol |
Retourne la valeur du protocole d’application négociée sur une négociation SSL/TLS en cours. |
HandshakeApplicationProtocolSelector |
Récupère la fonction de rappel qui sélectionne une valeur de protocole d’application pendant une négociation SSL/TLS. -ou- Inscrit une fonction de rappel qui sélectionne une valeur de protocole d’application pour une liaison SSL/TLS. |
HandshakeSession |
Retourne la |
HandshakeStatus |
Retourne l’état de la négociation de cette instance de moteur. |
IsInboundDone |
Retourne si aucune donnée entrante n’est acceptée par ce moteur. |
IsOutboundDone |
Retourne si aucune donnée sortante ne sera produite par ce moteur. |
JniIdentityHashCode |
Classe qui permet des communications sécurisées à l’aide de protocoles tels que les protocoles SSL (Secure Sockets Layer) ou IETF RFC 2246 « Transport Layer Security » (TLS), mais qui sont indépendants du transport. (Hérité de Object) |
JniPeerMembers |
Classe qui permet des communications sécurisées à l’aide de protocoles tels que les protocoles SSL (Secure Sockets Layer) ou IETF RFC 2246 « Transport Layer Security » (TLS), mais qui sont indépendants du transport. |
NeedClientAuth |
Retourne si cette instance de moteur nécessite l’authentification du client. |
PeerHost |
Retourne le nom d’hôte de l’homologue. |
PeerPort |
Retourne le numéro de port de l’homologue. |
PeerReference |
Classe qui permet des communications sécurisées à l’aide de protocoles tels que les protocoles SSL (Secure Sockets Layer) ou IETF RFC 2246 « Transport Layer Security » (TLS), mais qui sont indépendants du transport. (Hérité de Object) |
Session |
Retourne la session SSL pour cette instance de moteur. |
SSLParameters |
Retourne les paramètres SSLParameters en vigueur pour ce SSLEngine. -ou- Applique SSLParameters à ce moteur. |
ThresholdClass |
Cette API prend en charge l’infrastructure Mono pour Android et n’est pas destinée à être utilisée directement à partir de votre code. |
ThresholdType |
Cette API prend en charge l’infrastructure Mono pour Android et n’est pas destinée à être utilisée directement à partir de votre code. |
UseClientMode |
Retourne si ce moteur est défini pour agir en mode client lors de la négociation. |
WantClientAuth |
Retourne si ce moteur demande l’authentification du client. |
Méthodes
BeginHandshake() |
Lance la négociation (initial ou renégociation) sur ce SSLEngine. |
Clone() |
Crée et retourne une copie de cet objet. (Hérité de Object) |
CloseInbound() |
Signale qu’aucune donnée réseau entrante n’est envoyée à ce |
CloseOutbound() |
Signale qu’aucune autre donnée d’application sortante n’est envoyée sur ce |
Dispose() |
Classe qui permet des communications sécurisées à l’aide de protocoles tels que les protocoles SSL (Secure Sockets Layer) ou IETF RFC 2246 « Transport Layer Security » (TLS), mais qui sont indépendants du transport. (Hérité de Object) |
Dispose(Boolean) |
Classe qui permet des communications sécurisées à l’aide de protocoles tels que les protocoles SSL (Secure Sockets Layer) ou IETF RFC 2246 « Transport Layer Security » (TLS), mais qui sont indépendants du transport. (Hérité de Object) |
Equals(Object) |
Indique si un autre objet est « égal à » celui-ci. (Hérité de Object) |
GetEnabledCipherSuites() |
Retourne les noms des suites de chiffrement SSL actuellement activées pour une utilisation sur ce moteur. |
GetEnabledProtocols() |
Retourne les noms des versions de protocole actuellement activées pour une utilisation avec ce |
GetHashCode() |
Retourne une valeur de code de hachage pour l'objet. (Hérité de Object) |
GetSupportedCipherSuites() |
Retourne les noms des suites de chiffrement qui peuvent être activées pour une utilisation sur ce moteur. |
GetSupportedProtocols() |
Retourne les noms des protocoles qui peuvent être activés pour une utilisation avec ce |
JavaFinalize() |
Appelé par le garbage collector sur un objet lorsque le garbage collection détermine qu’il n’y a plus de références à l’objet. (Hérité de Object) |
Notify() |
Réveille un thread unique qui attend le moniteur de cet objet. (Hérité de Object) |
NotifyAll() |
Réveille tous les threads qui attendent le moniteur de cet objet. (Hérité de Object) |
SetEnabledCipherSuites(String[]) |
Définit les suites de chiffrement activées pour une utilisation sur ce moteur. |
SetEnabledProtocols(String[]) |
Définissez les versions de protocole activées pour une utilisation sur ce moteur. |
SetHandle(IntPtr, JniHandleOwnership) |
Définit la propriété Handle. (Hérité de Object) |
ToArray<T>() |
Classe qui permet des communications sécurisées à l’aide de protocoles tels que les protocoles SSL (Secure Sockets Layer) ou IETF RFC 2246 « Transport Layer Security » (TLS), mais qui sont indépendants du transport. (Hérité de Object) |
ToString() |
Retourne une représentation de chaîne de l'objet. (Hérité de Object) |
UnregisterFromRuntime() |
Classe qui permet des communications sécurisées à l’aide de protocoles tels que les protocoles SSL (Secure Sockets Layer) ou IETF RFC 2246 « Transport Layer Security » (TLS), mais qui sont indépendants du transport. (Hérité de Object) |
Unwrap(ByteBuffer, ByteBuffer) |
Tente de décoder les données réseau SSL/TLS dans une mémoire tampon de données d’application en texte clair. |
Unwrap(ByteBuffer, ByteBuffer[]) |
Tente de décoder les données réseau SSL/TLS dans une séquence de mémoires tampons de données d’application en texte clair. |
Unwrap(ByteBuffer, ByteBuffer[], Int32, Int32) |
Tente de décoder les données réseau SSL/TLS dans une sous-séquence de mémoires tampons de données d’application en texte clair. |
Wait() |
Provoque l’attente du thread actuel jusqu’à ce qu’il soit réveillé, généralement en étant <averti par em ou><em>interrompu</em>.<> (Hérité de Object) |
Wait(Int64) |
Provoque l’attente du thread actuel jusqu’à ce qu’il soit réveillé, généralement en étant <averti< par> em>ou <em>interrompu/em>,< ou jusqu’à ce qu’une certaine quantité de temps réel s’est écoulée. (Hérité de Object) |
Wait(Int64, Int32) |
Provoque l’attente du thread actuel jusqu’à ce qu’il soit réveillé, généralement en étant <averti< par> em>ou <em>interrompu/em>,< ou jusqu’à ce qu’une certaine quantité de temps réel s’est écoulée. (Hérité de Object) |
Wrap(ByteBuffer, ByteBuffer) |
Tente d’encoder une mémoire tampon de données d’application en texte clair dans des données réseau SSL/TLS. |
Wrap(ByteBuffer[], ByteBuffer) |
Tente d’encoder des octets en texte clair à partir d’une séquence de mémoires tampons de données dans des données réseau SSL/TLS. |
Wrap(ByteBuffer[], Int32, Int32, ByteBuffer) |
Tente d’encoder des octets en texte clair à partir d’une sous-séquence de mémoires tampons de données dans des données réseau SSL/TLS. |
Implémentations d’interfaces explicites
IJavaPeerable.Disposed() |
Classe qui permet des communications sécurisées à l’aide de protocoles tels que les protocoles SSL (Secure Sockets Layer) ou IETF RFC 2246 « Transport Layer Security » (TLS), mais qui sont indépendants du transport. (Hérité de Object) |
IJavaPeerable.DisposeUnlessReferenced() |
Classe qui permet des communications sécurisées à l’aide de protocoles tels que les protocoles SSL (Secure Sockets Layer) ou IETF RFC 2246 « Transport Layer Security » (TLS), mais qui sont indépendants du transport. (Hérité de Object) |
IJavaPeerable.Finalized() |
Classe qui permet des communications sécurisées à l’aide de protocoles tels que les protocoles SSL (Secure Sockets Layer) ou IETF RFC 2246 « Transport Layer Security » (TLS), mais qui sont indépendants du transport. (Hérité de Object) |
IJavaPeerable.JniManagedPeerState |
Classe qui permet des communications sécurisées à l’aide de protocoles tels que les protocoles SSL (Secure Sockets Layer) ou IETF RFC 2246 « Transport Layer Security » (TLS), mais qui sont indépendants du transport. (Hérité de Object) |
IJavaPeerable.SetJniIdentityHashCode(Int32) |
Classe qui permet des communications sécurisées à l’aide de protocoles tels que les protocoles SSL (Secure Sockets Layer) ou IETF RFC 2246 « Transport Layer Security » (TLS), mais qui sont indépendants du transport. (Hérité de Object) |
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
Classe qui permet des communications sécurisées à l’aide de protocoles tels que les protocoles SSL (Secure Sockets Layer) ou IETF RFC 2246 « Transport Layer Security » (TLS), mais qui sont indépendants du transport. (Hérité de Object) |
IJavaPeerable.SetPeerReference(JniObjectReference) |
Classe qui permet des communications sécurisées à l’aide de protocoles tels que les protocoles SSL (Secure Sockets Layer) ou IETF RFC 2246 « Transport Layer Security » (TLS), mais qui sont indépendants du transport. (Hérité de Object) |
Méthodes d’extension
JavaCast<TResult>(IJavaObject) |
Effectue une conversion de type vérifiée par le runtime Android. |
JavaCast<TResult>(IJavaObject) |
Classe qui permet des communications sécurisées à l’aide de protocoles tels que les protocoles SSL (Secure Sockets Layer) ou IETF RFC 2246 « Transport Layer Security » (TLS), mais qui sont indépendants du transport. |
GetJniTypeName(IJavaPeerable) |
Classe qui permet des communications sécurisées à l’aide de protocoles tels que les protocoles SSL (Secure Sockets Layer) ou IETF RFC 2246 « Transport Layer Security » (TLS), mais qui sont indépendants du transport. |