Pular para o conteúdo
ecdsa.com
rustls (via reqwest, ureq, tonic)Rust

Mensagem de erro

received corrupt message of type InvalidContentType

O reqwest o mostra no fim de “error sending request for url (…): client error (Connect): received corrupt message of type InvalidContentType”; o ureq, como “io: received corrupt message of type InvalidContentType”. Clientes baseados no OpenSSL relatam a mesma situação como “wrong version number”.

rustls (via reqwest, ureq, tonic) — rustls::Error::InvalidMessage(InvalidContentType): the peer's reply is not TLS

O que significa

O rustls leu o primeiro byte da resposta do servidor como o tipo de conteúdo de um registro TLS e encontrou um valor que nenhum registro TLS pode ter. O outro lado não está falando TLS: normalmente é um servidor HTTP respondendo “HTTP/1.1 …” em uma porta acessada com https://, um servidor gRPC em texto claro ou um proxy que espera HTTP não criptografado.

Por que acontece

Como corrigir

  1. 1.

    Descobrir o que a porta fala

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

    bash
    curl -si http://127.0.0.1:8080/ | head -1      # plain HTTP answers -> use http:// or the TLS port
  2. 2.

    Ajustar o esquema do endpoint ao servidor

    Use endpoints http:// para servidores gRPC em texto claro em redes confiáveis e, nos demais casos, https:// com configuração TLS.

    rust
    // tonic: use an http:// endpoint for plaintext servers, https:// + TLS config for TLS servers
    let channel = tonic::transport::Channel::from_static("http://127.0.0.1:50051").connect().await?;

Erros relacionados

Ver toda a base de erros de assinatura