Mensagem SSL não reconhecida, conexão de texto sem formatação? Exceção


172

Eu tenho um pacote compatível com java para falar com o servidor https na net. A execução da compilação fornece a seguinte exceção:

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)

Eu acho que isso é devido à conexão estabelecida com a máquina cliente não é segura. Existe alguma maneira de configurar a máquina ou portas locais para conectar-se ao servidor https remoto?

Respostas:


238

Eu acho que isso é devido à conexão estabelecida com a máquina cliente não é segura.

Isso se deve ao fato de você estar falando com um servidor HTTP, não com um servidor HTTPS. Provavelmente você não usou o número da porta correto para HTTPS.


7
Tenho o mesmo erro e resolvi quando comecei a usar http em vez de https. Mas quando coloco o link no navegador com https, ele funciona! E preciso executar uma consulta segura. Alguma idéia de como resolver o problema?
— Ccoutinho 31/03

9
@rsy Quando você colocou o link ... com https, o navegador mudaria para a porta 443 para você. Você pode fazer o mesmo você mesmo. Realmente HttpURLConnectionfará isso automaticamente para você, se você não especificar uma porta.
— Marquês de Lorne

Presumo que você possa configurar qualquer porta do seu servidor para ser HTTPS, ela não precisa ser uma porta específica?

1
@KarlSherwin Pode ser qualquer porta que você quiser, sujeita a reservas, mas se não for 443, você terá que carregá-la em todas as suas URLs.
— Marquês de Lorne #

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

Você deve ter um nome de domínio SMTP local que entre em contato com o servidor de correio e estabeleça uma nova conexão, além de alterar a propriedade SSL na sua programação abaixo

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

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

10
Ele está falando HTTPS, não SMTP. -1
— Marquês de Lorne

2
No meu caso que funcionou, obrigado! javax.mail.MessagingException: Não foi possível conectar ao host SMTP: mail.livemusicgo.com, porta: 25; A exceção aninhada é: javax.net.ssl.SSLException: mensagem SSL não reconhecida, conexão de texto sem formatação?
— Surfealokesea

1
@surfealokesea A pergunta é sobre HTTP e HTTPS, e uma resposta ou uma experiência pessoal sobre SMTP não é relevante.
— Marquês de Lorne

1
Sim, mas isso não é apenas para ele, é para outros usuários que estão tendo a mesma 'mensagem ssl não reconhecida'. +1 para você, Thobith
— sam1370

9

Recebi a mesma mensagem de erro quando esqueci de fazer login no firewall da empresa antes de executar uma solicitação POST por meio de um proxy.


Eu tive que fazer o mesmo, embora estivesse dentro da empresa!
— precisa saber é o seguinte

1
você pode explicar em breve como resolver, eu também enfrentando mesmo problema em minha companhia certa ow
— Nitesh

3

Eu recebi o mesmo erro. foi porque eu estava acessando a porta https usando http. O problema foi resolvido quando mudei http para https.


11
Não, você recebeu o erro ao acessar a porta HTTP via HTTPS. Leia a mensagem de erro. Você se conectou a um destino de texto sem formatação. A situação que você descreveu não teria causado uma exceção SSLE, pois você não usaria SSL.
— Marquês de Lorne

1

Eu enfrento o mesmo problema do aplicativo Java construído no Jdevelopr 11.1.1.7 IDE. Resolvi o problema desmarcando o uso das propriedades do projeto do formulário proxy.

Você pode encontrá-lo da seguinte maneira: Propriedades do projeto -> (no painel esquerdo) Executar / Depurar / Perfil -> Clique (editar) no painel direito -> Configuração da ferramenta no painel esquerdo -> desmarque a opção Usar proxy.


1

Adicionar isso como uma resposta, pois isso pode ajudar alguém mais tarde.

Eu tive que forçar a jvm a usar a pilha IPv4 para resolver o erro. Meu aplicativo costumava trabalhar na rede da empresa, mas durante a conexão em casa, deu a mesma exceção. Nenhum proxy envolvido. Adicionado o argumento jvm -Djava.net.preferIPv4Stack=truee todos os httpspedidos estavam se comportando normalmente.


