2016-03-03 13 views
6

ich ein Programm vorgenommen haben, die eine SSL-Verbindung akzeptieren soll. Ich möchte, dass es nur TLS 1.2 akzeptiert, um die Sicherheit zu erhöhen.Kann nicht SslStream in C# erhalten TLS 1.2 Protokoll mit .net Framework zu akzeptieren 4.6

Um dies zu tun, ich .net Framework 4.6 und die SW zusammengestellt installiert haben, Visual Studio 2015 Express auf einem Windows 7 Professional SP1 PC. Zielframework unter „Anwendung“ in VS hat auf 4,6

Im SW eingestellt wurde verwende ich SslStream Methode das Zertifikat zu überprüfen und sicherzustellen, dass nur TLS 1.2 verwendet wird, gebe ich die Zeile

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 

ich habe versucht, sowohl bei main() diese Zeilen eingefügt und kurz bevor einen neuen SSL-Stream

Für Test machst ich openSSL verwenden, um eine Verbindung mit dem Befehl:

openssl s_client -connect 10.0.0.101:1400 -tls1_2 -cert MyCert.pem -key private.pem -CAfile entrust.cer

Mein Problem ist, dass das C# Programm die folgende Ausnahme wird:

Exception: A call to SSPI failed, see inner exception.

Inner exception: The function requested is not supported

Ausgabe von OpenSSL ist

CONNECTED(00000150) 7964:error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number:.\ssl\s3_pkt.c:362:

no peer certificate available

No client certificate CA names sent

SSLL handshake has read 5 bytes and written 7 bytes

New, (NONE), Cipher is (NONE) Secure Renegotiation IS NOT supported Compression: NONE Expansion: NONE No ALPN negotiated SSL-Session: Protocol : TLSv1.2 Cipher : 0000 Session-ID: Session-ID-ctx: Master-Key: Key-Arg : None PSK identity: None PSK identity hint: None SRP username: None Start Time: 1457011106 Timeout : 7200 (sec) Verify return code: 0 (ok)

Wenn ich -tls1 es keine Probleme, so dass ich davon ausgehen, dass es, weil das ist. net SslStream nicht unterstützt tls1_2 (oder tls1_1)

gibt es jemanden, der erklären kann, was ich falsch gemacht

/Karsten

+0

Nach einiger Zeit fand ich heraus, dass TLS 1.1 und 1.2 sind nicht in Win 7 standardmäßig enabeled. MS gibt in [TLS/SSL-Einstellung] (https://technet.microsoft.com/de-de/library/dn786418.aspx) eine Anleitung, wie Sie es aktivieren können, indem Sie Änderungen über Regedit vornehmen. Mein Problem ist jetzt, dass, wenn bei HKEY_LOCAL_MASCHINE \ SYSTEM suchen \ CurrentControlSet \ Control \ Securityproviders \ SCHANNEL \ Protocols ich nur einen SSL 2.0-Eintrag hat, aber, wie es auf SSL3/TLS1.0 angegeben arbeiten. Muss ich Änderungen in der Registrierung vornehmen? Datenbank? –

+0

Ich bin weder mit openssl noch mit SslStream im Hörmodus vertraut, daher kann ich Ihre Frage nicht direkt beantworten. Ich weiß jedoch, dass Windows 7 die TLS-Protokolle 1.0, 1.1 und 1.2 aktiviert. Die Registrierungseinträge auf SCHANNEL können verwendet werden, um bestimmte Protokolle zu deaktivieren, ihr Standardstatus ist jedoch aktiviert. Sie sollten die Registrierung nicht ändern müssen, damit dies funktioniert. –

+1

Hallo .. gut ... das ist eines der Dinge, die ich nicht verstehe ... Ich kann mit TLS 1.2 zu einem Browser usw. verbinden, aber wenn ich versuche, mit TLS 1.2 an die Konsole Anwendung verbinde ich mit abgelehnten bin die obige Beschreibung, obwohl ich Framework 4.6 in Eigenschaften verwende und das TLS 1.2-Flag in Sicherheitsprotokollflag gesetzt .... –

Antwort

7

Die Servicepoint Setup Web-Anrufe (zB mit WebClient) beheben, aber für SslStream müssen Sie ein bisschen mehr. Sie müssen die akzeptierten Sicherheitsprotokolle bei Ihrem Aufruf von AuthenticateAsClient angeben. Also statt

sslStream.AuthenticateAsClient(hostname); 

tun, um diesen

sslStream.AuthenticateAsClient(hostname, null, SslProtocols.Tls12, true); 
+0

Danke! Ich war bei weniger als vollständig hilfreich fest "die Funktion angefordert wird nicht unterstützt" Ausnahme mit einem Server nur TLS 1.2, und das hat es behoben! –

+0

Wie kann das mit C# 's Webclient funktionieren? – Tsury

Verwandte Themen