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.