SSLEngine Clase
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Una clase que permite comunicaciones seguras mediante protocolos como los protocolos Capa de sockets seguros (SSL) o IETF RFC 2246 "Seguridad de la capa de transporte" (TLS), pero es independiente del transporte.
[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
- Herencia
- Atributos
Comentarios
Una clase que permite comunicaciones seguras mediante protocolos como los protocolos Capa de sockets seguros (SSL) o IETF RFC 2246 "Seguridad de la capa de transporte" (TLS), pero es independiente del transporte.
Los modos de comunicaciones seguras incluyen: <UL>
<LI><em>Integrity Protection</em>. SSL/TLS protege contra la modificación de mensajes por parte de un programa previo activo.
<LI><em>Authentication</em>. En la mayoría de los modos, SSL/TLS proporciona autenticación del mismo nivel. Normalmente, los servidores se autentican y los clientes pueden autenticarse según lo solicitado por los servidores.
<LI><em>Confidencialidad (Protección de privacidad)</em>. En la mayoría de los modos, SSL/TLS cifra los datos que se envían entre el cliente y el servidor. Esto protege la confidencialidad de los datos, por lo que las cuentas bancarias pasivas no verán datos confidenciales, como información financiera o información personal de muchos tipos.
</UL>
Estos tipos de protección se especifican mediante un "conjunto de cifrado", que es una combinación de algoritmos criptográficos utilizados por una conexión SSL determinada. Durante el proceso de negociación, los dos puntos de conexión deben aceptar un conjunto de cifrado que esté disponible en ambos entornos. Si no hay ningún conjunto de este tipo en común, no se puede establecer ninguna conexión SSL y no se puede intercambiar ningún dato.
El conjunto de cifrado utilizado se establece mediante un proceso de negociación denominado "protocolo de enlace". El objetivo de este proceso es crear o volver a unir una "sesión", que puede proteger muchas conexiones a lo largo del tiempo. Una vez completado el protocolo de enlace, puede acceder a los atributos de sesión mediante el #getSession()
método .
La SSLSocket
clase proporciona gran parte de la misma funcionalidad de seguridad, pero todos los datos entrantes y salientes se transportan automáticamente mediante el subyacente java.net.Socket Socket
, que por diseño usa un modelo de bloqueo. Aunque esto es adecuado para muchas aplicaciones, este modelo no proporciona la escalabilidad necesaria para los servidores grandes.
La distinción principal de es SSLEngine
que opera en flujos de bytes entrantes y salientes, independientemente del mecanismo de transporte. Es responsabilidad del SSLEngine
usuario organizar el transporte confiable de E/S al mismo nivel. Al separar la abstracción SSL/TLS del mecanismo de transporte de E/S, SSLEngine
se puede usar para una amplia variedad de tipos de E/S, como java.nio.channels.spi.AbstractSelectableChannel#configureBlocking(boolean) non-blocking I/O (polling)
, java.net.Socket Socket
java.nio.channels.Selector selectable non-blocking I/O
y las matrices de entrada/salida tradicionales, matrices locales java.nio.ByteBuffer ByteBuffers
o de bytes, modelos de E/S asincrónicos futuros, etc.
En un nivel alto, SSLEngine
el objeto aparece por lo tanto:
app data
| ^
| | |
v | |
+----+-----|-----+----+
| | |
| SSL|Engine |
wrap() | | | unwrap()
| OUTBOUND | INBOUND |
| | |
+----+-----|-----+----+
| | ^
| | |
v |
net data
Los datos de la aplicación (también conocidos como texto no cifrado o texto no cifrado) son datos generados o consumidos por una aplicación. Su homólogo es los datos de red, que constan de datos de protocolo de enlace o cifrado (cifrados) y destinados a transportarse a través de un mecanismo de E/S. Los datos entrantes son datos que se han recibido del mismo nivel y los datos salientes se destinan al mismo nivel.
(En el contexto de un SSLEngine
, el término "datos de protocolo de enlace" se toma para significar cualquier dato intercambiado para establecer y controlar una conexión segura. Los datos de protocolo de enlace incluyen los mensajes SSL/TLS "alert", "change_cipher_spec" y "handshake".
Hay cinco fases distintas en un SSLEngine
.
<OL><li> Creation: SSLEngine
se ha creado e inicializado, pero aún no se ha usado. Durante esta fase, una aplicación puede establecer cualquier SSLEngine
configuración específica (conjuntos de cifrado habilitados, si el SSLEngine
protocolo de enlace debe estar en modo cliente o servidor, etc.). Una vez que se haya iniciado el protocolo de enlace, sin embargo, se usará cualquier nueva configuración (excepto el modo cliente/servidor, consulte a continuación) para el siguiente protocolo de enlace.
<li> Initial Handshake: el protocolo de enlace inicial es un procedimiento por el que los dos pares intercambian parámetros de comunicación hasta que se establece sslSession. Los datos de la aplicación no se pueden enviar durante esta fase.
<li> Application Data : una vez que se hayan establecido los parámetros de comunicación y se complete el protocolo de enlace, los datos de la aplicación pueden fluir a través de SSLEngine
. Los mensajes de aplicación salientes están cifrados e integridad protegidos, y los mensajes entrantes invierten el proceso.
<li> Rehandshaking: cualquier lado puede solicitar una renegociación de la sesión en cualquier momento durante la fase de datos de la aplicación. Los nuevos datos de protocolo de enlace se pueden mezclar entre los datos de la aplicación. Antes de iniciar la fase de rehandshake, la aplicación puede restablecer los parámetros de comunicación SSL/TLS, como la lista de conjuntos de cifrado habilitados y si se debe usar la autenticación de cliente, pero no puede cambiar entre los modos de cliente y servidor. Como antes, una vez que se haya iniciado el protocolo de enlace, no se usará ninguna nueva SSLEngine
configuración hasta el siguiente protocolo de enlace.
<li> Closed: cuando la conexión ya no es necesaria, la aplicación debe cerrar y SSLEngine
debe enviar o recibir los mensajes restantes al mismo nivel antes de cerrar el mecanismo de transporte subyacente. Una vez cerrado un motor, no es reutilizable: se debe crear un nuevo SSLEngine
. </OL>SSLEngine
Se crea mediante una llamada a SSLContext#createSSLEngine()
desde un objeto inicializado SSLContext
. Los parámetros de configuración deben establecerse antes de realizar la primera llamada a wrap()
, unwrap()
o beginHandshake()
. Estos métodos desencadenan el protocolo de enlace inicial.
Los datos se mueven por el motor mediante una llamada a #wrap(ByteBuffer, ByteBuffer) wrap()
datos salientes o #unwrap(ByteBuffer, ByteBuffer) unwrap()
entrantes, respectivamente. Según el estado de SSLEngine
, una wrap()
llamada puede consumir datos de aplicación del búfer de origen y puede producir datos de red en el búfer de destino. Los datos salientes pueden contener datos de aplicación o protocolo de enlace. Una llamada a unwrap()
examinará el búfer de origen y puede avanzar el protocolo de enlace si los datos son información de protocolo de enlace, o pueden colocar datos de aplicación en el búfer de destino si los datos son aplicaciones. El estado del algoritmo SSL/TLS subyacente determinará cuándo se consumen y generan los datos.
Llama a wrap()
y unwrap()
devuelve un SSLEngineResult
objeto que indica el estado de la operación y (opcionalmente) cómo interactuar con el motor para realizar el progreso.
Produce SSLEngine
o consume paquetes SSL/TLS completos solo y no almacena los datos de la aplicación internamente entre las llamadas a wrap()/unwrap()
. Por lo tanto, las entradas y salidas ByteBuffer
deben tener el tamaño adecuado para contener el registro máximo que se puede producir. Las llamadas a SSLSession#getPacketBufferSize()
y SSLSession#getApplicationBufferSize()
deben usarse para determinar los tamaños de búfer adecuados. Por lo general, el tamaño del búfer de datos de la aplicación de salida no importa. Si las condiciones del búfer no permiten el consumo o producción adecuados de datos, la aplicación debe determinar (a través SSLEngineResult
de ) y corregir el problema y, a continuación, intentar la llamada de nuevo.
Por ejemplo, unwrap()
devolverá un SSLEngineResult.Status#BUFFER_OVERFLOW
resultado si el motor determina que no hay suficiente espacio de búfer de destino disponible. Las aplicaciones deben llamar a SSLSession#getApplicationBufferSize()
ese valor y compararlo con el espacio disponible en el búfer de destino, ampliando el búfer si es necesario. Del mismo modo, si unwrap()
se devuelve un SSLEngineResult.Status#BUFFER_UNDERFLOW
, la aplicación debe llamar SSLSession#getPacketBufferSize()
a para asegurarse de que el búfer de origen tiene suficiente espacio para contener un registro (ampliar si es necesario) y, a continuación, obtener más datos 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.
}
}
A diferencia SSLSocket
de , todos los métodos de SSLEngine no están bloqueados. SSLEngine
Las implementaciones pueden requerir los resultados de las tareas que pueden tardar un período prolongado de tiempo en completarse o incluso bloquearse. Por ejemplo, un TrustManager puede necesitar conectarse a un servicio de validación de certificados remoto o es posible que un KeyManager tenga que pedir a un usuario que determine qué certificado usar como parte de la autenticación de cliente. Además, crear firmas criptográficas y comprobarlas puede ser lenta, aparentemente bloqueada.
Para cualquier operación que pueda bloquearse, SSLEngine
creará una java.lang.Runnable
tarea delegada. Cuando SSLEngineResult
indica que se necesita un resultado de tarea delegado, la aplicación debe llamar #getDelegatedTask()
a para obtener una tarea delegada pendiente y llamar a su java.lang.Runnable#run() run()
método (posiblemente mediante un subproceso diferente en función de la estrategia de proceso). La aplicación debe seguir obteniendo tareas delegadas hasta que ya no exista y vuelva a intentar la operación original.
Al final de una sesión de comunicación, las aplicaciones deben cerrar correctamente el vínculo SSL/TLS. Los protocolos SSL/TLS tienen mensajes de protocolo de enlace de cierre y estos mensajes deben comunicarse al mismo nivel antes de liberar SSLEngine
y cerrar el mecanismo de transporte subyacente. Uno de los métodos close puede iniciar un cierre: SSLException, un mensaje de protocolo de enlace de cierre de entrada o uno de los métodos close. En todos los casos, el motor genera mensajes de protocolo de enlace de cierre y wrap()
se debe llamar repetidamente hasta que el SSLEngineResult
estado resultante devuelva "CLOSED" o #isOutboundDone()
devuelva true. Todos los datos obtenidos del wrap()
método deben enviarse al mismo nivel.
#closeOutbound()
se usa para indicar al motor que la aplicación no enviará más datos.
Un elemento del mismo nivel señalará su intención de cerrar enviando su propio mensaje de protocolo de enlace de cierre. Una vez recibido y procesado este mensaje por la llamada localSSLEngine
unwrap()
, la aplicación puede detectar el cierre llamando unwrap()
a y buscando un SSLEngineResult
con el estado "CLOSED" o si #isInboundDone()
devuelve true. Si por algún motivo el par cierra el vínculo de comunicación sin enviar el mensaje de cierre SSL/TLS adecuado, la aplicación puede detectar el final del flujo y puede indicar al motor a través #closeInbound()
de que no habrá más mensajes entrantes para procesar. Algunas aplicaciones pueden optar por requerir el apagado ordenado de mensajes de un mismo nivel, en cuyo caso pueden comprobar que el cierre se generó mediante un mensaje de protocolo de enlace y no por una condición de fin de flujo.
Hay dos grupos de conjuntos de cifrado que deberá saber al administrar conjuntos de cifrado:
<Conjuntos de cifrado ul><LI><em>supported</em> : todos los conjuntos que son compatibles con la implementación ssl. Esta lista se notifica mediante #getSupportedCipherSuites()
.
<LI><em>Enabled</em> conjuntos de cifrado, que pueden ser menores que el conjunto completo de conjuntos admitidos. Este grupo se establece mediante el #setEnabledCipherSuites(String [])
método y se consulta mediante el #getEnabledCipherSuites()
método . Inicialmente, se habilitará un conjunto predeterminado de conjuntos de cifrado en un nuevo motor que represente la configuración mínima sugerida. </UL>
Los valores predeterminados de implementación requieren que solo los conjuntos de cifrado que autentiquen los servidores y proporcionen la confidencialidad de forma predeterminada. Solo si ambos lados aceptan explícitamente comunicaciones no autenticadas o no privadas (sin cifrar) se seleccionará dicho conjunto de cifrado.
Cada conexión SSL/TLS debe tener un cliente y un servidor, por lo que cada punto de conexión debe decidir qué rol asumir. Esta opción determina quién comienza el proceso de protocolo de enlace, así como el tipo de mensajes que cada parte debe enviar. El método #setUseClientMode(boolean)
configura el modo . Una vez iniciado el protocolo de enlace inicial, SSLEngine
un no puede cambiar entre los modos de cliente y servidor, incluso cuando se realizan renegociaciones.
Las aplicaciones pueden optar por procesar tareas delegadas en diferentes subprocesos. Cuando se crea , SSLEngine
se guarda el objeto actual java.security.AccessControlContext
. Todas las tareas delegadas futuras se procesarán con este contexto: es decir, todas las decisiones de control de acceso se tomarán mediante el contexto capturado en la creación del motor.
<RR. HH.>
<B>Notas< de simultaneidad/B>: hay dos problemas de simultaneidad que se deben tener en cuenta:
<OL><li>Los wrap()
métodos y unwrap()
se pueden ejecutar simultáneamente entre sí.
<li> Los protocolos SSL/TLS emplean paquetes ordenados. Las aplicaciones deben tener cuidado para asegurarse de que los paquetes generados se entregan en secuencia. Si los paquetes llegan fuera de orden, pueden producirse resultados inesperados o irrecuperables.
Por ejemplo:
synchronized (outboundLock) {
sslEngine.wrap(src, dst);
outboundQueue.put(dst);
}
Como corolario, dos subprocesos no deben intentar llamar al mismo método (ya sea wrap()
o unwrap()
) simultáneamente, ya que no hay ninguna manera de garantizar la ordenación final de paquetes. </OL>
<h3>Configuración predeterminada para diferentes versiones< de Android/h3>
SSLEngine
Las instancias obtenidas del valor predeterminado SSLContext
se configuran de la siguiente manera:
<style type="text/css"> tr.deprecated { background-color: #ccc; color: #999; font-style: italic; }</estilo>
<h4>Protocols</h4><table><thead><tr><th>Protocol</th><>Supported (API Levels)</th>><Enabled by default (API Levels)</th></tr<>/thead<>tbody><tr class="deprecated"><td>SSLv3</td td td><>1– 25</td td><>1– 22</td></tr tr><><td>TLSv1</td td><>1+</td 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/td></tr tr td>><><TLSv1.3</Td><td>29+</td td<>>29+</td<>/tr<>/tbody></table>
<h4>Conjuntos de cifrado</h4<>tabla><thead><tr><th>Cipher suite</th>><Supported (API Levels)</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="desusado"><td>SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA</td<>td>9-22</td td<>>9-19</td<>/tr<>class="desusado"><td>SSL_DHE_DSS_WITH_DES_CBC_SHA</td td<>>9-22/td td>><9-19</td<>/tr tr<>class="desusado"><td>SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA</td<>>td 9-22<</td><td td9-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><="desusado"<><>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<><>/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><<>/tr class><="deprecated"><td SSL_RSA_EXPORT_<><WITH_DES40_CBC_SHA/td td><>9-22</td<>td>9-19/td></tr<>clase="en desuso"><td>SSL_RSA_EXPORT_WITH_RC4_40_MD5</td td>><9-22</td td<>>9-19<</td></tr tr<><>td td>SSL_RSA_WITH_3DES_EDE_CBC_SHA</td<>>9+</td><>td 9-19</Td></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<>></tr><class="deprecated"><td>SSL_RSA_WITH_NULL_SHA<</td><>><<td>9-22</td<>td td></td></tr><tr class="desusado"><td>SSL_RSA_WITH_RC4_128_MD5</td><td>9-25</td td>><9-19</td/tr clase tr="en desuso"<>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 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><td>1-8</td<>/tr class><="deprecated"><td TLS_DHE_DSS_WITH_AES_128_<><<CBC_SHA/td td<>>9-22</td<>td>9-22</td<>/tr<>class="desusado"<>td>TLS_DHE_DSS_WITH_AES_128_CBC_SHA256</td td>><20-22/td td td></<>td><<> tr class="desusado"<>td>TLS_DHE_DSS_WITH_AES_128_GCM_SHA256</td td<>>20-22<</td><td td></Td></tr>class="desusado"><td>TLS_DHE_DSS_WITH_AES_256_CBC_SHA</td<>td>9-22</td><td>20-22</td<>/tr tr<>class="en desuso"><td>TLS_DHE_DSS_WITH_AES_256_CBC_SHA256/td td><>20-22</td<>td td/td><></tr><class="en desuso><"td TLS_DHE_DSS_WITH_<><<AES_256_GCM_SHA384/td<>td>20-22</td><td></td<>/tr<>tr class="desusado"<>td>TLS_DHE_DSS_WITH_DES_CBC_SHA</td td><>1-8/td td>1-8</td></tr tr<>class="desusado"><td>TLS_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA</td td><>1-8<</td t<>><>1-8</td<>/tr tr><class="deprecated"><td>TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA</td><td>1-8</td 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="desusado" ><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 td>><20-25</td<>/tr tr<>class="desusado"<>td>TLS_DHE_RSA_WITH_AES_256_CBC_SHA<</td><td>9-25</td<>td>20-25</td<>/tr<>tr class="desusado"><td>TLS_DHE_RSA_WITH_AES_256_CBC_SHA256</td td><>20-25</td td<>td/td>><</tr><class="desusado"><td>TLS_DHE_RSA_WITH_AES_256_GCM_SHA384</td><td>20-25</td<>>td 20-25</td></tr><class="desusado"<>td>TLS_DHE_RSA_WITH_DES_CBC_SHA</td<>td>1-8</td<>td td>1-8</td></tr tr<>class="deprecated"><td>TLS_DH_DSS_EXPORT_WITH_DES40_CBC_SHA</td 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="desusado"><td>TLS_DH_DSS_WITH_DES_CBC_SHA</td><td>1-8</td td td><></td<> tr><class="desusado"<>td>TLS_DH_RSA_EXPORT_WITH_DES40_CBC_SHA</td td<>>1-8</td><td td></td></tr><tr class="deprecated"><td>TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA</td><td>1-8</td><td td></td></tr tr<>class="deprecated"<>td>TLS_DH_RSA_WITH_DES_CBC_SHA/td><td>1-8</td<>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 class="desusado"><td>TLS_DH_anon_WITH_3DES_EDE_CBC_SHA</td<>td>1-8<</td td><<>/td></tr class><="en desuso"<>td>TLS_DH_anon_WITH_AES_128_CBC_SHA</td td td><>9-22</td<>td/td><></Tr><tr class="deprecated">td>TLS_DH_anon_WITH_AES_128_CBC_SHA256/td td>><20-22</td><td></td></tr tr><class="deprecated"<>td>TLS_DH_anon_WITH_AES_128_GCM_SHA256</td<>td>20-22</td<>td/td></td<>/tr 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 td><>20-22</td<>td></td></tr><><tr class="deprecated"><td>TLS_DH_anon_WITH_DES_CBC_SHA/td td>><1-8</td><td></td/td></tr tr><class="deprecated"<>td>TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA<</td<>td>20-22</td><td/td></td>< tr<>td<>>TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA</tdtd>20+</td<>td>20+</td<>/><tr tr class="desusado"><td>TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256</td td<>>20-28</td<>>< td/td<>/tr td>><<td>TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256</td<>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 clase<>="desusado"><td>TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384</td td><>20-28</td td<>td td></td></tr tr>><<td>TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384/< td><td>20+</td td<>>20+</td<>/tr><<>tr td td>TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256</td><td>24+</td<>td>24+</td></tr tr><class="en desuso"<>td>TLS_ECDHE_ECDSA_WITH_NULL_SHA</td td><>20-22</td td><td/>< td></tr><tr class="en desuso"><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 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="en desuso"<>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><class="deprecated"<>td>TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256</td><td>20-28</td 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<>td>20+</td td>><20+</td></tr tr<>class="desusado"><td TLS_><ECDHE_RSA_WITH_AES_256_CBC_SHA384/td<>td>20-28</td><td></td></tr>><<tr td>TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384</td td>><20+</td td<>>20+</td></tr tr>><<td td>TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256</td td td><>24+</td><td>24+</td></><tr tr class="deprecated"><td>TLS_ECDHE_RSA_WITH_NULL_SHA</td><td>20-22</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><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><td>20-22</td<>td td/td/td><></tr tr><class=" en desuso">td>TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256</td<>td>20-22</td<>td></td<>/tr<>class="deprecated"><td>TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256</td td><>20-22</td<>td td/td><<>/tr tr<>class="deprecated"><td TLS_ECDH_><<ECDSA_WITH_AES_256_CBC_SHA/td><td>20-22</td<>td></td<>/tr tr<>class="desusado"><td>TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384</td<>td>20-22</td td<>/td><<>/tr tr<>class="desusado"><td>TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384</td><td>20-22</td><td td></td></><tr tr class="deprecated"><td>TLS_ECDH_ECDSA_WITH_NULL_SHA</td td><>20-22</td td><></td<>/tr tr><class="deprecated"<>td>TLS_ECDH_ECDSA_WITH_RC4_128_SHA</td td td<>>20-22</td><td/td></tr><class="deprecated"><td>TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA</td td<>>20-22</td<>td></td<>/tr tr<>class="deprecated"<>td>TLS_ECDH_RSA_WITH_AES_128_CBC_SHA</td><td>20-22</td td><td/td><></tr tr><class="en desuso"><><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="desusado"<>td>TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384</td><td>20-22</td td></td<><>/tr tr<>class="deprecated"><td>TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384</td td><>20-22</Td><td></td></tr><tr class="deprecated"><td>TLS_ECDH_RSA_WITH_NULL_SHA</td td><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<>/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></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 td>><20+</td></tr tr>><<td>TLS_FALLBACK_SCSV</td td><>21+</td td></td><<>/tr tr<>class="desusado"><td><TLS_NULL_WITH_NULL_NULL/td td<>>1-8</td<>td></td></<>tr tr class="desusado"><td>TLS_PSK_WITH_3DES_EDE_CBC_SHA</td td><>21-22</td td<>/td><<>/tr tr<><>td>TLS_PSK_WITH_AES_128_CBC_SHA</td 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="deprecated"><td>TLS_PSK_WITH_RC4_128_SHA</td td<>>21-25</td td<>td/td/td><>< tr tr>< class="desusado">td>TLS_RSA_EXPORT_WITH_DES40_CBC_SHA</td td<>>1-8</td<>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 tr<>td TLS_RSA_WITH_AES_><><<128_CBC_SHA/td td>><9+</td td<>>9+</td<>/tr<>tr class="desusado"<>td>TLS_RSA_WITH_AES_128_CBC_SHA256</td td><>20-28</td td<>td></td<>/tr tr><><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<>td>20+<</td<>/tr tr><class="deprecated"<>td>TLS_RSA_WITH_AES_256_CBC_SHA256</td<>td>20-28</td><td td/td></td<> tr tr><><td>TLS_RSA_WITH_AES_256_GCM_SHA384</td<>td>20+</td td><>20+</td<>/tr<>clase="desusado"<>td>TLS_RSA_WITH_DES_CBC_SHA</td td>><1-8</td td<>1-8</td>/td<<>> tr class="desusado"><td TLS_RSA_WITH_NULL_MD5></Td><td>1-8</td<>td td></td></><tr tr class="deprecated"><td>TLS_RSA_WITH_NULL_SHA</td><td>1-8</td td<>></td></tr tr class="deprecated"><td>TLS_RSA_WITH_NULL_SHA256</td td<>>20-22</td td<>/td/td<><>/tr><></tbody></mesa>
<em>NOTE</em>: los conjuntos de cifrado PSK están habilitados de forma predeterminada solo si el SSLContext
a través del cual se creó el motor se ha inicializado con .PSKKeyManager
Agregado en 1.5.
Documentación de Java para javax.net.ssl.SSLEngine
.
Las partes de esta página son modificaciones basadas en el trabajo creado y compartido por el proyecto de código abierto de Android y se usan según los términos descritos en la licencia de atribución de Creative Commons 2.5.
Constructores
SSLEngine() |
Constructor para proporcionar |
SSLEngine(IntPtr, JniHandleOwnership) |
Constructor utilizado al crear representaciones administradas de objetos JNI; llamado por el tiempo de ejecución. |
SSLEngine(String, Int32) |
Constructor para un |
Propiedades
ApplicationProtocol |
Devuelve el valor del protocolo de aplicación más reciente negociado para esta conexión. |
Class |
Devuelve la clase en tiempo de ejecución de este |
DelegatedTask |
Devuelve una tarea de delegado para esta instancia del motor. |
EnableSessionCreation |
Devuelve si este motor puede establecer nuevas sesiones SSL. |
Handle |
Identificador de la instancia de Android subyacente. (Heredado de Object) |
HandshakeApplicationProtocol |
Devuelve el valor del protocolo de aplicación negociado en un protocolo de enlace SSL/TLS actualmente en curso. |
HandshakeApplicationProtocolSelector |
Recupera la función de devolución de llamada que selecciona un valor de protocolo de aplicación durante un protocolo de enlace SSL/TLS. -o bien- Registra una función de devolución de llamada que selecciona un valor de protocolo de aplicación para un protocolo de enlace SSL/TLS. |
HandshakeSession |
Devuelve el |
HandshakeStatus |
Devuelve el estado del protocolo de enlace de esta instancia del motor. |
IsInboundDone |
Devuelve si este motor no aceptará más datos entrantes. |
IsOutboundDone |
Devuelve si este motor no generará más datos salientes. |
JniIdentityHashCode |
Una clase que permite comunicaciones seguras mediante protocolos como los protocolos Capa de sockets seguros (SSL) o IETF RFC 2246 "Seguridad de la capa de transporte" (TLS), pero es independiente del transporte. (Heredado de Object) |
JniPeerMembers |
Una clase que permite comunicaciones seguras mediante protocolos como los protocolos Capa de sockets seguros (SSL) o IETF RFC 2246 "Seguridad de la capa de transporte" (TLS), pero es independiente del transporte. |
NeedClientAuth |
Devuelve si esta instancia del motor requerirá la autenticación de cliente. |
PeerHost |
Devuelve el nombre de host del mismo nivel. |
PeerPort |
Devuelve el número de puerto del mismo nivel. |
PeerReference |
Una clase que permite comunicaciones seguras mediante protocolos como los protocolos Capa de sockets seguros (SSL) o IETF RFC 2246 "Seguridad de la capa de transporte" (TLS), pero es independiente del transporte. (Heredado de Object) |
Session |
Devuelve la sesión SSL de esta instancia del motor. |
SSLParameters |
Devuelve SSLParameters en vigor para este SSLEngine. -o bien- Aplica SSLParameters a este motor. |
ThresholdClass |
Esta API admite la infraestructura mono para Android y no está pensada para usarse directamente desde el código. |
ThresholdType |
Esta API admite la infraestructura mono para Android y no está pensada para usarse directamente desde el código. |
UseClientMode |
Devuelve si este motor está establecido para actuar en modo cliente cuando se realiza el protocolo de enlace. |
WantClientAuth |
Devuelve si este motor solicitará la autenticación de cliente. |
Métodos
BeginHandshake() |
Inicia el protocolo de enlace (inicial o renegociación) en este SSLEngine. |
Clone() |
Crea y devuelve una copia de este objeto. (Heredado de Object) |
CloseInbound() |
Indica que no se enviarán más datos de red entrantes a este |
CloseOutbound() |
Indica que no se enviarán más datos de aplicación salientes en este |
Dispose() |
Una clase que permite comunicaciones seguras mediante protocolos como los protocolos Capa de sockets seguros (SSL) o IETF RFC 2246 "Seguridad de la capa de transporte" (TLS), pero es independiente del transporte. (Heredado de Object) |
Dispose(Boolean) |
Una clase que permite comunicaciones seguras mediante protocolos como los protocolos Capa de sockets seguros (SSL) o IETF RFC 2246 "Seguridad de la capa de transporte" (TLS), pero es independiente del transporte. (Heredado de Object) |
Equals(Object) |
Indica si algún otro objeto es "igual a" este. (Heredado de Object) |
GetEnabledCipherSuites() |
Devuelve los nombres de los conjuntos de cifrado SSL que están habilitados actualmente para su uso en este motor. |
GetEnabledProtocols() |
Devuelve los nombres de las versiones de protocolo que están habilitadas actualmente para su uso con este |
GetHashCode() |
Devuelve un valor de código hash del objeto. (Heredado de Object) |
GetSupportedCipherSuites() |
Devuelve los nombres de los conjuntos de cifrado que podrían habilitarse para su uso en este motor. |
GetSupportedProtocols() |
Devuelve los nombres de los protocolos que se podrían habilitar para su uso con este |
JavaFinalize() |
Lo llama el recolector de elementos no utilizados en un objeto cuando la recolección de elementos no utilizados determina que no hay más referencias al objeto . (Heredado de Object) |
Notify() |
Activa un único subproceso que está esperando en el monitor de este objeto. (Heredado de Object) |
NotifyAll() |
Activa todos los subprocesos que están esperando en el monitor de este objeto. (Heredado de Object) |
SetEnabledCipherSuites(String[]) |
Establece los conjuntos de cifrado habilitados para su uso en este motor. |
SetEnabledProtocols(String[]) |
Establezca las versiones de protocolo habilitadas para su uso en este motor. |
SetHandle(IntPtr, JniHandleOwnership) |
Establece la propiedad Handle. (Heredado de Object) |
ToArray<T>() |
Una clase que permite comunicaciones seguras mediante protocolos como los protocolos Capa de sockets seguros (SSL) o IETF RFC 2246 "Seguridad de la capa de transporte" (TLS), pero es independiente del transporte. (Heredado de Object) |
ToString() |
Devuelve una representación de cadena del objeto. (Heredado de Object) |
UnregisterFromRuntime() |
Una clase que permite comunicaciones seguras mediante protocolos como los protocolos Capa de sockets seguros (SSL) o IETF RFC 2246 "Seguridad de la capa de transporte" (TLS), pero es independiente del transporte. (Heredado de Object) |
Unwrap(ByteBuffer, ByteBuffer) |
Intenta descodificar los datos de red SSL/TLS en un búfer de datos de aplicación de texto no cifrado. |
Unwrap(ByteBuffer, ByteBuffer[]) |
Intenta descodificar los datos de red SSL/TLS en una secuencia de búferes de datos de aplicaciones de texto no cifrado. |
Unwrap(ByteBuffer, ByteBuffer[], Int32, Int32) |
Intenta descodificar los datos de red SSL/TLS en una subsecuencia de búferes de datos de aplicación de texto no cifrado. |
Wait() |
Hace que el subproceso actual espere hasta que se despierta, normalmente por ser em notificado/em> o <em>interrumpido</em>.<>< (Heredado de Object) |
Wait(Int64) |
Hace que el subproceso actual espere hasta que se despierte, normalmente por ser <em>notificado</em> o <em>interrumpido</em>, o hasta que haya transcurrido una cierta cantidad de tiempo real. (Heredado de Object) |
Wait(Int64, Int32) |
Hace que el subproceso actual espere hasta que se despierte, normalmente por ser <em>notificado</em> o <em>interrumpido</em>, o hasta que haya transcurrido una cierta cantidad de tiempo real. (Heredado de Object) |
Wrap(ByteBuffer, ByteBuffer) |
Intenta codificar un búfer de datos de aplicación de texto no cifrado en datos de red SSL/TLS. |
Wrap(ByteBuffer[], ByteBuffer) |
Intenta codificar bytes de texto no cifrado de una secuencia de búferes de datos en datos de red SSL/TLS. |
Wrap(ByteBuffer[], Int32, Int32, ByteBuffer) |
Intenta codificar bytes de texto no cifrado de una subsecuencia de búferes de datos en datos de red SSL/TLS. |
Implementaciones de interfaz explícitas
IJavaPeerable.Disposed() |
Una clase que permite comunicaciones seguras mediante protocolos como los protocolos Capa de sockets seguros (SSL) o IETF RFC 2246 "Seguridad de la capa de transporte" (TLS), pero es independiente del transporte. (Heredado de Object) |
IJavaPeerable.DisposeUnlessReferenced() |
Una clase que permite comunicaciones seguras mediante protocolos como los protocolos Capa de sockets seguros (SSL) o IETF RFC 2246 "Seguridad de la capa de transporte" (TLS), pero es independiente del transporte. (Heredado de Object) |
IJavaPeerable.Finalized() |
Una clase que permite comunicaciones seguras mediante protocolos como los protocolos Capa de sockets seguros (SSL) o IETF RFC 2246 "Seguridad de la capa de transporte" (TLS), pero es independiente del transporte. (Heredado de Object) |
IJavaPeerable.JniManagedPeerState |
Una clase que permite comunicaciones seguras mediante protocolos como los protocolos Capa de sockets seguros (SSL) o IETF RFC 2246 "Seguridad de la capa de transporte" (TLS), pero es independiente del transporte. (Heredado de Object) |
IJavaPeerable.SetJniIdentityHashCode(Int32) |
Una clase que permite comunicaciones seguras mediante protocolos como los protocolos Capa de sockets seguros (SSL) o IETF RFC 2246 "Seguridad de la capa de transporte" (TLS), pero es independiente del transporte. (Heredado de Object) |
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
Una clase que permite comunicaciones seguras mediante protocolos como los protocolos Capa de sockets seguros (SSL) o IETF RFC 2246 "Seguridad de la capa de transporte" (TLS), pero es independiente del transporte. (Heredado de Object) |
IJavaPeerable.SetPeerReference(JniObjectReference) |
Una clase que permite comunicaciones seguras mediante protocolos como los protocolos Capa de sockets seguros (SSL) o IETF RFC 2246 "Seguridad de la capa de transporte" (TLS), pero es independiente del transporte. (Heredado de Object) |
Métodos de extensión
JavaCast<TResult>(IJavaObject) |
Realiza una conversión de tipos comprobados en tiempo de ejecución de Android. |
JavaCast<TResult>(IJavaObject) |
Una clase que permite comunicaciones seguras mediante protocolos como los protocolos Capa de sockets seguros (SSL) o IETF RFC 2246 "Seguridad de la capa de transporte" (TLS), pero es independiente del transporte. |
GetJniTypeName(IJavaPeerable) |
Una clase que permite comunicaciones seguras mediante protocolos como los protocolos Capa de sockets seguros (SSL) o IETF RFC 2246 "Seguridad de la capa de transporte" (TLS), pero es independiente del transporte. |