Änderung des Sicherheitsprotokolls pro Anfrage (HttpClient)

9

Ich habe eine Web-API, die mit ein paar verschiedenen Diensten kommunizieren muss. Derzeit habe ich die Web-API so eingerichtet, dass sie das folgende Sicherheitsprotokoll verwendet:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

Wenn die API über HttpClient (etwa wie Twitter) zu einem anderen Dienst aufruft, wird sie dieses Protokoll verwenden. Gleichzeitig kann jedoch eine weitere Anfrage eingehen, um auf etwas aus der Cloud zuzugreifen, das aus welchem ​​Grund auch immer TLS (nicht TLS 1.2) benötigt. Die Anforderung an die Cloud, bevor sie ausgelöst wird, setzt das Sicherheitsprotokoll erneut:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;

Das Problem, auf das ich stoße, ist, wenn zwei getrennte und eindeutige Anfragen eingehen, eine für Twitter und eine für die Cloud, könnte das Sicherheitsprotokoll auf die "falsche" umschalten, bevor es gesendet wird, was die Anfrage verursacht Scheitern.

Gibt es eine Möglichkeit, das Sicherheitsprotokoll für die HttpClient pro Anfrage festzulegen, damit ich nicht irgendwo in einem Singleton eine Einstellung vertauschen kann?

    
Porschiey 14.01.2015, 22:32
quelle

2 Antworten

5

Sie müssen nicht festlegen .

Sie können verwenden:

%Vor%     
lovebanyi 06.04.2017, 03:42
quelle
3

Es scheint keinen Weg zu geben, dies zu tun. Die Eigenschaft SecurityProtocol wird nur in der internen Klasse TlsStream an einer Stelle verwendet:

TlsStream scheint alle internen TLS-Verbindungen wie HTTP, FTP und SMTP zu unterstützen.

Ich hatte gehofft, dass ServicePoint Ihnen erlaubt, dies zu konfigurieren. Für viele Einstellungen bietet ServicePointManager nur den Standardwert. Diese Hoffnung war unbegründet.

Das ist also ein ziemlich starker Beweis dafür, dass dies nicht möglich ist. Es ist jedoch kein Beweis.

Was sollten Sie tun? Ich würde die HTTP-Client-Bibliothek für den ungeraden Server ausschalten, mit dem Sie sprechen. HTTP ist kein besonders kompliziertes Protokoll. Ich bin mir sicher, dass eine andere Implementierung verfügbar ist.

Verwenden Sie alternativ einen Proxy, der die HTTPS-Verbindung auf Ihrem eigenen Server beendet. .NET befasst sich dann nur mit HTTP.

    
usr 14.01.2015 23:43
quelle

Tags und Links