Messaggio SSL non riconosciuto, connessione in chiaro? Eccezione


172

Ho un pacchetto conforme a Java per parlare con il server HTTPS in rete. L'esecuzione della compilazione fornisce la seguente eccezione:

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)

Penso che ciò sia dovuto al fatto che la connessione stabilita con la macchina client non è sicura. Esiste un modo per configurare la macchina o le porte locali per connettersi al server https remoto?

Risposte:


239

Penso che ciò sia dovuto al fatto che la connessione stabilita con la macchina client non è sicura.

È dovuto al fatto che stai parlando con un server HTTP, non con un server HTTPS. Probabilmente non hai usato il numero di porta corretto per HTTPS.


7
Ho lo stesso errore e ho risolto quando ho iniziato a utilizzare http anziché https. Ma quando inserisco il link nel browser con https funziona! E ho bisogno di eseguire una query sicura. Qualche idea su come posso risolvere il problema?
ccoutinho,

9
@rsy Quando hai 'inserito il link ... con https' il browser sarebbe cambiato per te sulla porta 443. Puoi fare lo stesso da solo. Indeed lo HttpURLConnectionfarà automaticamente per te, se non specifichi affatto una porta.
Marchese di Lorne,

Presumo che tu possa configurare qualsiasi porta sul tuo server per essere HTTPS, non deve essere una porta specifica?

1
@KarlSherwin Può essere qualsiasi porta che ti piace, fatte salve le prenotazioni, ma se non è 443 dovrai caricarlo intorno a te in tutti i tuoi URL.
Marchese di Lorne,

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

Dovresti avere un nome di dominio SMTP locale che contatterà il server di posta e stabilirà una nuova connessione e dovresti cambiare la proprietà SSL nella tua programmazione qui sotto

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

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

10
Sta parlando HTTPS, non SMTP. -1
Marchese di Lorne,

2
Nel mio caso ha funzionato, grazie! javax.mail.MessagingException: impossibile connettersi all'host SMTP: mail.livemusicgo.com, porta: 25; l'eccezione nidificata è: javax.net.ssl.SSLException: messaggio SSL non riconosciuto, connessione in chiaro?
surfealokesea,

1
@surfealokesea La domanda riguarda HTTP e HTTPS e una risposta o un'esperienza personale su SMTP non è rilevante.
Marchese di Lorne,

1
Sì, ma questo non è solo per lui, ma anche per gli altri utenti che hanno lo stesso "messaggio ssl non riconosciuto". +1 a te, Thobith
sam1370,

9

Ho ricevuto lo stesso messaggio di errore quando ho dimenticato di accedere al firewall dell'azienda, prima di eseguire una richiesta POST tramite un proxy.


Ho dovuto fare lo stesso anche se ero all'interno dell'azienda!
MonoThreaded

1
puoi per favore spiegare in breve come risolvere, anche io sto affrontando lo stesso problema nella mia azienda, giusto
Nitesh,

3

Ho avuto lo stesso errore. era perché stavo accedendo alla porta https usando http .. Il problema è stato risolto quando ho cambiato http in https.


11
No, hai ricevuto l'errore quando accedi alla porta HTTP tramite HTTPS. Leggi il messaggio di errore. Ti sei connesso a un target in testo normale. La situazione che hai descritto non avrebbe causato un SSLException, in quanto non avresti utilizzato SSL.
Marchese di Lorne,

1

Devo affrontare lo stesso problema dall'applicazione Java integrata in IDE Jdevelopr 11.1.1.7. Ho risolto il problema deselezionando l'uso delle proprietà del progetto del modulo proxy.

Lo si può trovare in: Proprietà progetto -> (dal riquadro di sinistra) Esegui / Debug / Profilo -> Fare clic su (modifica) dal pannello di destra -> Impostazioni strumento dal pannello di sinistra -> deselezionare l'opzione (Usa proxy).


1

Aggiungendo questo come risposta in quanto potrebbe aiutare qualcuno in seguito.

Ho dovuto forzare jvm a utilizzare lo stack IPv4 per risolvere l'errore. La mia applicazione funzionava all'interno della rete aziendale, ma durante la connessione da casa ha dato la stessa eccezione. Nessun proxy coinvolto. Aggiunto l'argomento jvm -Djava.net.preferIPv4Stack=truee tutte le httpsrichieste si stavano comportando normalmente.


1

