Message SSL non reconnu, connexion en clair? Exception


172

J'ai un package java conforme pour parler avec le serveur https sur le net. L'exécution de la compilation donne l'exception suivante:

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)

Je pense que cela est dû au fait que la connexion établie avec la machine cliente n'est pas sécurisée. Existe-t-il un moyen de configurer la machine ou les ports locaux afin de se connecter au serveur https distant?

Réponses:


239

Je pense que cela est dû au fait que la connexion établie avec la machine cliente n'est pas sécurisée.

Cela est dû au fait que vous parlez à un serveur HTTP, pas à un serveur HTTPS. Vous n'avez probablement pas utilisé le numéro de port correct pour HTTPS.


7
J'ai la même erreur, et j'ai résolu quand j'ai commencé à utiliser http au lieu de https. Mais quand je place le lien dans le navigateur avec https, cela fonctionne! Et j'ai besoin d'effectuer une requête sûre. Une idée sur la façon de résoudre le problème?
ccoutinho

9
@rsy Lorsque vous avez "placé le lien ... avec https", le navigateur aurait changé pour le port 443 pour vous. Vous pouvez faire la même chose vous-même. Indeed le HttpURLConnectionfera automatiquement pour vous, si vous ne spécifiez pas du tout de port.
Marquis of Lorne le

Je suppose que vous pouvez configurer n'importe quel port de votre serveur pour être HTTPS, il ne doit pas être un port spécifique?

1
@KarlSherwin Cela peut être n'importe quel port que vous aimez, sous réserve de réservations, mais si ce n'est pas le 443, vous devrez le cadrer autour de vous dans toutes vos URL.
Marquis de Lorne

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

Vous devez avoir un nom de domaine SMTP local qui contactera le serveur de messagerie et établira une nouvelle connexion.Vous devez également modifier la propriété SSL dans votre programmation ci-dessous

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

 props.put("mail.smtp.socketFactory.fallback", "true"); // Should be true

10
Il parle HTTPS, pas SMTP. -1
Marquis of Lorne

2
Dans mon cas, cela a fonctionné, merci! javax.mail.MessagingException: impossible de se connecter à l'hôte SMTP: mail.livemusicgo.com, port: 25; l'exception imbriquée est: javax.net.ssl.SSLException: message SSL non reconnu, connexion en texte brut?
surfealokesea

1
@surfealokesea La question concerne HTTP et HTTPS, et une réponse ou une expérience personnelle sur SMTP n'est pas pertinente.
Marquis of Lorne

1
Oui, mais ce n'est pas seulement pour lui, c'est pour les autres utilisateurs qui ont ce même «message ssl non reconnu». +1 à vous, Thobith
sam1370

9

J'ai reçu le même message d'erreur lorsque j'ai oublié de me connecter au pare-feu de l'entreprise, avant d'effectuer une requête POST via un proxy.


J'ai dû faire de même alors que j'étais à l'intérieur de l'entreprise!
MonoThreaded

1
pouvez-vous s'il vous plaît expliquer en bref comment résoudre, moi aussi confronté au même problème dans mon entreprise juste ow
Nitesh

3

J'ai eu la même erreur. c'était parce que j'accédais au port https en utilisant http .. Le problème résolu lorsque j'ai changé http en https.


11
Non, vous avez l'erreur lors de l'accès au port HTTP via HTTPS. Lisez le message d'erreur. Vous vous êtes connecté à une cible en texte brut. La situation que vous avez décrite n'aurait pas provoqué d'exception SSLException, car vous n'auriez pas utilisé SSL.
Marquis of Lorne

1

Je suis confronté au même problème avec l'application Java intégrée à l'IDE Jdevelopr 11.1.1.7. J'ai résolu le problème en décochant l'utilisation des propriétés du projet du formulaire de procuration.

Vous pouvez le trouver dans ce qui suit: Propriétés du projet -> (à partir du panneau de gauche) Exécuter / Déboguer / Profil -> Cliquez sur (modifier) ​​dans le panneau de droite -> Paramètres d'outil dans le panneau de gauche -> décochez l'option (Utiliser un proxy).


1

Ajouter ceci comme réponse car cela pourrait aider quelqu'un plus tard.

J'ai dû forcer jvm à utiliser la pile IPv4 pour résoudre l'erreur. Mon application fonctionnait au sein du réseau de l'entreprise, mais lors de la connexion depuis la maison, elle donnait la même exception. Aucun proxy impliqué. Ajout de l'argument jvm -Djava.net.preferIPv4Stack=trueet toutes les httpsrequêtes se comportaient normalement.


1

Si vous exécutez localement avec Spring, je suggérerais d'utiliser:

@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();
}

Cela fonctionne pour moi en utilisant le test unitaire.

J'espère que ça aide!


0

