Fehlermeldung
The SSL connection could not be established, see inner exception.
Auch ausgegeben als
- System.Net.Http.HttpRequestException: The SSL connection could not be established, see inner exception.
Der Text ist von .NET Core 3.x bis .NET 10 stabil. Frameworks (Refit, gRPC, Azure SDKs) verpacken ihn womöglich noch einmal, sodass die innere Exception zwei oder drei Ebenen tiefer liegen kann.
.NET HttpClient — HttpRequestException wrapping the AuthenticationException or IOException of the TLS handshake
Was der Fehler bedeutet
Der generische Wrapper von HttpClient für jeden TLS-Fehler beim Verbindungsaufbau. Die Meldung selbst enthält keine Diagnose: Der eigentliche Grund steht in InnerException (eine AuthenticationException, die das Zertifikatsproblem nennt, oder eine IOException aus dem Transport). Wenn du nur e.Message loggst, geht er verloren; logge die gesamte Kette der Exceptions.
Warum der Fehler auftritt
Zertifikatsvalidierung fehlgeschlagen
häufigNicht vertrauenswürdige oder unvollständige Ketten, abgelaufene Zertifikate oder ein abweichender Hostname: Die innere AuthenticationException nennt den Wert von X509ChainStatus oder SslPolicyErrors.
Kein gemeinsames Protokoll oder keine gemeinsame Cipher
gelegentlichAlte Server mit TLS 1.0/1.1 oder veralteten Cipher Suites; unter Linux zeigen die inneren Exceptions den Grund von OpenSSL.
Die Verbindung war kein TLS oder wurde getrennt
gelegentlichPorts mit reinem HTTP, Proxys oder Firewalls, die die Verbindung schließen, oder Server, die den Handshake zurücksetzen.
So behebst du den Fehler
- 1.
Vollständige Exception-Kette loggen
Folge der Kette über InnerException (oder logge das Exception-Objekt, nicht nur Message), um die eigentliche Ursache zu sehen.
csharp catch (HttpRequestException e) { for (Exception? ex = e; ex != null; ex = ex.InnerException) logger.LogError("{Type}: {Message}", ex.GetType().FullName, ex.Message); } - 2.
Innere Meldung ihrer Ursache zuordnen
Jede innere Meldung führt zu einer anderen Lösung; die verwandten Einträge weiter unten behandeln sie einzeln.
text Inner exception -> look at "...errors in the certificate chain: UntrustedRoot / PartialChain" -> trust store, server chain "...errors in the certificate chain: NotTimeValid" -> dates, clock "...validation procedure: RemoteCertificateNameMismatch" -> host name vs SAN "Cannot determine the frame size or a corrupted frame was received." -> port is not TLS "Received an unexpected EOF or 0 bytes from the transport stream." -> server/proxy closed "SSL Handshake failed with OpenSSL error - SSL_ERROR_SSL." -> protocol/cipher (Linux)
Verwandte Fehler
The remote certificate is invalid because of errors in the certificate chain: U….NET SslStream / HttpClientThe remote certificate is invalid according to the validation procedure: Remote….NET SslStream / HttpClientCannot determine the frame size or a corrupted frame was received..NET SslStream / HttpClientReceived an unexpected EOF or 0 bytes from the transport stream..NET SslStream / HttpClientSSL Handshake failed with OpenSSL error - SSL_ERROR_SSL..NET on Linux (SslStream over OpenSSL)