Rufen Sie Https mit HttpClient auf
Ich habe mit HttpClient
für WebApi-Aufrufe mit C#. Scheint sauber & schnell Weg, im Vergleich zu WebClient
. Aber ich bin stecken sich beim Https
Anrufe.
Wie kann ich folgenden code, um Https
Anrufe?
HttpClient httpClient = new HttpClient();
httpClient.BaseAddress = new Uri("https://foobar.com/");
httpClient.DefaultRequestHeaders.Accept.Clear();
httpClient.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue("application/xml"));
var task = httpClient.PostAsXmlAsync<DeviceRequest>(
"api/SaveData", request);
EDIT 1:
Der code oben funktioniert gut für die Herstellung von http-Aufrufe. Aber wenn ich die Regelung auf https funktioniert es nicht. Hier ist der Fehler erhalten:
Die zugrunde liegende Verbindung wurde geschlossen: Konnte keine Vertrauensstellung einrichten
Beziehung für den sicheren SSL/TLS-Kanal.
EDIT 2:
Die änderung der Regelung zu https ist: Schritt eins.
Wie kann ich die supply-Zertifikat & public - /private key zusammen mit C#
Anfrage.
InformationsquelleAutor der Frage Abhijeet | 2014-03-07
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn der server unterstützt nur eine höhere TLS-version, z.B. TLS 1.2 nur, es wird immer noch nicht, es sei denn, Ihr client-PC konfiguriert ist, um höhere TLS-version standardmäßig. Zu dieses problem umgehen, fügen Sie Folgendes in Ihren code.
Ändern Sie Ihre Beispiel-code, es wäre
InformationsquelleAutor der Antwort Ronald Ramos
Geben Sie einfach HTTPS in der URI.
Foobar.com benötigen, um eine Vertrauenswürdige SSL-cert oder Ihre Anrufe fehl mit nicht vertrauenswürdigen Fehler.
BEARBEITEN Antwort: ClientCertificates mit HttpClient
BEARBEITEN Answer2: Wenn der server Sie eine Verbindung herstellen deaktiviert SSL, TLS 1.0 und 1.1, und Sie sind immer noch läuft .NET framework 4.5(oder unten), die Sie benötigen, um eine Wahl zu treffen
InformationsquelleAutor der Antwort felickz
Ihrem code geändert werden sollte, in dieser Weise:
Haben Sie nur die Verwendung der
https:
URI-Schema.Es ist eine nützliche Seite hier auf der MSDN-Website über die sichere HTTP-verbindungen. In der Tat:
Darüber hinaus berücksichtigen, dass die HTTPS-verbindungen verwenden Sie ein SSL-Zertifikat. Stellen Sie sicher, dass Ihre sichere Verbindung hat dieses Zertifikat sonst die Anforderungen fehl.
EDIT:
Was heißt es funktioniert nicht? Die Anträge? Eine Ausnahme geworfen wird? Klären Sie Ihre Frage stellen.
Wenn die Anforderungen fehlschlagen, dann sollte das Problem sein, das SSL-Zertifikat.
Um das Problem zu lösen, können Sie die Klasse
HttpWebRequest
und dann seine EigenschaftClientCertificate
.Darüber hinaus finden Sie hier ein nützliches Beispiel darüber, wie man eine HTTPS-Anfrage über das Zertifikat.
Ein Beispiel ist die folgende (siehe die MSDN-Seite verlinkt vor):
InformationsquelleAutor der Antwort Alberto Solano
Ich hatte das gleiche problem bei der Verbindung zu GitHub, die erfordert, dass ein Benutzer-agent. Es ist also ausreichend, um diese eher als ein Zertifikat generieren
InformationsquelleAutor der Antwort Carlo V. Dango
Wenn eine Verbindung zu
https
ich habe diesen Fehler auch, ich füge diese Zeile vorHttpClient httpClient = new HttpClient();
und Verbindung erfolgreich hergestellt:Ich weiß, dass es von Diese Antwort und Andere Ähnliche Anwser und dem Kommentar erwähnt:
Außerdem, ich habe nicht versucht, die Methode in Eine Andere Antwortdass die Verwendung
new X509Certificate()
odernew X509Certificate2()
zu machen, ein Zertifikat, ich bin mir nicht sicher, erstellen Sie einfach durchnew()
funktionieren wird oder nicht.EDIT: Einige Referenzen:
Erstellen eines selbstsignierten Serverzertifikats in IIS 7
Import und Export von SSL-Zertifikaten in IIS 7
Konvertieren .pfx .cer
Best practices für die Verwendung ServerCertificateValidationCallback
Finde ich den Wert der Fingerabdruck ist gleich
x509certificate.GetCertHashString()
:Abrufen der Fingerabdruck eines Zertifikats
InformationsquelleAutor der Antwort yu yang Jian
Nur die Angabe von HTTPS in der URI sollte den trick tun.
Wenn die Anfrage funktioniert mit HTTP, aber schlägt mit HTTPS dann dies ist sicherlich ein Zertifikat ausstellen. Stellen Sie sicher, dass der Anrufer vertraut den Aussteller des Zertifikats und das Zertifikat ist nicht abgelaufen. Eine schnelle und einfache Möglichkeit zu überprüfen, ist zu versuchen, die Abfrage in einem browser.
Eventuell möchten Sie auch zu prüfen, auf dem server (wenn es Ihnen und /oder wenn Sie können), dass es festgelegt ist, um zu dienen HTTPS-Anfragen richtig.
InformationsquelleAutor der Antwort Crono
Können Sie versuchen, mit der ModernHttpClient Nuget-Paket: Nach dem Download der Paket, Sie können es umsetzen wie diese:
InformationsquelleAutor der Antwort uchenna nnodim
Ich war auch immer der Fehler:
... mit einem Xamarin Forms Android-targeting-Software versucht, Anforderung von Ressourcen von einem API-Anbieter, die erforderlich TLS 1.3.
War die Lösung ein update der Projekt-Konfiguration zu tauschen die Xamarin "verwaltet" (.NET) http-client (nicht unterstützt TLS 1.3 als von Xamarin Forms v2.5), und stattdessen die android-native-client.
Es ist eine einfache Projekt, wechseln Sie in visual studio. Siehe Abbildung unten.
InformationsquelleAutor der Antwort MSC
Fügen Sie den untenstehenden Erklärungen zu Ihrer Klasse:
Nach:
Und:
Glücklich? 🙂
InformationsquelleAutor der Antwort Greg Stawski
Error:
Ich denke, dass Sie brauchen, um zu akzeptieren Zertifikat, das bedingungslos mit folgenden code
als Oppositionelle schrieb in seiner Antwort auf Frage .NET-client die Verbindung zu ssl-Web-API.
InformationsquelleAutor der Antwort Nemanja Simović