Compartir a través de


SSLEngine Clase

Definición

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
SSLEngine
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 Socketjava.nio.channels.Selector selectable non-blocking I/Oy 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 SSLEngineconfiguració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 ByteBufferdeben 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 SSLEngineResultde ) 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 SSLSocketde , 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 SSLEngineResultestado 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 localSSLEngineunwrap(), 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 ninguna sugerencia para una estrategia de reutilización de sesión interna.

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 SSLEngineobjeto .

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 Objectobjeto .

(Heredado de Object)
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 SSLSession objeto que se construye durante un protocolo de enlace SSL/TLS.

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 SSLEngine.

CloseOutbound()

Indica que no se enviarán más datos de aplicación salientes en este SSLEngine.

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 SSLEngine.

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 SSLEngine.

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.

Se aplica a