¿Mensaje SSL no reconocido, conexión de texto sin formato? Excepción

172

Tengo un paquete compatible con Java para hablar con el servidor https en la red. Ejecutar la compilación da la siguiente excepción:

javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?
    at com.sun.net.ssl.internal.ssl.InputRecord.handleUnknownRecord(Unknown Source)
at com.sun.net.ssl.internal.ssl.InputRecord.read(Unknown Source)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(Unknown Source)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(Unknown Source)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(Unknown Source)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(Unknown Source)
at sun.net.www.protocol.https.HttpsClient.afterConnect(Unknown Source)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(Unknown Source)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.connect(Unknown Source)

Creo que esto se debe a que la conexión establecida con la máquina cliente no es segura. ¿Hay alguna forma de configurar la máquina o los puertos locales para conectarse al servidor https remoto?

karthi
fuente

Respuestas:

239

Creo que esto se debe a que la conexión establecida con la máquina cliente no es segura.

Se debe al hecho de que está hablando con un servidor HTTP, no con un servidor HTTPS. Probablemente no utilizó el número de puerto correcto para HTTPS.

Marqués de Lorne
fuente
77
Tengo el mismo error y resolví cuando comencé a usar http en lugar de https. Pero cuando coloco el enlace en el navegador con https, ¡funciona! Y necesito realizar una consulta segura. ¿Alguna idea sobre cómo puedo resolver el problema?
ccoutinho
9
@rsy Cuando 'colocaste el enlace ... con https', el navegador habría cambiado al puerto 443 por ti. Puedes hacer lo mismo tú mismo. Indeed lo HttpURLConnectionhará automáticamente por usted, si no especifica un puerto en absoluto.
Marqués de Lorne
Supongo que puede configurar cualquier puerto en su servidor para que sea HTTPS, ¿no tiene que ser un puerto específico?
1
@KarlSherwin Puede ser cualquier puerto que desee, sujeto a reservas, pero si no es 443, tendrá que cargarlo a su alrededor en todas sus URL.
Marqués de Lorne
18
javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?

Debe tener un nombre de dominio SMTP local que se pondrá en contacto con el servidor de correo y establecerá una nueva conexión, también debe cambiar la propiedad SSL en su programación a continuación

javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection

 props.put("mail.smtp.socketFactory.fallback", "true"); // Should be true
Thobith
fuente
10
Él está hablando HTTPS, no SMTP. -1
Marqués de Lorne
2
En mi caso eso funcionó, gracias! javax.mail.MessagingException: no se pudo conectar al host SMTP: mail.livemusicgo.com, puerto: 25; la excepción anidada es: javax.net.ssl.SSLException: ¿Mensaje SSL no reconocido, conexión de texto sin formato?
surfealokesea
1
@surfealokesea La pregunta es sobre HTTP y HTTPS, y una respuesta o una experiencia personal sobre SMTP no es relevante.
Marqués de Lorne
1
Sí, pero esto no es solo para él, es para otros usuarios que tienen este mismo 'mensaje ssl no reconocido'. +1 para ti, Thobith
sam1370
9

Recibí el mismo mensaje de error cuando olvidé iniciar sesión en el firewall de la compañía, antes de realizar una solicitud POST a través de un proxy.

Arrendajo
fuente
¡Tenía que hacer lo mismo aunque estaba dentro de la empresa!
MonoThreaded
1
¿podría explicarme brevemente cómo resolverlo? Yo también enfrento el mismo problema en mi empresa ahora mismo
Nitesh
3

Tengo el mismo error. fue porque estaba accediendo al puerto https usando http .. El problema se resolvió cuando cambié http a https.

Soumyajit Swain
fuente
11
No, recibió el error al acceder al puerto HTTP a través de HTTPS. Lee el mensaje de error. Se conectó a un objetivo de texto sin formato. La situación que describió no habría causado una excepción SSLE, ya que no habría estado utilizando SSL.
Marqués de Lorne
1

Me enfrento al mismo problema con la aplicación Java integrada en Jdevelopr 11.1.1.7 IDE. Resolví el problema desmarcando el uso de las propiedades del proyecto de formulario proxy.

