2015-04-16 9 views
22

nostro client .NET WCF, il WebRequest chiamata, compilato per un EXE Windows, in esecuzione su Win2012-R2, si rifiuta di connettersi a un server Web che emerge SOLO TLS 1.2Client WCF in .NET 4.5.1: Come abilitare TLS 1.2 quando si utilizza WebRequest?

Sappiamo che il sostegno Win2012 e 4.5x .NET TLS 1.2

Non abbiamo problemi quando il server supera TLS 1.0. Il problema si verifica solo quando il server a cui ci connettiamo ha DISABLED TLS 1.0, 1.1 e SSL2 e SSL3. Il server SOLO superfici TLS 1.2. Chrome e firefox (su Win 7 e versioni successive) si collegano perfettamente al server (nessun avviso o problema SSL di alcun tipo).

Il certificato del server è% 100 OK.

Il problema è che WebRequest non riesce a connettersi in questa situazione.

Cosa è necessario impostare nel codice in modo che il nostro utilizzo di WebRequest si connetterà a sistemi che possono eseguire TLS 1.2, 1.1, 1.0 e/o SSL v3?

+0

Più che probabile, questo è il codice abilitato sul sistema operativo. Quale sistema operativo stai usando? Hai applicato tutte le patch e i service pack? Hai provato ad aggiornare a .NET 4.5.2? –

+0

@ErikFunkenbusch No, scusa, non sei corretto. Questo non è un problema di abilitazione dei cipher (su Win2012-R2, tutti i cifrari sono presenti e tutti sono abilitati). Né si tratta di una limitazione di .NET 4.51, il supporto TLS 1.2 è presente in .NET 4.x. La domanda è come abilitarlo, dato che .NET stesso non è abilitato per 1.2 di default. – Jonesome

+0

Stai dicendo che non si connetterà a nessuna connessione sicura per qualsiasi sito? –

risposta

26

Mentre non è facile capire, la struttura necessaria è:

System.Net.ServicePointManager.SecurityProtocol

Questo può essere utilizzato per attivare e disattivare livelli TLS nell'ambiente WCF.

Inoltre, è possibile vedere ciò che WCF è attualmente impostato utilizzando:

Console.WriteLine(System.Net.ServicePointManager.SecurityProtocol.ToString()); 

Si ringraziano: How do I disable SSL fallback and use only TLS for outbound connections in .NET? (Poodle mitigation)

+1

La versione del server Windows è pertinente alla correzione oppure funziona indipendentemente dalla versione di Windows se si imposta appropriatamente 'System.Net.ServicePointManager.SecurityProtocol'? – mmcrae

+3

@mmcrae La versione di Windows è rilevante nella misura in cui se il sistema operativo stesso non supporta TLS 1.2 (tramite schannel dll), quindi chiedendo in .NET non sta per darlo a voi ... Vedi https: // blogs.msdn.microsoft.com/kaushal/2011/10/02/support-for-ssltls-protocols-on-windows/ – Jonesome

+0

Mentre questa risposta è corretta, imposta un'impostazione di programma estesa. Cosa succede se desidero utilizzare un protocollo diverso per chiamate di servizio diverse nello stesso programma? – Esko

25

Si dovrebbe lavorare con .NET 4.5 o sopra la versione e aggiungere questa riga nel vostro codice:

System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; 
+0

Grazie solo la risposta di cui avevo bisogno. – Blackvault

+1

Non è necessario toccare il codice: https://docs.microsoft.com/en-us/officeonlineserver/enable-tls-1-1-and-tls-1-2-support-in-office-online- server –