Alerta fatal recibida: handshake_failure a través de SSLHandshakeException

134

Tengo un problema con la conexión SSL autorizada. He creado Struts Action que se conecta al servidor externo con el certificado SSL autorizado por el cliente. En mi Acción, estoy tratando de enviar algunos datos al servidor del banco, pero sin suerte, porque tengo como resultado del servidor el siguiente error:

error: javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure

Mi método de mi clase de acción que envía datos al servidor

//Getting external IP from host
    URL whatismyip = new URL("http://automation.whatismyip.com/n09230945.asp");
    BufferedReader inIP = new BufferedReader(new InputStreamReader(whatismyip.openStream()));

    String IPStr = inIP.readLine(); //IP as a String

    Merchant merchant;

    System.out.println("amount: " + amount + ", currency: " + currency + ", clientIp: " + IPStr + ", description: " + description);

    try {

        merchant = new Merchant(context.getRealPath("/") + "merchant.properties");

    } catch (ConfigurationException e) {

        Logger.getLogger(HomeAction.class.getName()).log(Level.INFO, "message", e);
        System.err.println("error: " + e.getMessage());
        return ERROR;
    }

    String result = merchant.sendTransData(amount, currency, IPStr, description);

    System.out.println("result: " + result);

    return SUCCESS;

Mi archivo merchant.properties:

bank.server.url=https://-servernameandport-/
https.cipher=-cipher-

keystore.file=-key-.jks
keystore.type=JKS
keystore.password=-password-
ecomm.server.version=2.0

encoding.source=UTF-8
encoding.native=UTF-8

Por primera vez pensé que esto era un problema de certificado, lo convertí de .pfx a .jks, pero tengo el mismo error, sin cambios.

Denees
fuente
¿Agregó el certificado SSL del servidor a su almacén de confianza?
happymeal
Lo sentimos, no entiendo lo que esto significa, soy nuevo en SSL
Denees
Supongo que su aplicación está utilizando el almacén de confianza predeterminado de Java. El almacén de confianza predeterminado es <java-home> / lib / security / cacerts. abra la url del servidor con su navegador y descargue todos los certificados SSL; incluyendo cualquier cadena / certs intermedios. luego agregue todos estos certificados al almacén de confianza.
happymeal
No puedo abrir la URL en el navegador, debido al certificado de autenticación del cliente, puedo enviar a este enlace solo parámetros específicos que obtengo de los clientes.
Denees
solo abre la url. ignore todos los errores que vea en su navegador. Cuando acceda a la URL, debería ver un icono de candado en la barra de direcciones de su navegador. haga clic en eso y descargue el certificado SSL del servidor.
happymeal

Respuestas:

251

La falla del apretón de manos pudo haber ocurrido debido a varias razones:

  • Conjuntos de cifrado incompatibles en uso por el cliente y el servidor. Esto requeriría que el cliente use (o habilite) un conjunto de cifrado compatible con el servidor.
  • Versiones incompatibles de SSL en uso (el servidor puede aceptar solo TLS v1, mientras que el cliente solo puede usar SSL v3). Nuevamente, el cliente podría tener que asegurarse de que usa una versión compatible del protocolo SSL / TLS.
  • Ruta de confianza incompleta para el certificado del servidor; El cliente probablemente no confíe en el certificado del servidor. Esto generalmente daría como resultado un error más detallado, pero es bastante posible. Por lo general, la solución es importar el certificado de CA del servidor en el almacén de confianza del cliente.
  • El certificado se emite para un dominio diferente. Nuevamente, esto habría resultado en un mensaje más detallado, pero expondré la solución aquí en caso de que esta sea la causa. La resolución en este caso sería hacer que el servidor (no parece ser suyo) use el certificado correcto.

Como la falla subyacente no se puede identificar, es mejor activar el -Djavax.net.debug=allindicador para habilitar la depuración de la conexión SSL establecida. Con la depuración activada, puede determinar qué actividad en el protocolo de enlace ha fallado.

Actualizar

Según los detalles ahora disponibles, parece que el problema se debe a una ruta de confianza de certificado incompleta entre el certificado emitido al servidor y una CA raíz. En la mayoría de los casos, esto se debe a que el certificado de la CA raíz está ausente en el almacén de confianza, lo que lleva a la situación en la que no puede existir una ruta de confianza del certificado; el cliente no confía esencialmente en el certificado. Los navegadores pueden presentar una advertencia para que los usuarios puedan ignorar esto, pero no es el mismo caso para los clientes SSL (como la clase HttpsURLConnection , o cualquier biblioteca de Cliente HTTP como Apache HttpComponents Client ).

La mayoría de estas clases / bibliotecas de clientes dependerían del almacén de confianza utilizado por la JVM para la validación del certificado. En la mayoría de los casos, este será el cacertsarchivo en el directorio JRE_HOME / lib / security. Si la ubicación del almacén de confianza se ha especificado utilizando la propiedad del sistema JVM javax.net.ssl.trustStore, entonces el almacén en esa ruta suele ser el utilizado por la biblioteca del cliente. Si tiene dudas, eche un vistazo a su Merchantclase y descubra la clase / biblioteca que está utilizando para establecer la conexión.