Puede encontrarlo en lo siguiente: Propiedades del proyecto -> (desde el panel izquierdo) Ejecutar / Depurar / Perfil -> Haga clic (editar) en el panel derecho -> Configuración de herramienta desde el panel izquierdo -> desactive la opción (Usar proxy).

Salman
fuente
1

Agregar esto como respuesta, ya que podría ayudar a alguien más tarde.

Tuve que forzar a jvm a usar la pila IPv4 para resolver el error. Mi aplicación solía funcionar dentro de la red de la empresa, pero mientras se conectaba desde casa daba la misma excepción. No hay proxy involucrado. Se agregó el argumento jvm -Djava.net.preferIPv4Stack=truey todas las httpssolicitudes se comportaron normalmente.

basiljames
fuente
1

Si está ejecutando local usando Spring, le sugiero que use:

@Bean
public AmazonDynamoDB amazonDynamoDB() throws IOException {
    return AmazonDynamoDBClientBuilder.standard()
            .withCredentials(
                    new AWSStaticCredentialsProvider(
                            new BasicAWSCredentials("fake", "credencial")
                    )
            )
            .withClientConfiguration(new ClientConfigurationFactory().getConfig().withProtocol(Protocol.HTTP))
            .withEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration("localhost:8443", "central"))
            .build();
}

A mí me funciona usando la prueba unitaria.

Espero que sea de ayuda!

Henrique
fuente
0

Funcionó para mí ahora, he cambiado la configuración de mi cuenta de Google de la siguiente manera:

        System.out.println("Start");
        final String username = "[email protected]";
        final String password = "************";

        Properties props = new Properties();
        props.put("mail.smtp.auth", "true");
        props.put("mail.smtp.host", "smtp.gmail.com");
        props.put("mail.smtp.port", "465");
        props.put("mail.transport.protocol", "smtp");
        props.put("mail.smtp.starttls.enable", "true");
        props.put("mail.smtp.starttls.enable", "true");
        props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");

         Session session = Session.getInstance(props,
                  new javax.mail.Authenticator() {
                    protected PasswordAuthentication getPasswordAuthentication() {
                        return new PasswordAuthentication(username, password);
                    }
                  });


        try {
            Transport transport=session.getTransport();
            Message message = new MimeMessage(session);
            message.setFrom(new InternetAddress("[email protected]"));//formBean.getString("fromEmail")
            message.setRecipients(Message.RecipientType.TO,InternetAddress.parse("[email protected]"));
            message.setSubject("subject");//formBean.getString(
            message.setText("mailBody");
            transport.connect();
            transport.send(message, InternetAddress.parse("[email protected]"));//(message);

            System.out.println("Done");

        } catch (MessagingException e) {
            System.out.println("e="+e);
            e.printStackTrace();
            throw new RuntimeException(e);

        }

Aunque he habilitado SSL y TSL mientras ejecuto el programa en este enlace de la misma publicación. Paso mucho tiempo pero me di cuenta y encontré este enlace. Y hecho 2 pasos siguientes y control de configuración en google. :

  • Deshabilite la verificación en dos pasos (contraseña y OTP)

  • Habilitación para permitir el acceso a aplicaciones menos seguras ( Permitir aplicaciones menos seguras: ON ) .

Ahora puedo enviar correos usando el programa anterior.

Laxman G
fuente
3
La pregunta es sobre HTTPS.
Marqués de Lorne
0

Como dijo EJP, es un mensaje que se muestra debido a una llamada a un protocolo que no es https. Si está seguro de que es HTTPS, verifique la configuración del proxy de omisión y, en caso de que agregue la URL del host del servicio web a la lista de proxy de omisión

Fabrizio Stellato
fuente
0

si la conexión es la prueba FTPS:

FTPSClient ftpClient = nuevo FTPSClient (protocolo, falso);

protocolo = TLS, SSL y falso = isImplicit.

Faxon
fuente
0

Estaba enfrentando esta excepción cuando usaba Gmail.

Para usar Gmail tuve que activar "Permitir aplicaciones menos seguras" .

Esta configuración de Gmail se puede encontrar en https://www.google.com/settings/security/lesssecureapps después de iniciar sesión en la cuenta de gmail.

