Angeben von SSL/TLS für System.Net.HttpWebRequest über die App.config
Muss ich POST JSON-Daten, um eine TLS-1.2-Endpunkt. Ich hätte gerne die SecurityProtocol angegeben in der App.config anstatt hardcoded in den source und nicht wollen, um die Registrierung der Maschine zu deaktivieren TLS 1.1.
Wenn Sie nicht angeben der SecurityProtocol das zugrunde liegende OS-Protokolle werden verwendet, aber Sie scheinen standardmäßig die zuletzt sichere anstelle der sichersten. Da habe ich mehrere Dienste von der Maschine, die ich nicht festlegen, dass die OS nur TLS1.2, aber ich will auch noch dieses spezielle client TLS 1.2 verwenden, und wenn TLS 1.3 kommt heraus in der Lage sein, es zu ändern durch anwendungsspezifische Konfiguration.
Diese Frage erklärt, wie es zu tun via code: Wie geben Sie das SSL-Protokoll zu verwenden, für die WebClient-Klasse
Diese Frage erklärt, wie man es über die Registry-Einstellungen für die gesamte Maschine: Gibt es .NET-Implementierung von TLS 1.2?
//this is what I want to avoid
System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocol.Tls12;
System.Net.HttpWebRequest request = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(url);
using (System.IO.StreamWriter sw = new System.IO.StreamWriter(request.GetRequestStream()))
{
sw.write(json);
}
System.Net.HttpWebResponse response = (System.Net.HttpWebResponse)request.GetResponse();
using System.IO.StreamReader sr = new System.IO.StreamReader(response.GetResponseStream()))
{
content = sr.ReadToEnd();
}
Habe ich nichts in meiner App.config für diesen Kunden derzeit, aber das ist was, das ich ändern möchte.
Habe ich festgestellt, dass es eine sslStreamSecurity-element im system.serviceModel, aber ich glaube, das ist für ServiceReferences, nicht normal HttpWebRequest. Ich glaube, dass ist im Rahmen system.net aber ich kann nicht finden, ein äquivalent.
<system.serviceModel>
<bindings>
<customBinding>
<binding name="myBinding">
<sslStreamSecurity sslProtocls="Tls12">
</binding>
</customBinding>
</bindings>
<client>
<endpoint address="https://myserver.com" binding="customBinding" bindingConfiguration="myBinding" name="myEndpoint" />
</client>
</system.ServiceModel>
Ich bin ziemlich offen über etwas anderes als HttpWebRequest/HttpWebResponse möchte aber bleiben Sie Weg von der Installation von Drittanbieter-Pakete. Ich begann einen Pfad mit System.Net.Http.HttpClient
scheint neuer als HttpWebRequest aber rannte schnell in die gleichen Probleme.
InformationsquelleAutor Carson Evans | 2017-08-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Beispiel für die Verwendung der Protokoll-name anstelle der integer-codes.
Für Die App.Config
InformationsquelleAutor Muhammad Yousaf Sulahria
Für jetzt, ich habe einen integer-Wert in der App.config legt fest, dass die enum-Wert gesetzt
System.Net.ServicePointManager.SecurityProtocol
. Ich denke immer noch, es gibt vielleicht eine elegantere Möglichkeit dies zu tun, und freue mich auf andere Antworten. Ich wurde geführt, in diese Richtung, indem https://stackoverflow.com/a/35325333/5221761App.config:
InformationsquelleAutor Carson Evans
Ist es möglich, zu ändern, die TLS-Einstellungen für eine Anwendung targeting <.net-4.6 ohne Neukompilierung es, indem Sie seine
app.config
so lange, wie Sie es läuft auf ≥.net-4.6. Dies ist dokumentiert in “Transport Layer Security (TLS) best-practices mit der .NET Framework".Wenn Microsoft entwickelt .net-4.6 als eine in-place-Ersatz für .net-4.5, Sie wollten änderungen im Verhalten, einschließlich bugfixes, Verbesserungen der Sicherheit, etc.. Aber Sie wollte nicht zu brechen, apps für .net-4.5, die stützte sich auf alte Verhaltensweisen—sogar buggy sind (es ist durchaus üblich für alten code angewiesen auf fehlerhaftes Verhalten und Microsoft .net-team kümmert sich um den Punkt, der gezielt die Erhaltung bugs aus Gründen der Kompatibilität). Um dies zu tun, beginnend mit .net-4.6-und Weiterbildung mit späteren releases, jedes neue Verhalten zu ändern, wäre zu erwarten, dass Kompatibilitätsprobleme gestellt wurde hinter einem Schalter, der ermöglicht, das alte Verhalten und standardmäßig
true
. Zur compile-Zeit, die gezielte framework ist in der assembly gespeichert. Wenn die Laufzeitumgebung geladen wird der Einstiegspunkt der Baugruppe, prüft es die gezielte version und dann automatisch, Voreinstellungen, der die Kompatibilität Schalter für die gezielte .net-version.Wenn Sie nicht neu ausrichten oder neu kompilieren Ihrer Anwendung, können Sie manuell geben Sie die Werte für diese Kompatibilität Schalter hinzufügen oder Bearbeiten
<AppContextSwitchOverrides/>
in derapp.config
die ist normalerweise mit dem Namen«ExecutableName».exe.config
. Der SchalterDontEnableSystemDefaultTlsVersions
wurde Hinzugefügt .net-4.7 unterstützt mit system bereitgestellten TLS-Richtlinien. Der SchalterDontEnableSchUseStrongCrypto
wurde Hinzugefügt .net-4.6 die Unterstützung für TLS 1.2.InformationsquelleAutor binki