Agregar el certificado del servidor que emite CA a este almacén de confianza debería resolver el problema. Puede consultar mi respuesta en una pregunta relacionada sobre cómo obtener herramientas para este propósito, pero la utilidad Java keytool es suficiente para este propósito.

Advertencia : El almacén de confianza es esencialmente la lista de todas las CA en las que confía. Si coloca un certificado que no pertenece a una CA en la que no confía, las conexiones SSL / TLS a los sitios que tienen certificados emitidos por esa entidad se pueden descifrar si la clave privada está disponible.

Actualización n. ° 2: comprensión del resultado de la traza JSSE

El almacén de claves y los almacenes de confianza utilizados por la JVM generalmente se enumeran al principio, algo así como lo siguiente:

keyStore is : 
keyStore type is : jks
keyStore provider is : 
init keystore
init keymanager of type SunX509
trustStore is: C:\Java\jdk1.6.0_21\jre\lib\security\cacerts
trustStore type is : jks
trustStore provider is : 

Si se usa el almacén de confianza incorrecto, deberá volver a importar el certificado del servidor al correcto o volver a configurar el servidor para usar el que figura en la lista (no se recomienda si tiene varias JVM, y todas se usan para diferentes necesidades).

Si desea verificar si la lista de certificados de confianza contiene los certificados requeridos, entonces hay una sección para el mismo, que comienza como:

adding as trusted cert:
  Subject: CN=blah, O=blah, C=blah
  Issuer:  CN=biggerblah, O=biggerblah, C=biggerblah
  Algorithm: RSA; Serial number: yadda
  Valid from SomeDate until SomeDate

Deberá buscar si la CA del servidor es un tema.

