Zum Inhalt springen
ecdsa.com
.NET SslStream / HttpClient.NET

Fehlermeldung

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

HttpClient meldet den Fehler als innere Exception von „The SSL connection could not be established, see inner exception.“. Mehrere Flags können zusammen aufgeführt sein, etwa „NotTimeValid, UntrustedRoot“.

.NET SslStream / HttpClient — X509ChainStatusFlags.NotTimeValid

Was der Fehler bedeutet

Ein Zertifikat in der Kette, die .NET aufgebaut hat, liegt nach der Uhr dieses Rechners außerhalb seines Gültigkeitszeitraums: abgelaufen oder noch nicht gültig. NotTimeValid sagt nicht, welches Zertifikat betroffen ist; die Kettenelemente in einem Validierungs-Callback schon. Root und Name waren in Ordnung, sonst würden zusätzlich andere Flags erscheinen.

Warum der Fehler auftritt

So behebst du den Fehler

  1. 1.

    Gültigkeitsdaten des ausgelieferten Zertifikats prüfen

    Vergleiche notBefore und notAfter mit der aktuellen UTC-Zeit.

    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.

    Fehlerhaftes Kettenelement loggen

    Ein Validierungs-Callback, der ChainElementStatus loggt und die Standardentscheidung zurückgibt, zeigt, welches Zertifikat außerhalb seiner Gültigkeit liegt, ohne die Validierung zu schwächen.

    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.

    Erneuern und neu binden

    Erneuere das Zertifikat und aktualisiere jede Bindung, über die es ausgeliefert wird.

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

Verwandte Fehler

Gesamte Signaturfehler-Datenbank durchsuchen