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

Message d’erreur

The remote certificate is invalid because of errors in the certificate chain: NotTimeValid

HttpClient la signale comme exception interne de « The SSL connection could not be established, see inner exception. ». Plusieurs indicateurs peuvent être listés ensemble, par exemple « NotTimeValid, UntrustedRoot ».

.NET SslStream / HttpClient — X509ChainStatusFlags.NotTimeValid

Ce que cela signifie

Un certificat de la chaîne construite par .NET est hors de sa période de validité selon l’horloge de cette machine : il a expiré ou n’est pas encore valide. NotTimeValid n’indique pas de quel certificat il s’agit ; les éléments de la chaîne accessibles dans un callback de validation, eux, l’indiquent. La racine et le nom étaient corrects, sinon d’autres indicateurs apparaîtraient à côté.

Pourquoi cela se produit

Comment corriger l’erreur

  1. 1.

    Vérifier les dates du certificat servi

    Comparez notBefore et notAfter avec l’heure UTC actuelle.

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

    Journaliser l’élément de chaîne en échec

    Un callback de validation qui journalise ChainElementStatus et renvoie la décision par défaut montre quel certificat est hors de ses dates de validité, sans affaiblir la validation.

    csharp
    // Log which certificate failed and why, without accepting it
    var handler = new HttpClientHandler
    {
        ServerCertificateCustomValidationCallback = (msg, cert, chain, errors) =>
        {
            foreach (var element in chain!.ChainElements)
                foreach (var status in element.ChainElementStatus)
                    Console.WriteLine($"{element.Certificate.Subject}: {status.Status} {element.Certificate.NotAfter:u}");
            return errors == System.Net.Security.SslPolicyErrors.None;
        },
    };
  3. 3.

    Renouveler et refaire les liaisons

    Renouvelez le certificat et mettez à jour chaque liaison qui le sert.

    bash
    sudo certbot renew && sudo systemctl reload nginx     # or renew in your CA / key vault and redeploy

Erreurs associées

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