El proceso de reconocimiento tendrá algunas entradas destacadas (necesitará conocer SSL para comprenderlas en detalle, pero con el fin de depurar el problema actual, será suficiente saber que generalmente se informa un fallo de reconocimiento de manos en ServerHello.

1. ClientHello

Se informará una serie de entradas cuando se inicie la conexión. El primer mensaje enviado por el cliente en una configuración de conexión SSL / TLS es el mensaje ClientHello, que generalmente se informa en los registros como:

*** ClientHello, TLSv1
RandomCookie:  GMT: 1291302508 bytes = { some byte array }
Session ID:  {}
Cipher Suites: [SSL_RSA_WITH_RC4_128_MD5, SSL_RSA_WITH_RC4_128_SHA, TLS_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_DSS_WITH_AES_128_CBC_SHA, SSL_RSA_WITH_3DES_EDE_CBC_SHA, SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA, SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA, SSL_RSA_WITH_DES_CBC_SHA, SSL_DHE_RSA_WITH_DES_CBC_SHA, SSL_DHE_DSS_WITH_DES_CBC_SHA, SSL_RSA_EXPORT_WITH_RC4_40_MD5, SSL_RSA_EXPORT_WITH_DES40_CBC_SHA, SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA, SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA]
Compression Methods:  { 0 }
***

Tenga en cuenta los conjuntos de cifrado utilizados. Esto podría tener que estar de acuerdo con la entrada en su archivo merchant.properties, ya que la biblioteca del banco podría emplear la misma convención. Si la convención utilizada es diferente, no hay motivo de preocupación, ya que ServerHello lo indicará si el conjunto de cifrado es incompatible.

2. ServerHello

El servidor responde con un ServerHello, que indicará si la configuración de la conexión puede continuar. Las entradas en los registros suelen ser del siguiente tipo:

*** ServerHello, TLSv1
RandomCookie:  GMT: 1291302499 bytes = { some byte array}
Cipher Suite: SSL_RSA_WITH_RC4_128_SHA
Compression Method: 0
***

Tenga en cuenta la suite de cifrado que ha elegido; Esta es la mejor suite disponible tanto para el servidor como para el cliente. Por lo general, el conjunto de cifrado no se especifica si hay un error. El certificado del servidor (y opcionalmente toda la cadena) es enviado por el servidor, y se encuentra en las entradas como:

*** Certificate chain
chain [0] = [
[
  Version: V3
  Subject: CN=server, O=server's org, L=server's location, ST =Server's state, C=Server's country
  Signature Algorithm: SHA1withRSA, OID = some identifer

.... the rest of the certificate
***

Si la verificación del certificado se realizó correctamente, encontrará una entrada similar a:

Found trusted certificate:
[
[
  Version: V1
  Subject: OU=Server's CA, O="Server's CA's company name", C=CA's country
  Signature Algorithm: SHA1withRSA, OID = some identifier

Uno de los pasos anteriores no habría tenido éxito, lo que resultaría en la falla de apretón de manos, ya que el apretón de manos generalmente se completa en esta etapa (en realidad no, pero las etapas posteriores del apretón de manos generalmente no causan una falla del apretón de manos). Deberá averiguar qué paso ha fallado y publicar el mensaje apropiado como una actualización de la pregunta (a menos que ya haya entendido el mensaje y sepa qué hacer para resolverlo).

Vineet Reynolds
fuente
Publique lo que tenga, si puede, para que pueda actualizar la respuesta con una más específica.
Vineet Reynolds
1
Ok Vineet, no puedo entender cómo lidiar con eso, ya estoy agotado. Encontré una manera de verificar la URL del servidor con openssl "openssl s_client -connect servername: 4402", y mira lo que obtuve: img225.imageshack.us/img225/8999/screenshoturr.png
Denees
@hoss, parece que el certificado del servidor fue emitido por una entidad que no está presente en el almacén de confianza utilizado por OpenSSL, y que posiblemente tampoco esté presente en el almacén de confianza utilizado por su servidor (el cliente), cuando se conecta a el servidor. En ese caso, deberá importar el certificado de la CA que emitió el certificado ( y no el servidor ) en el almacén de confianza de su cliente (OpenSSL / su servidor).
Vineet Reynolds
1
Bueno, puede ser que dependa de los cacerts. Pero puede determinar esto solo si comprende el resultado de la depuración de la red. Si desea verificar esto, deberá usar el keytool -list -v -keystore $JAVA_HOME/jre/lib/security/cacertscomando para imprimir el contenido. Luego verifique si los certificados en cacerts coinciden con la CA del certificado del banco.
Vineet Reynolds
55
El valor predeterminado es generalmente changeit. A menos que haya cambiado.
Vineet Reynolds
20

La instalación de Java Cryptography Extension (JCE) Fuerza ilimitada ( para JDK7 | para JDK8 ) podría solucionar este error. Descomprima el archivo y siga el archivo Léame para instalarlo.

Simon Yu
fuente
16

La falla del protocolo de enlace podría ser una implementación de protocolo TLSv1 con errores.

En nuestro caso, esto ayudó con Java 7:

java -Dhttps.protocols=TLSv1.2,TLSv1.1,TLSv1 

El jvm negociará en este orden. Los servidores con la última actualización harán 1.2, los con errores bajarán a v1 y eso funciona con el v1 similar en java 7.

Bela Vizy
fuente
1
Esto me ayudo. Hubo mi ClientHello, pero no servidor, el final fue bastante abrupto. Esto me lo arregló en Java 7. Muchas gracias.
virgo47
15

Esto también puede suceder cuando el cliente necesita presentar un certificado. Después de que el servidor enumera la cadena de certificados, puede suceder lo siguiente:

3. Solicitud de certificado El servidor emitirá una solicitud de certificado del cliente. La solicitud enumerará todos los certificados que acepta el servidor.

*** CertificateRequest
Cert Types: RSA
Cert Authorities:
<CN=blah, OU=blah, O=blah, L=blah, ST=blah, C=blah>
<CN=yadda, DC=yadda, DC=yadda>
<CN=moreblah, OU=moreblah, O=moreblah, C=moreblah>
<CN=moreyada, OU=moreyada, O=moreyada, C=moreyada>
... the rest of the request
*** ServerHelloDone

4. Cadena de certificados del cliente Este es el certificado que el cliente envía al servidor.

*** Certificate chain
chain [0] = [
[
  Version: V3
  Subject: EMAILADDRESS=client's email, CN=client, OU=client's ou, O=client's Org, L=client's location, ST=client's state, C=client's Country
  Signature Algorithm: SHA1withRSA, OID = 1.2.840.113549.1.1.5
  ... the rest of the certificate
*** ClientKeyExchange, RSA PreMasterSecret, TLSv1    
... key exchange info 

Si no hay un certificado en la cadena y el servidor lo requiere, obtendrá el error de protocolo de enlace aquí. Una causa probable es que no se encontró la ruta a su certificado.

5. Verificación del certificado El cliente le pide al servidor que verifique el certificado

*** CertificateVerify
... payload of verify check

Este paso solo ocurrirá si está enviando un certificado.

6. Terminado El servidor responderá con una respuesta de verificación

*** Finished
verify_data:  { 345, ... }
Bergantín
fuente
En mi caso, parece que todos los pasos están bien, pero aún así aparece el error de apretón de manos.
tibi
Muy buena respuesta ... pero todo esto está bien en mi falla de apretón de manos, pero aún tengo la falla. ¿podrías echar un vistazo a mi pregunta similar?
tibi
No presentar un certificado de cliente no es ningún tipo de error en TLS. Si el servidor requiere un certificado de cliente y no se presenta uno, cerrará la conexión.
Marqués de Lorne
@EJP es cierto, no es un error en TLS, sin embargo, la conexión fallida aparece como un error en el Código Java.
Brig
1
@Brig Pero no como una alerta, que es lo que dice esta respuesta, y de qué se trata la pregunta.
Marqués de Lorne
15

No creo que esto resuelva el problema al primer interlocutor, pero para los googlers que vienen aquí para obtener respuestas:


En la actualización 51, Java 1.8 prohíbe [1] los cifrados RC4 de forma predeterminada, como podemos ver en la página Notas de la versión:

Corrección de errores: Prohibir conjuntos de cifrado RC4

RC4 ahora se considera una cifra comprometida.

Los conjuntos de cifrado RC4 se han eliminado de la lista de conjuntos de cifrado habilitados por defecto tanto del cliente como del servidor en la implementación de Oracle JSSE. Estos conjuntos de cifrado todavía se pueden habilitar SSLEngine.setEnabledCipherSuites()y SSLSocket.setEnabledCipherSuites()métodos. Ver JDK-8077109 (no público).

Si su servidor tiene una fuerte preferencia por este cifrado (o usa solo este cifrado), esto puede desencadenar un handshake_failurejava.

Puede probar la conexión al servidor habilitando los cifrados RC4 (primero, intente sin enabledargumentos para ver si desencadena a handshake_failure, luego configure enabled:

import javax.net.ssl.SSLSocket;
import javax.net.ssl.SSLSocketFactory;
import java.io.*;

import java.util.Arrays;

/** Establish a SSL connection to a host and port, writes a byte and
 * prints the response. See
 * http://confluence.atlassian.com/display/JIRA/Connecting+to+SSL+services
 */
public class SSLRC4Poke {
    public static void main(String[] args) {
        String[] cyphers;
        if (args.length < 2) {
            System.out.println("Usage: "+SSLRC4Poke.class.getName()+" <host> <port> enable");
            System.exit(1);
        }
        try {
            SSLSocketFactory sslsocketfactory = (SSLSocketFactory) SSLSocketFactory.getDefault();
            SSLSocket sslsocket = (SSLSocket) sslsocketfactory.createSocket(args[0], Integer.parseInt(args[1]));
        
            cyphers = sslsocketfactory.getSupportedCipherSuites();
            if (args.length ==3){
                sslsocket.setEnabledCipherSuites(new String[]{
                    "SSL_DH_anon_EXPORT_WITH_RC4_40_MD5",
                    "SSL_DH_anon_WITH_RC4_128_MD5",
                    "SSL_RSA_EXPORT_WITH_RC4_40_MD5",
                    "SSL_RSA_WITH_RC4_128_MD5",
                    "SSL_RSA_WITH_RC4_128_SHA",
                    "TLS_ECDHE_ECDSA_WITH_RC4_128_SHA",
                    "TLS_ECDHE_RSA_WITH_RC4_128_SHA",
                    "TLS_ECDH_ECDSA_WITH_RC4_128_SHA",
                    "TLS_ECDH_RSA_WITH_RC4_128_SHA",
                    "TLS_ECDH_anon_WITH_RC4_128_SHA",
                    "TLS_KRB5_EXPORT_WITH_RC4_40_MD5",
                    "TLS_KRB5_EXPORT_WITH_RC4_40_SHA",
                    "TLS_KRB5_WITH_RC4_128_MD5",
                    "TLS_KRB5_WITH_RC4_128_SHA"
                });     
            }

            InputStream in = sslsocket.getInputStream();
            OutputStream out = sslsocket.getOutputStream();

            // Write a test byte to get a reaction :)
            out.write(1);

            while (in.available() > 0) {
                System.out.print(in.read());
            }
            System.out.println("Successfully connected");

        } catch (Exception exception) {
            exception.printStackTrace();
        }
    }
}

1 - https://www.java.com/en/download/faq/release_changes.xml

motobói
fuente
10

Tengo este error mientras intentaba usar JDK 1.7. Cuando actualicé mi JDK a jdk1.8.0_66, todo comenzó a funcionar bien.

Entonces, la solución más simple para este problema podría ser: actualice su JDK y podría comenzar a funcionar bien.

Maxim Votyakov
fuente
44
Agradable. La solución más simple es actualizar JDK? : D ¿Sabes lo complicado que puede ser dependiendo del entorno donde se está haciendo eso? Supongamos que Amazon ejecutó JDK 7 y ahora necesitaría actualizar a JDK 8 de repente ... ¡Genial!
Arturas M
1
Una simple actualización de versión menor resolvió este problema para mí ... de JDK 11.0.1 a 11.0.6
Clint
4

En mi caso, el certificado se importa, el error permanece, esto se solucionó agregando System.setProperty("https.protocols", "TLSv1.2,TLSv1.1,SSLv3");antes de conectar

molly gu
fuente
Trabajó para mí en Java 1.8. Gracias :)
Supun Amarasinghe
3

Suponiendo que está utilizando los protocolos SSL / TLS adecuados, configuró correctamente su keyStorey trustStorey confirmó que no existen problemas con los certificados en sí, es posible que deba fortalecer sus algoritmos de seguridad .

Como se menciona en la respuesta de Vineet , una posible razón por la que recibe este error se debe a que se utilizan conjuntos de cifrado incompatibles. Al actualizar my local_policyand US_export_policyjars en la securitycarpeta de mi JDK con los proporcionados en Java Cryptography Extension (JCE) , pude completar el apretón de manos con éxito.

heez
fuente
2

Hoy encuentro el mismo problema con el cliente OkHttp para OBTENER una URL basada en https. Fue causado por la versión del protocolo Https y la falta de coincidencia del método Cipher entre el lado del servidor y el lado del cliente .

1) verifique la versión del protocolo https de su sitio web y el método de cifrado.

openssl>s_client -connect your_website.com:443 -showcerts

Obtendrá mucha información detallada, la información clave se enumera de la siguiente manera:

SSL-Session:
    Protocol  : TLSv1
    Cipher    : RC4-SHA
2) configure su cliente http, por ejemplo, en el caso del cliente OkHttp :
@Test()
public void testHttpsByOkHttp() {
    ConnectionSpec spec = new ConnectionSpec.Builder(ConnectionSpec.MODERN_TLS)
            .tlsVersions(TlsVersion.TLS_1_0) //protocol version
            .cipherSuites(
                    CipherSuite.TLS_RSA_WITH_RC4_128_SHA, //cipher method
                    CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,
                    CipherSuite.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
                    CipherSuite.TLS_DHE_RSA_WITH_AES_128_GCM_SHA256)
            .build();

    OkHttpClient client = new OkHttpClient();
    client.setConnectionSpecs(Collections.singletonList(spec));
    Request request = new Request.Builder().url("https://your_website.com/").build();
    try {
        Response response = client.newCall(request).execute();
        if(response.isSuccessful()){
            logger.debug("result= {}", response.body().string());
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}

Esto conseguirá lo que queremos.

Armstrongya
fuente
2

Encontré un servidor HTTPS que falló de esta manera si mi proceso de cliente Java estaba configurado con

-Djsse.enableSNIExtension=false

La conexión falló handshake_failuredespués de que ServerHellofinalizó correctamente pero antes de que comenzara el flujo de datos.

No había un mensaje de error claro que identificara el problema, el error simplemente parecía

main, READ: TLSv1.2 Alert, length = 2
main, RECV TLSv1.2 ALERT:  fatal, handshake_failure
%% Invalidated:  [Session-3, TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384]
main, called closeSocket()
main, handling exception: javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure

Aislé el problema intentando con y sin la -Djsse.enableSNIExtension=falseopción " "

Rico
fuente
Recibo el mismo error al conectarme al sandbox de GDAX, ¿alguna solución para esto?
Nitin Vavdiya
1

El mío fue un TLSerror de versión incompatible.

Anteriormente lo TLSv1cambié, TLSV1.2esto resolvió mi problema.

Ali786
fuente
1

Estoy usando el cliente http com.google.api. Cuando me comunico con un sitio interno de la empresa, tengo este problema cuando utilizo https por error, en lugar de http.

main, READ: TLSv1.2 Alert, length = 2
main, RECV TLSv1.2 ALERT:  fatal, handshake_failure
main, called closeSocket()
main, handling exception: javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
main, IOException in getSession():  javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
main, called close()
main, called closeInternal(true)
262 [main] DEBUG org.apache.http.impl.conn.DefaultClientConnection  - Connection shut down
main, called close()
main, called closeInternal(true)
263 [main] DEBUG org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager  - Released connection is not reusable.
263 [main] DEBUG org.apache.http.impl.conn.tsccm.ConnPoolByRoute  - Releasing connection [HttpRoute[{s}->https://<I-replaced>]][null]
263 [main] DEBUG org.apache.http.impl.conn.tsccm.ConnPoolByRoute  - Notifying no-one, there are no waiting threads
Exception in thread "main" javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated
    at sun.security.ssl.SSLSessionImpl.getPeerCertificates(SSLSessionImpl.java:431)
    at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:128)
    at org.apache.http.conn.ssl.SSLSocketFactory.connectSocket(SSLSocketFactory.java:339)
    at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:123)
    at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:147)
    at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:108)
    at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:415)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:641)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:576)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:554)
    at com.google.api.client.http.apache.ApacheHttpRequest.execute(ApacheHttpRequest.java:67)
    at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:960)