Cela a fonctionné pour moi maintenant, j'ai modifié les paramètres de mon compte Google comme ci-dessous:

        System.out.println("Start");
        final String username = "myemail@gmail.com";
        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("myemail@gmail.com"));//formBean.getString("fromEmail")
            message.setRecipients(Message.RecipientType.TO,InternetAddress.parse("myemail@gmail.com"));
            message.setSubject("subject");//formBean.getString(
            message.setText("mailBody");
            transport.connect();
            transport.send(message, InternetAddress.parse("myemail@gmail.com"));//(message);

            System.out.println("Done");

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

        }

Bien que j'ai activé SSL et TSL lors de l'exécution du programme dans ce lien du même message. Je passe beaucoup de temps mais je m'en suis rendu compte et j'ai trouvé ce lien. Et fait 2 étapes suivantes et réglage du contrôle dans Google. :

  • Désactivez la vérification en 2 étapes (mot de passe et OTP)

  • Activation pour autoriser l'accès à une application moins sécurisée ( Autoriser les applications moins sécurisées: ACTIVÉ. )

Maintenant, je peux envoyer du courrier en utilisant le programme ci-dessus.


3
La question concerne HTTPS.
Marquis of Lorne

0

Comme l'a dit EJP, c'est un message affiché en raison d'un appel à un protocole non-https. Si vous êtes sûr qu'il s'agit du HTTPS, vérifiez vos paramètres de contournement de proxy et, au cas où vous seriez, ajoutez l'URL de l'hôte de votre service Web à la liste de contournement de proxy.


0

si la connexion est un test FTPS:

FTPSClient ftpClient = nouveau FTPSClient (protocole, faux);

protocol = TLS, SSL et false = isImplicit.



0

VOICI UNE RÉPONSE TRÈS IMPORTANTE:

Il vous suffit de changer la chaîne d'URL de votre API (dans votre méthode) de https à http. Cela pourrait également être la cause:

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

au lieu de

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

-1

J'ai eu le même problème et il a été résolu en définissant "proxyUser" et "proxyPassword" dans les propriétés système.

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

avec "proxyHost" et "proxyPort"

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

J'espère que cela fonctionnera.


Cela fonctionnera si vous utilisez le client HTTP Apache et que vous avez une exception d'autorisation. Cela ne fonctionnera pas pour résoudre le problème indiqué par l'OP.
Marquis of Lorne

-1

J'ai résolu mon problème en utilisant le port 25 et l'accessoire suivant

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

-1

Au cas où vous courriez

  • Agent de mobilité sécurisée Cisco AnyConnect
  • Agent de sécurité Web Cisco AnyConnect

essayez d'arrêter le (s) service (s).

Je ne sais pas pourquoi j'ai obtenu un vote négatif pour cette réponse. Dans notre réseau d'entreprise, c'est la solution au problème.


-1

J'ai eu une erreur similaire en utilisant le composant camel-mail pour envoyer des e-mails par gmail smtp.

La solution changeait du port TLS (587) au port SSL (465) comme ci-dessous:

<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:465?username=myemail@gmail.com&amp;password=mypw&amp;to=someemail@gmail.com&amp;debugMode=true&amp;mail.smtp.starttls.enable=true"/>
</route>

Non, la solution passait à un port en texte brut .
Marquis of Lorne

-2

Si vous exécutez le processus Java à partir de la ligne de commande sur Java 6 ou une version antérieure, l'ajout de ce commutateur a résolu le problème ci-dessus pour moi:

-Dhttps.protocols = "TLSv1"


-3

Peut-être que votre certificat par défaut a expiré. pour le renouveler via la console d'administration allez "Sécurité> Certificat SSL et gestion des clés> Magasins de clés et certificats> NodeDefaultKeyStore> Certificats personnels" sélectionnez l'alias "par défaut" et cliquez sur "renouveler" puis redémarrez WAS.


1
Un certificat expiré ne provoque pas cette exception.
Marquis of Lorne

-3

Une autre raison est peut-être «accès refusé», peut-être que vous ne pouvez pas accéder à l'URI et à la page de réponse de blocage reçue pour l'accès au réseau interne. Si vous n'êtes pas sûr que votre zone d'application ait besoin d'une règle de pare-feu, vous essayez de vous connecter à partir du terminal, en ligne de commande. Pour GNU / Linux ou Unix, vous pouvez essayer d'exécuter comme cette commande et voir le résultat provient d'une règle de blocage ou d'une adresse vraiment distante:echo | nc -v yazilimcity.net 443


Si vous aviez reçu une page quelconque, la partie SSL fonctionnait parfaitement et vous n'auriez pas obtenu l'exception citée par l'OP.
Marquis of Lorne

Je ne reçois aucun type de page de la partie SSL, j'ai reçu une réponse HTTP du réseau interne cette page préparée spéciale. Pour ce scénario, j'accède à la page HTTP via une requête HTTPS, j'ai donc reçu cette exception. Une fois la règle réseau modifiée, cette exception s'est également résolue automatiquement.
oguzhankinik
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.