Saltar al contenido
ecdsa.com
.NET SslStream / HttpClient.NET

Mensaje de error

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

También se muestra como

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

Las versiones antiguas de .NET imprimían solo «The remote certificate is invalid according to the validation procedure.» sin nombrar el error; el .NET actual añade el valor de SslPolicyErrors. HttpClient lo envuelve en «The SSL connection could not be established, see inner exception.»

.NET SslStream / HttpClient — SslPolicyErrors.RemoteCertificateNameMismatch

Qué significa

La cadena de certificados del servidor es de confianza, pero el nombre de host al que se conectó .NET no figura entre los nombres para los que se emitió el certificado (sus nombres alternativos del sujeto). El texto «according to the validation procedure» se usa para SslPolicyErrors como las discrepancias de nombre, a diferencia de «errors in the certificate chain», que se usa para problemas de confianza y de fechas.

Por qué ocurre

Cómo solucionarlo

  1. 1.

    Comparar los nombres del certificado con la URL

    Imprime la lista SAN del 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.

    Conectarse con un nombre del certificado

    Cambia la URL y la resolución de nombres en lugar de desactivar la validación.

    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: establecer HostNameInCertificate

    Microsoft.Data.SqlClient 5.0 y posteriores aceptan HostNameInCertificate, de modo que puedes conectarte por dirección mientras se valida el nombre real del certificado; TrustServerCertificate=True, en cambio, omite toda la validación y no debería usarse fuera de entornos desechables.

    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;

Errores relacionados

Explorar toda la base de datos de errores de firma