thebiggestlebowski
fuente
No, no puedes. El servidor no puede enviar una alerta TLS si no está hablando TLS.
Marqués de Lorne
He actualizado mi comentario para mostrar el resultado de mi programa. Esto es real. Le agradecería que elimine el voto negativo.
thebiggestlebowski
Es real, pero no es causado por hablar TLS a un servidor de texto plano. Un servidor de texto sin formato no está hablando TLS, por definición, y por lo tanto no puede recibir una alerta TLS de él, por definición. No tiene ninguna información sobre quién rechazó su respuesta.
Marqués de Lorne
Asumí que rechazaste la votación, disculpa si ese no es el caso. Mi mensaje de error coincide exactamente con el título de esta pregunta. Es un caso de ruta / prueba válido para obtener este mensaje de error y tengo una solución que podría ayudar a otros. Respetuosamente, no creo que importe si es causado por una respuesta de error del servidor TLS o no. Alguien aterrizará aquí desde google y mi respuesta podría ayudar si cometieran el mismo error.
thebiggestlebowski
No he dicho nada sobre tu mensaje de error. Estoy comentando su reclamo incorrecto de que se debe a "usar por error HTTPS en lugar de HTTP". No es, y no puede ser, por razones que he declarado y que no ha abordado de ninguna manera. El uso de HTTP ciertamente hará que desaparezca, obviamente, ya que no hay alertas TLS en texto sin formato, pero no resuelve el problema subyacente.
Marqués de Lorne
1

