Aller au contenu
ecdsa.com
.NET SslStream / HttpClient.NET

Message d’erreur

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

Également affiché sous la forme

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

Les anciennes versions de .NET affichaient seulement « The remote certificate is invalid according to the validation procedure. », sans nommer l’erreur ; les versions actuelles ajoutent la valeur SslPolicyErrors. HttpClient l’enveloppe dans « The SSL connection could not be established, see inner exception. »

.NET SslStream / HttpClient — SslPolicyErrors.RemoteCertificateNameMismatch

Ce que cela signifie

La chaîne de certificats du serveur est approuvée, mais le nom d’hôte auquel .NET s’est connecté ne figure pas parmi les noms pour lesquels le certificat a été émis (ses noms alternatifs du sujet). Le texte « according to the validation procedure » sert pour les SslPolicyErrors comme les non-concordances de nom, tandis que « errors in the certificate chain » sert pour les problèmes de confiance et de dates.

Pourquoi cela se produit

Comment corriger l’erreur

  1. 1.

    Comparer les noms du certificat avec l’URL

    Affichez la liste SAN du certificat servi.

    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.

    Se connecter avec un nom présent dans le certificat

    Modifiez l’URL et la résolution de noms plutôt que de désactiver la validation.

    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 : définir HostNameInCertificate

    Microsoft.Data.SqlClient 5.0 et les versions ultérieures acceptent HostNameInCertificate, ce qui vous permet de vous connecter par adresse tout en validant le vrai nom du certificat ; TrustServerCertificate=True, à l’inverse, désactive toute validation et ne devrait pas être utilisé en dehors d’environnements jetables.

    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;

Erreurs associées

Parcourir toute la base de données des erreurs de signature