Pular para o conteúdo
ecdsa.com
Java (JSSE)Java

Mensagem de erro

javax.net.ssl.SSLException: Unsupported or unrecognized SSL message

Também aparece como

  • Unsupported or unrecognized SSL message

O JDK 25 imprime o mesmo texto no lado do cliente e em um servidor JSSE que recebe HTTP não criptografado (os dois casos foram verificados). Quando o outro lado não envia nada e fecha a conexão, o Java informa, em vez disso, “Remote host terminated the handshake”.

Java (JSSE) — the peer's reply is not a TLS record

O que significa

O JSSE esperava um registro TLS e recebeu bytes que não consegue interpretar como tal, quase sempre o texto de uma resposta HTTP vinda de um servidor HTTP não criptografado. No lado do cliente, foi usado https:// com uma porta que não fala TLS; no lado do servidor (um listener TLS do Tomcat ou do Netty), um cliente enviou HTTP não criptografado para a porta TLS. O certificado não tem relação com o problema.

Por que acontece

Como corrigir

  1. 1.

    Verificar qual protocolo a porta fala

    Se a porta responder em HTTP não criptografado, use http:// ou a porta TLS real.

    bash
    curl -si http://api.example.com:8080/ | head -1      # an HTTP status line -> not TLS
    openssl s_client -connect api.example.com:8443 -brief </dev/null
  2. 2.

    Clientes de e-mail e de diretório: combinar o modo TLS com a porta

    Use STARTTLS na porta de submissão (587) e TLS implícito apenas na 465 (ou ldaps:// na 636).

    text
    # Mail (Jakarta Mail): STARTTLS on 587, implicit TLS on 465
    mail.smtp.port=587
    mail.smtp.starttls.enable=true
    mail.smtp.starttls.required=true
    # (mail.smtp.ssl.enable=true belongs to port 465 only)
  3. 3.

    Donos do servidor: separar as portas HTTP e HTTPS

    Aponte os clientes e os health checks para https://, ou exponha um conector HTTP não criptografado que redirecione para a porta TLS.

    text
    # Spring Boot server logging this for incoming requests: plain HTTP sent to the TLS port.
    # Use https:// on server.port, or add a separate HTTP connector that redirects to HTTPS.

Erros relacionados

Ver toda a base de erros de assinatura