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?

karthi
fonte

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.

Marquês de Lorne
fonte
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
Thobith
fonte
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.

Jay
fonte
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.

Soumyajit Swain
fonte
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.

Salman
fonte
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.

basiljames
fonte
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!

Henrique
fonte
0

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

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

        }

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.

Laxman G
fonte
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

Fabrizio Stellato
fonte
0

se a conexão for teste FTPS:

FTPSClient ftpClient = novo FTPSClient (protocolo, falso);

protocol = TLS, SSL e false = isImplicit.

Faxon
fonte
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");
Dan Ortega
fonte
-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.

Anil kumar
fonte
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",
        ]);
srsajid
fonte
-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.

rob2universe
fonte
-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:[email protected]&amp;password=mypw&amp;[email protected]&amp;debugMode=true&amp;mail.smtp.starttls.enable=true"/>
</route>
Cleber Jorge Amaral
fonte
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"

MarkL
fonte
-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.

Mithat Bozkurt
fonte
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

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