Tuve un problema similar; la actualización a Apache HTTPClient 4.5.3 lo arregló.

Hazel Troost
fuente
1

Ugg! Esto resultó ser simplemente un problema de versión de Java para mí. Obtuve el error de apretón de manos con JRE 1.6 y todo funcionó perfectamente con JRE 1.8.0_144.

Juan
fuente
0

Descargo de responsabilidad: no sé si la respuesta será útil para muchas personas, solo la comparto porque podría serlo.

Recibí este error al usar Parasoft SOATest para enviar solicitudes XML (SOAP).

El problema era que había seleccionado el alias incorrecto del menú desplegable después de agregar el certificado y autenticarlo.

usuario3251882
fuente
0

En mi caso, el sitio web solo puede usar TLSv1.2. y uso apache httpclient 4.5.6, uso este código e instalo jce para resolver esto (JDK1.7):

jce

jdk7 http://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.html

jdk 8 http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html

código:

SSLContext sslContext = SSLContext.getDefault();

  SSLConnectionSocketFactory sslConnectionFactory = new SSLConnectionSocketFactory(
      sslContext,
      new String[]{"TLSv1.2"}, // important
      null,
      NoopHostnameVerifier.INSTANCE);

  Registry<ConnectionSocketFactory> registry = RegistryBuilder.<ConnectionSocketFactory>create()
      .register("https", sslConnectionFactory)
      .register("http", PlainConnectionSocketFactory.INSTANCE)
      .build();

  HttpClientConnectionManager ccm = new BasicHttpClientConnectionManager(registry);
  httpclient = HttpClientBuilder.create().
      .setSSLSocketFactory(sslConnectionFactory)
      .setConnectionManager(ccm)
      .build();