Se stai eseguendo localmente usando Spring ti suggerisco di usare:

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

Funziona per me usando il test unitario.

Spero sia di aiuto!


0

Ha funzionato per me ora, ho cambiato l'impostazione del mio account Google come di seguito:

        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);

        }

Anche se ho abilitato SSL e TSL durante l'esecuzione del programma in questo link dello stesso post. Trascorro molto tempo ma di quanto ho realizzato e trovato questo link. E fatto 2 passaggi seguenti e controllo delle impostazioni in Google. :

  • Disabilita la verifica in due passaggi (password e OTP)

  • Abilitazione per consentire l'accesso ad app meno sicure ( Consenti app meno sicure: ON. )

Ora sono in grado di inviare posta utilizzando il programma sopra.


3
La domanda riguarda HTTPS.
Marchese di Lorne,

0

Come diceva EJP, è un messaggio mostrato a causa di una chiamata a un protocollo non https. Se sei sicuro che sia HTTPS, controlla le impostazioni del proxy di bypass e, nel caso, aggiungi l'URL dell'host del tuo servizio web all'elenco dei proxy di bypass


0

se la connessione è test FTPS:

FTPSClient ftpClient = new FTPSClient (protocollo, falso);

protocollo = TLS, SSL e false = isImplicit.



0

QUI UNA RISPOSTA MOLTO IMPORTANTE:

Devi solo cambiare la stringa dell'URL dell'API (nel tuo metodo) da https a http .. Questa potrebbe anche essere la causa:

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

invece di

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

-1

Ho avuto lo stesso problema e si è risolto impostando "proxyUser" e "proxyPassword" nelle proprietà di sistema.

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

insieme a "proxyHost" e "proxyPort"

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

Spero che funzioni.


Funzionerà se stai usando il client HTTP Apache e hai ottenuto un'eccezione di autorizzazione. Esso non funzionerà per risolvere il problema indicato dal PO.
Marchese di Lorne,

-1

ho risolto il mio problema usando la porta 25 e il seguito prop

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

-1

Nel caso tu stia correndo

  • Cisco AnyConnect Secure Mobility Agent
  • Cisco AnyConnect Web Security Agent

prova a interrompere i servizi.

Non sono sicuro del motivo per cui ho ottenuto un voto negativo per questa risposta. Nella nostra rete aziendale questa è la soluzione al problema.


-1

Ho un errore simile utilizzando il componente Camel-mail per inviare e-mail da Gmail SMTP.

La soluzione stava cambiando dalla porta TLS (587) alla porta SSL (465) come di seguito:

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

No, la soluzione stava cambiando in una porta in testo normale .
Marchese di Lorne,

-2

Se stai eseguendo il processo Java dalla riga di comando su Java 6 o precedente, l'aggiunta di questa opzione ha risolto il problema sopra per me:

-Dhttps.protocols = "TLSv1"


-3

Forse il tuo certificato predefinito è scaduto. per rinnovarlo tramite la console di amministrazione, selezionare "Sicurezza> Certificato SSL e gestione chiavi> Archivi chiavi e certificati> NodeDefaultKeyStore> Certificati personali" selezionare l'alias "predefinito" e fare clic su "rinnova" dopo aver riavviato WAS.


1
Un certificato scaduto non causa questa eccezione.
Marchese di Lorne

-3

Un altro motivo è forse "accesso negato", forse non è possibile accedere all'URI e ricevere la pagina di risposta di blocco per l'accesso alla rete interna. Se non si è sicuri che la propria area di applicazione abbia bisogno della regola del firewall, si tenta di connettersi dal terminale, dalla riga di comando. Per GNU / Linux o Unix, puoi provare a eseguire come questo comando e vedere il risultato proviene dalla regola di blocco o dall'indirizzo veramente remoto:echo | nc -v yazilimcity.net 443


Se hai ricevuto qualsiasi tipo di pagina, la parte SSL funzionava perfettamente e non avresti ottenuto l'eccezione citata dal PO.
Marchese di Lorne,

Non ricevo alcun tipo di pagina dalla parte SSL, ho ricevuto risposta HTTP da rete interna a quella pagina appositamente predisposta. Per questo scenario accedo alla pagina HTTP tramite richiesta HTTPS, quindi ho ricevuto questa eccezione. Dopo la modifica della regola di rete, anche questa eccezione si è risolta automaticamente.
Oguzhankinik,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.