Jose1755
fuente
0

AQUÍ UNA RESPUESTA MUY IMPORTANTE:

Simplemente cambie la cadena de URL de su API (en su método) de https a http .. Esto también podría ser la causa:

client.resource("http://192.168.0.100:8023/jaxrs/tester/tester");

en vez de

client.resource("https://192.168.0.100:8023/jaxrs/tester/tester");
Dan Ortega
fuente
-1

Recibí el mismo problema y se resolvió configurando "proxyUser" y "proxyPassword" en las propiedades del sistema.

System.setProperty("http.proxyUser", PROXY_USER);
System.setProperty("http.proxyPassword", PROXY_PASSWORD);

junto con "proxyHost" y "proxyPort"

System.setProperty("http.proxyHost", PROXY_ADDRESS);
System.setProperty("http.proxyPort", PROXY_PORT);

Espero que funcione.

Anil Kumar
fuente
Funcionará si está utilizando el cliente HTTP Apache y obtuvo una excepción de autorización. Será no trabajar para resolver el problema planteado por la OP.
Marqués de Lorne
-1

Resolví mi problema usando el puerto 25 y siguiendo el accesorio

mailSender.javaMailProperties.putAll([
                "mail.smtp.auth": "true",
                "mail.smtp.starttls.enable": "false",
                "mail.smtp.ssl.enable": "false",
                "mail.smtp.socketFactory.fallback": "true",
        ]);
srsajid
fuente
-1

En caso de que estés corriendo

  • Agente de movilidad segura de Cisco AnyConnect
  • Agente de seguridad web de Cisco AnyConnect

intente detener los servicios.

No estoy seguro de por qué obtuve un voto negativo por esta respuesta. En nuestra red corporativa, esta es la solución al problema.

rob2universe
fuente
-1

Tengo un error similar al usar el componente de correo de camello para enviar correos electrónicos por gmail smtp.

La solución estaba cambiando del puerto TLS (587) al puerto SSL (465) de la siguiente manera:

<route id="sendMail">
  <from uri="jason:toEmail"/>
  <convertBodyTo type="java.lang.String"/>
  <setHeader headerName="Subject"><constant>Something</constant></setHeader>
  <to uri="smtps://smtp.gmail.com:[email protected]&amp;password=mypw&amp;[email protected]&amp;debugMode=true&amp;mail.smtp.starttls.enable=true"/>
</route>
Cleber Jorge Amaral
fuente
No, la solución estaba cambiando a un puerto de texto sin formato .
Marqués de Lorne
-2

Si está ejecutando el proceso Java desde la línea de comandos en Java 6 o anterior, agregar este interruptor resolvió el problema anterior para mí:

-Dhttps.protocols = "TLSv1"

MarkL
fuente
-3

Tal vez su certificado predeterminado ha expirado. para renovarlo a través de la consola de administración, vaya a "Seguridad> Certificado SSL y administración de claves> Almacenes de claves y certificados> NodeDefaultKeyStore> Certificados personales", seleccione el alias "predeterminado" y haga clic en "renovar" después de reiniciar WAS.

Mithat Bozkurt
fuente
1
Un certificado caducado no causa esta excepción.
Marqués de Lorne
-3

Otra razón es tal vez "acceso denegado", tal vez no pueda acceder al URI y reciba la página de respuesta de bloqueo para el acceso a la red interna. Si no está seguro de que su zona de aplicación necesita una regla de firewall, intente conectarse desde la terminal, línea de comando. Para GNU / Linux o Unix, puede intentar ejecutar este comando y ver que el resultado proviene de una regla de bloqueo o una dirección realmente remota:echo | nc -v yazilimcity.net 443

oguzhankinik
fuente
Si recibió algún tipo de página, la parte SSL funcionaba perfectamente y no habría obtenido la excepción citada por el OP.
Marqués de Lorne
No estoy recibiendo ningún tipo de página de la parte SSL, recibí una respuesta HTTP de red interna en esa página preparada especial. Para este escenario, estoy accediendo a la página HTTP a través de la solicitud HTTPS, así que recibí esta excepción. Después de que la regla de red cambia, esta excepción también se resuelve automáticamente.
oguzhankinik