Tianmu
fuente
0

Para solucionar problemas desde la perspectiva del desarrollador (elemento 1) y del administrador del sistema (elementos 2 y 3):

  1. Habilite la depuración de protocolo de enlace SSL en Java a través de -Djavax.net.debug=ssl:handshake:verbose.
  2. Instale ssldump en el servidor a través de sudo apt install ssldumpo compile desde la fuente siguiendo este enlace si observa Unknown valueen un cifrado cuando ejecuta el siguiente paso.
  3. En el servidor, sudo ssldump -k <your-private-key> -i <your-network-interface>
  4. Verifique el registro sobre la razón real de la falla.

Ejemplo de apretón de manos que no funciona del registro ssldump:

New TCP connection #1: 10.1.68.86(45308) <-> 10.1.68.83(5671)
1 1  0.0111 (0.0111)  C>S  Handshake
      ClientHello
        Version 3.3
        cipher suites
        TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
        TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
        TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
        TLS_RSA_WITH_AES_256_GCM_SHA384
        TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384
        TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384
        TLS_DHE_RSA_WITH_AES_256_GCM_SHA384
        TLS_DHE_DSS_WITH_AES_256_GCM_SHA384
        TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
        TLS_RSA_WITH_AES_128_GCM_SHA256
        TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256
        TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256
        TLS_DHE_RSA_WITH_AES_128_GCM_SHA256
        TLS_DHE_DSS_WITH_AES_128_GCM_SHA256
        TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384
        TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
        TLS_RSA_WITH_AES_256_CBC_SHA256
        TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384
        TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384
        TLS_DHE_RSA_WITH_AES_256_CBC_SHA256
        TLS_DHE_DSS_WITH_AES_256_CBC_SHA256
        TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA
        TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
        TLS_RSA_WITH_AES_256_CBC_SHA
        TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA
        TLS_ECDH_RSA_WITH_AES_256_CBC_SHA
        TLS_DHE_RSA_WITH_AES_256_CBC_SHA
        TLS_DHE_DSS_WITH_AES_256_CBC_SHA
        TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256
        TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
        TLS_RSA_WITH_AES_128_CBC_SHA256
        TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256
        TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256
        TLS_DHE_RSA_WITH_AES_128_CBC_SHA256
        TLS_DHE_DSS_WITH_AES_128_CBC_SHA256
        TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA
        TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
        TLS_RSA_WITH_AES_128_CBC_SHA
        TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA
        TLS_ECDH_RSA_WITH_AES_128_CBC_SHA
        TLS_DHE_RSA_WITH_AES_128_CBC_SHA
        TLS_DHE_DSS_WITH_AES_128_CBC_SHA
        TLS_EMPTY_RENEGOTIATION_INFO_SCSV
        compression methods
                  NULL
1 2  0.0122 (0.0011)  S>C  Alert
    level           fatal
    value           insufficient_security
1    0.0126 (0.0004)  S>C  TCP RST

Ejemplo de saludo exitoso del registro ssldump

New TCP connection #1: 10.1.68.86(56558) <-> 10.1.68.83(8443)
1 1  0.0009 (0.0009)  C>S  Handshake
      ClientHello
        Version 3.3
        cipher suites
        TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
        TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
        TLS_DHE_RSA_WITH_AES_256_GCM_SHA384
        Unknown value 0xcca9
        Unknown value 0xcca8
        Unknown value 0xccaa
        TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
        TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
        TLS_DHE_RSA_WITH_AES_128_GCM_SHA256
        TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384
        TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
        TLS_DHE_RSA_WITH_AES_256_CBC_SHA256
        TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256
        TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
        TLS_DHE_RSA_WITH_AES_128_CBC_SHA256
        TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA
        TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
        TLS_DHE_RSA_WITH_AES_256_CBC_SHA
        TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA
        TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
        TLS_DHE_RSA_WITH_AES_128_CBC_SHA
        TLS_RSA_WITH_AES_256_GCM_SHA384
        TLS_RSA_WITH_AES_128_GCM_SHA256
        TLS_RSA_WITH_AES_256_CBC_SHA256
        TLS_RSA_WITH_AES_128_CBC_SHA256
        TLS_RSA_WITH_AES_256_CBC_SHA
        TLS_RSA_WITH_AES_128_CBC_SHA
        TLS_EMPTY_RENEGOTIATION_INFO_SCSV
        compression methods
                  NULL
