Pular para o conteúdo
ecdsa.com
.NET SslStream / HttpClient.NET

Mensagem de erro

The remote certificate is invalid according to the validation procedure: RemoteCertificateNameMismatch

Também aparece como

  • The remote certificate is invalid according to the validation procedure.

Versões mais antigas do .NET imprimiam só “The remote certificate is invalid according to the validation procedure.”, sem indicar o erro; o .NET atual acrescenta o valor de SslPolicyErrors. O HttpClient o encapsula em “The SSL connection could not be established, see inner exception.”

.NET SslStream / HttpClient — SslPolicyErrors.RemoteCertificateNameMismatch

O que significa

A cadeia de certificados do servidor é confiável, mas o nome de host ao qual o .NET se conectou não está entre os nomes para os quais o certificado foi emitido (os Subject Alternative Names dele). O texto “according to the validation procedure” é usado para SslPolicyErrors como divergências de nome, ao contrário de “errors in the certificate chain”, usado para problemas de confiança e de data.

Por que acontece

Como corrigir

  1. 1.

    Comparar os nomes do certificado com a URL

    Imprima a lista de SANs do certificado servido.

    bash
    echo | openssl s_client -connect api.example.com:443 -servername api.example.com 2>/dev/null \
      | openssl x509 -noout -subject -ext subjectAltName
  2. 2.

    Conectar com um nome que consta no certificado

    Mude a URL e a resolução de nomes em vez de desativar a validação.

    csharp
    // Use a host name from the certificate in the URL (resolve it to the address you need via DNS)
    using var client = new HttpClient();
    var response = await client.GetAsync("https://www.example.com/health");
  3. 3.

    SQL Server: definir HostNameInCertificate

    O Microsoft.Data.SqlClient 5.0 e posteriores aceitam HostNameInCertificate, para que você se conecte pelo endereço enquanto valida o nome real do certificado; já TrustServerCertificate=True ignora toda a validação e não convém usá-lo fora de ambientes descartáveis.

    text
    # Microsoft.Data.SqlClient: connect by IP/alias but validate against the certificate's name
    Server=10.0.0.5;Database=app;Encrypt=True;HostNameInCertificate=sql01.corp.example.com;

Erros relacionados

Ver toda a base de erros de assinatura