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
Le certificat ne mentionne pas ce nom d’hôte
fréquenteUn nouveau sous-domaine, un nom d’environnement ou le domaine nu, absent de la liste SAN.
Connexion par adresse IP, par localhost ou par un alias de conteneur
fréquenteLes noms de service de docker-compose ou de Kubernetes et les adresses IP brutes ne figurent pas dans les certificats émis pour des noms publics.
Connexions SQL Server par IP ou par alias avec Encrypt=True
occasionnelleMicrosoft.Data.SqlClient valide le certificat du serveur par défaut (Encrypt=True depuis la version 4) ; une connexion par IP ou par nom court à un serveur dont le certificat porte son FQDN échoue à la vérification du nom.
Comment corriger l’erreur
- 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.
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.
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;