1

Se você estiver executando localmente usando spring, sugiro usar:

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

Funciona para mim usando o teste de unidade.

Espero que seja de ajuda!


0

Funcionou para mim agora, alterei a configuração da minha conta do google como abaixo:

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

        }

Embora eu tenha ativado o SSL e o TSL durante a execução do programa neste link da mesma publicação. Passo muito tempo, mas percebi e encontrei este link. E feito 2 seguintes etapas e controle de configuração no google. :

  • Desativar a verificação em duas etapas (senha e OTP)

  • Ativando para permitir acessar aplicativos menos seguros ( Permitir aplicativos menos seguros: ATIVADO. )

Agora eu posso enviar e-mails usando o programa acima.


3
A questão é sobre HTTPS.
— Marquês de Lorne

0

Como o EJP disse, é uma mensagem mostrada devido a uma chamada para um protocolo não https. Se você tem certeza de que é HTTPS, verifique suas configurações de proxy de desvio e, caso adicione o URL do host do serviço da web à lista de proxy de desvio


0

se a conexão for teste FTPS:

FTPSClient ftpClient = novo FTPSClient (protocolo, falso);

protocol = TLS, SSL e false = isImplicit.



0

AQUI UMA RESPOSTA MUITO IMPORTANTE:

Você acabou de alterar sua string de URL da API (em seu método) de https para http. Isso também pode ser a causa:

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

ao invés de

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

-1

Eu obtive o mesmo problema e ele foi resolvido definindo "proxyUser" e "proxyPassword" nas propriedades do sistema.

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

junto com "proxyHost" e "proxyPort"

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

Espero que funcione.


Funcionará se você estiver usando o cliente HTTP Apache e tiver uma exceção de autorização. Ele vai não trabalhar para resolver o problema indicado pelo OP.
— Marquês de Lorne

-1

eu resolvi meu problema usando a porta 25 e a seguir prop

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

-1

Caso você esteja executando

  • Agente de mobilidade segura Cisco AnyConnect
  • Agente de segurança da Web de Cisco AnyConnect

tente interromper o (s) serviço (s).

Não sei por que recebi um voto negativo para esta resposta. Em nossa rede corporativa, essa é a solução para o problema.


-1

Eu tenho um erro semelhante ao usar o componente camel-mail para enviar e-mails pelo gmail smtp.

A solução estava mudando da porta TLS (587) para a porta SSL (465), conforme abaixo:

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

Não, a solução estava mudando para uma porta de texto sem formatação .
— Marquês de Lorne

-2

Se você estiver executando o processo Java a partir da linha de comando no Java 6 ou anterior, adicionar esta opção resolveu o problema acima para mim:

-Dhttps.protocols = "TLSv1"


-3

Talvez seu certificado padrão tenha expirado. para renová-lo por meio do console de administração, vá em "Segurança> Certificado SSL e Gerenciamento de Chaves> Armazenamentos de Chaves e Certificados> NodeDefaultKeyStore> Certificados Pessoais" selecione o alias "padrão" e clique em "renovar" depois de reiniciar o WAS.


1
Um certificado expirado não causa essa exceção.
— Marquês de Lorne

-3

Outro motivo é talvez "acesso negado", talvez você não consiga acessar o URI e tenha recebido a página de resposta de bloqueio para acesso interno à rede. Se você não tiver certeza de que sua zona de aplicativo precisa de uma regra de firewall, tente conectar-se a partir do terminal, linha de comando. Para GNU / Linux ou Unix, você pode tentar executar como este comando e ver o resultado vindo da regra de bloqueio ou do endereço realmente remoto:echo | nc -v yazilimcity.net 443


Se você recebeu qualquer tipo de página, a parte SSL estava funcionando perfeitamente e você não teria a exceção citada pelo OP.
— Marquês de Lorne

Não estou recebendo nenhum tipo de página na parte SSL, recebi resposta HTTP da rede interna nessa página preparada especial. Para este cenário, estou acessando a página HTTP via solicitação HTTPS e, portanto, recebi a exceção. Após a alteração da regra de rede, essa exceção também é resolvida automaticamente.
— oguzhankinik
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.