1 2  0.0115 (0.0106)  S>C  Handshake
      ServerHello
        Version 3.3
        session_id[0]=

        cipherSuite         TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
        compressionMethod                   NULL
1 3  0.0115 (0.0000)  S>C  Handshake
      Certificate
1 4  0.0115 (0.0000)  S>C  Handshake
      ServerKeyExchange
Not enough data. Found 294 bytes (expecting 32767)
1 5    0.0115   (0.0000)    S>C    Handshake
        ServerHelloDone
1 6    0.0141   (0.0025)    C>S    Handshake
        ClientKeyExchange
Not enough data. Found 31 bytes (expecting 16384)
1 7    0.0141   (0.0000)    C>S    ChangeCipherSpec
1 8    0.0141   (0.0000)    C>S      Handshake
1 9    0.0149   (0.0008)    S>C    Handshake
1 10   0.0149   (0.0000)    S>C    ChangeCipherSpec
1 11   0.0149   (0.0000)    S>C      Handshake

Ejemplo de registro de Java que no funciona

javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.778 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 for TLS11
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.779 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 for TLS11
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.779 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 for TLS11
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.780 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_RSA_WITH_AES_256_GCM_SHA384 for TLS11
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.780 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384 for TLS11
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.780 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384 for TLS11
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.781 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 for TLS11
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.781 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_DHE_DSS_WITH_AES_256_GCM_SHA384 for TLS11
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.781 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 for TLS11
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.782 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_RSA_WITH_AES_128_GCM_SHA256 for TLS11
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.782 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256 for TLS11
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.782 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256 for TLS11
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.782 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 for TLS11
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.783 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_DHE_DSS_WITH_AES_128_GCM_SHA256 for TLS11
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.783 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 for TLS11
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.783 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 for TLS11
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.783 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_RSA_WITH_AES_256_CBC_SHA256 for TLS11
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.783 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384 for TLS11
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.784 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384 for TLS11
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.784 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: T LS_DHE_RSA_WITH_AES_256_CBC_SHA256 for TLS11
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.784 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_DHE_DSS_WITH_AES_256_CBC_SHA256 for TLS11
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.784 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 for TLS10
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.784 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 for TLS10
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.784 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 for TLS10
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.784 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_RSA_WITH_AES_256_GCM_SHA384 for TLS10
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.785 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384 for TLS10
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.785 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384 for TLS10
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.785 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 for TLS10
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.785 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_DHE_DSS_WITH_AES_256_GCM_SHA384 for TLS10
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.785 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 for TLS10
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.785 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_RSA_WITH_AES_128_GCM_SHA256 for TLS10
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.785 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256 for TLS10
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.785 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256 for TLS10
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.786 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 for TLS10
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.786 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_DHE_DSS_WITH_AES_128_GCM_SHA256 for TLS10
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.786 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 for TLS10
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.786 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 for TLS10
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.786 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_RSA_WITH_AES_256_CBC_SHA256 for TLS10
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.786 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384 for TLS10 javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.786 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384 for TLS10
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.786 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 for TLS10
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.787 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_DHE_DSS_WITH_AES_256_CBC_SHA256 for TLS10
javax.net.ssl|WARNING|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.818 MYT|SignatureScheme.java:282|Signature algorithm, ed25519, is not supported by the underlying providers
javax.net.ssl|WARNING|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.818 MYT|SignatureScheme.java:282|Signature algorithm, ed448, is not supported by the underlying providers
javax.net.ssl|ALL|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.822 MYT|SignatureScheme.java:358|Ignore disabled signature sheme: rsa_md5
javax.net.ssl|INFO|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.822 MYT|AlpnExtension.java:161|No available application protocols
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.823 MYT|SSLExtensions.java:256|Ignore, context unavailable extension: application_layer_protocol_negotiation
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.823 MYT|SSLExtensions.java:256|Ignore, context unavailable extension: renegotiation_info
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.825 MYT|ClientHello.java:651|Produced ClientHello handshake message (
"ClientHello": {
  "client version"      : "TLSv1.2",
  "random"              : "FB BC CD 7C 17 65 86 49 3E 1C 15 37 24 94 7D E7 60 44 1B B8 F4 18 21 D0 E1 B1 31 0D E1 80 D6 A7",
  "session id"          : "",
  "cipher suites"       : "[TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384(0xC02C), TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256(0xC02B), TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384(0xC030), TLS_RSA_WITH_AES_256_GCM_SHA384(0x009D), TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384(0xC02E), TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384(0xC032), TLS_DHE_RSA_WITH_AES_256_GCM_SHA384(0x009F), TLS_DHE_DSS_WITH_AES_256_GCM_SHA384(0x00A3), TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256(0xC02F), TLS_RSA_WITH_AES_128_GCM_SHA256(0x009C), TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256(0xC02D), TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256(0xC031), TLS_DHE_RSA_WITH_AES_128_GCM_SHA256(0x009E), TLS_DHE_DSS_WITH_AES_128_GCM_SHA256(0x00A2), TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384(0xC024), TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384(0xC028), TLS_RSA_WITH_AES_256_CBC_SHA256(0x003D), TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384(0xC026), TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384(0xC02A), TLS_DHE_RSA_WITH_AES_256_CBC_SHA256(0x006B), TLS_DHE_DSS_WITH_AES_256_CBC_SHA256(0x006A), TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA(0xC00A), TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA(0xC014), TLS_RSA_WITH_AES_256_CBC_SHA(0x0035), TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA(0xC005), TLS_ECDH_RSA_WITH_AES_256_CBC_SHA(0xC00F), TLS_DHE_RSA_WITH_AES_256_CBC_SHA(0x0039), TLS_DHE_DSS_WITH_AES_256_CBC_SHA(0x0038), TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256(0xC023), TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256(0xC027), TLS_RSA_WITH_AES_128_CBC_SHA256(0x003C), TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256(0xC025), TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256(0xC029), TLS_DHE_RSA_WITH_AES_128_CBC_SHA256(0x0067), TLS_DHE_DSS_WITH_AES_128_CBC_SHA256(0x0040), TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA(0xC009), TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA(0xC013), TLS_RSA_WITH_AES_128_CBC_SHA(0x002F), TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA(0xC004), TLS_ECDH_RSA_WITH_AES_128_CBC_SHA(0xC00E), TLS_DHE_RSA_WITH_AES_128_CBC_SHA(0x0033), TLS_DHE_DSS_WITH_AES_128_CBC_SHA(0x0032), TLS_EMPTY_RENEGOTIATION_INFO_SCSV(0x00FF)]",
  "compression methods" : "00",  "extensions"          : [
    "server_name (0)": {
      type=host_name (0), value=mq.tpc-ohcis.moh.gov.my
    },
    "status_request (5)": {
      "certificate status type": ocsp
      "OCSP status request": {
        "responder_id": <empty>
        "request extensions": {
          <empty>
        }
      }
    },
    "supported_groups (10)": {
      "versions": [secp256r1, secp384r1, secp521r1, sect283k1, sect283r1, sect409k1, sect409r1, sect571k1, sect571r1, secp256k1, ffdhe2048, ffdhe3072, ffdhe4096, ffdhe6144, ffdhe8192]
    },
    "ec_point_formats (11)": {
      "formats": [uncompressed]
    },
    "signature_algorithms (13)": {
      "signature schemes": [ecdsa_secp256r1_sha256, ecdsa_secp384r1_sha384, ecdsa_secp512r1_sha512, rsa_pss_rsae_sha256, rsa_pss_rsae_sha384, rsa_pss_rsae_sha512, rsa_pss_pss_sha256, rsa_pss_pss_sha384, rsa_pss_pss_sha512, rsa_pkcs1_sha256, rsa_pkcs1_sha384, rsa_pkcs1_sha512, dsa_sha256, ecdsa_sha224, rsa_sha224, dsa_sha224, ecdsa_sha1, rsa_pkcs1_sha1, dsa_sha1]
    },
    "signature_algorithms_cert (50)": {
      "signature schemes": [ecdsa_secp256r1_sha256, ecdsa_secp384r1_sha384, ecdsa_secp512r1_sha512, rsa_pss_rsae_sha256, rsa_pss_rsae_sha384, rsa_pss_rsae_sha512, rsa_pss_pss_sha256, rsa_pss_pss_sha384, rsa_pss_pss_sha512, rsa_pkcs1_sha256, rsa_pkcs1_sha384, rsa_pkcs1_sha512, dsa_sha256, ecdsa_sha224, rsa_sha224, dsa_sha224, ecdsa_sha1, rsa_pkcs1_sha1, dsa_sha1]
    },
    "status_request_v2 (17)": {
      "cert status request": {
        "certificate status type": ocsp_multi
        "OCSP status request": {
          "responder_id": <empty>
          "request extensions": {
            <empty>
          }
        }      }
    },
    "extended_master_secret (23)": {
      <empty>
    },
    "supported_versions (43)": {
      "versions": [TLSv1.2, TLSv1.1, TLSv1]
    }
  ]
}
)
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.829 MYT|Alert.java:238|Received alert message (
"Alert": {
  "level"      : "fatal",
  "description": "insufficient_security"
}
)
Lee Chee Kiam
fuente
0

En mi caso tuve un problema con la versión 1.1. Estaba reproduciendo el problema fácilmente con curl. El servidor no admitía versiones inferiores a TLS1.2.

Este problema de apretón de manos recibido:

curl --insecure --tlsv1.1 -i https://youhost --noproxy "*"

Con la versión 1.2 funcionaba bien:

curl --insecure --tlsv1.2 -i https://youhost --noproxy "*"

El servidor estaba ejecutando un Weblogic, y al agregar este argumento en setEnvDomain.sh, funcionó con TLSv1.1:

-Dweblogic.security.SSL.minimumProtocolVersion=TLSv1.1
Ravenskater
fuente
0

Este problema se produce debido a la versión de Java. Estaba usando 1.8.0.231 JDK y obtengo este error. He degradado mi versión de Java de 1.8.0.231 a 1.8.0.171, ahora funciona bien.

hariom gupta
fuente