Aggiornare il servizio Web .NET per utilizzare TLS 1.2


99

Devo utilizzare TLS 1.2 per connettermi dal mio servizio web .NET a un altro che imporrà TLS 1.2. Ho trovato una risorsa che diceva che .NET 4.6 utilizza TLS 1.2 per impostazione predefinita, quindi sembrava la soluzione più semplice. Ho aggiornato il framework .NET sul server e ho riavviato. In IIS ho provato a creare un pool di applicazioni utilizzando .NET 4.6 ma 4.0 era l'unica opzione. Poi ho trovato qualcosa che diceva che sarebbe ancora 4.0 perché 4.6 è un aggiornamento "sul posto" a .NET 4.0. Quindi ho pensato che forse avevo finito. Tuttavia, su una pagina di errore che ho ricevuto per motivi non correlati, è stato detto che Microsoft .NET Framework Version:4.0.30319così sembra che non ho aggiornato con successo. Qualche suggerimento su come assicurarsi che il mio pool di applicazioni utilizzi .NET 4.6 o, più in generale, come abilitare TLS 1.2?


4
Credo che TLS12 debba essere abilitato sul server. support.quovadisglobal.com/kb/a433/…
lcryder

4
Perché i voti negativi?
nasch

Risposte:


140

In realtà abbiamo appena aggiornato un servizio web .NET a 4.6 per consentire TLS 1.2.

Quello che dice Artem sono stati i primi passi che abbiamo fatto. Abbiamo ricompilato il framework del servizio web a 4.6 e abbiamo provato a cambiare la chiave di registro per abilitare TLS 1.2, anche se questo non ha funzionato: la connessione era ancora in TLS 1.0. Inoltre, non volevamo disabilitare SLL 3.0, TLS 1.0 o TLS 1.1 sulla macchina: altri servizi web potrebbero usarlo; abbiamo ripristinato le nostre modifiche nel registro.

Abbiamo effettivamente modificato i file Web.Config per dire a IIS: "hey, eseguimi in 4.6 per favore".

Ecco le modifiche che abbiamo aggiunto nella ricompilazione web.config + in .NET 4.6:

<system.web>
    <compilation targetFramework="4.6"/> <!-- Changed framework 4.0 to 4.6 -->

    <!--Added this httpRuntime -->
    <httpRuntime targetFramework="4.6" />

    <authentication mode="Windows"/>
    <pages controlRenderingCompatibilityVersion="4.0"/>
</system.web>

E la connessione è cambiata in TLS 1.2, perché IIS ora esegue il servizio web in 4.6 (detto esplicitamente) e 4.6 utilizza TLS 1.2 per impostazione predefinita.


3
Ecco la documentazione che abbiamo utilizzato per la ricerca: HTTPRuntime , RenderingCompatibility
Etienne Faucher

1
L'ho capito: non stavo richiedendo HTTPS. Dopo averlo risolto, ha funzionato.
nasch

3
Cambiare la compilazione a 4.6 e aggiungere httpRuntime 4.6 è stato sufficiente nel nostro caso, grazie per la soluzione!
krilovich

2
Questa è assolutamente la risposta giusta. L'ho appena affrontato di recente. Ecco un post sul blog a riguardo: blog.thelevelup.com/pci-security-is-your-restaurant-ready e un progetto GitHub che fa questo: github.com/TheLevelUp/pos-tls-patcher
user24601


88

Aggiungi il codice seguente prima di creare un'istanza del client del servizio Web:

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

O per la retrocompatibilità con TLS 1.1 e versioni precedenti:

System.Net.ServicePointManager.SecurityProtocol |= SecurityProtocolType.Tls12; 

2
Sì, lo sto già facendo, ma il messaggio di errore indica ancora .NET 4.0.
nasch

12
Questa è la tua versione CLR. .Net CLR ha due versioni, 2.0 e 4.0. In IIS si specifica la versione CLR, non la versione Framework. IIS non ti dirà .Net 4.6 perché non gli interessa. Se hai compilato usando 4.6, allora stai usando 4.6.
Amy

2
TLS 1.2 è supportato da .NET 4.5 in poi
Gilberto Alexandre

5
In questo caso, | = è superiore a solo =. Sono flag binari, non sovrascrivere tutto il resto inutilmente.
Izzy

2
@ JohnWu - si prega di notare il commento di Izzy sopra. Il codice indica a .NET di utilizzare in modo esplicito SOLO TLS 1.2 durante la connessione alle risorse HTTPS. Ad esempio, se un server avesse solo TLS 1.1, il codice gli impedirebbe di connettersi poiché utilizza solo TLS 1.2. Dovresti usare | = per dire al tuo codice "prova a usare anche TLS 1.2 come opzione" quando il client e il server negoziano quale protocollo usare.
Don Cheadle

27

se usi .Net prima della 4.5 non avrai Tls12 nell'enum, quindi lo stato è esplicitamente menzionato qui

ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;

17

Tre passaggi necessari:

  1. Contrassegna esplicitamente SSL2.0, TLS1.0, TLS1.1 come vietato sul tuo computer server, aggiungendo Enabled=0e DisabledByDefault=1al tuo registro (il percorso completo è HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols). Vedere la schermata per i dettagli registro

  2. Abilitare esplicitamente TLS1.2seguendo i passaggi da 1. Usa Enabled=1e DisabledByDefault=0rispettivamente.

NOTA: verifica la versione del server: Windows Server 2003non supporta il TLS 1.2protocollo

  1. Abilita TLS1.2solo a livello di app, come suggerito sopra da @John Wu.

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

Spero che questa guida ti aiuti.

AGGIORNAMENTO Come menzionato da @Subbu: Guida ufficiale


1
Riferimento ufficiale - technet.microsoft.com/en-us/library/…
Subbu

Ciao @Artem dopo aver aggiunto il tls devo riavviare il server?
Simba

@ Simba probabilmente hai risolto questo problema, ma facendo questo solo ora NON avevo bisogno di riavviare il server.
Matt N.

5

Per me di seguito ha funzionato:

Passaggio 1: scaricato e installato l'exe del programma di installazione Web da https://www.microsoft.com/en-us/download/details.aspx?id=48137 sul server delle applicazioni. Riavviato il server delle applicazioni al termine dell'installazione.

Passaggio 2: aggiunte di seguito le modifiche nel file web.config

<system.web>
    <compilation targetFramework="4.6"/> <!-- Changed framework 4.0 to 4.6 -->
    <!--Added this httpRuntime -->
    <httpRuntime targetFramework="4.6" />
</system.web>

Passaggio 3: dopo aver completato i passaggi 1 e 2, è stato visualizzato un errore " WebForms UnobtrusiveValidationMode richiede una ScriptResourceMapping per" jquery ". Aggiungi una ScriptResourceMapping denominata jquery (case-sensitive) " e per risolvere questo errore, ho aggiunto sotto la chiave in appsettings nel mio file web.config

<appSettings>
      <add key="ValidationSettings:UnobtrusiveValidationMode" value="None" />
</appSettings>

L'aggiunta del framework di destinazione httpRuntime ha funzionato per me.
Mark Redman

0

PowerBI Embedded richiede TLS 1.2.

La risposta sopra di Etienne Faucher è la tua soluzione. collegamento rapido alla risposta precedente ... collegamento rapido alla risposta precedente ... ( https://stackoverflow.com/a/45442874 )

PowerBI richiede TLS 1.2 giugno 2020 - Questa è la tua risposta - Prendi in considerazione la possibilità di forzare il runtime IIS fino a 4.6 per forzare il comportamento TLS 1.2 predefinito che stai cercando dal framework. La risposta sopra ti dà una soluzione per la modifica della configurazione.

Sintomi : connessione TCP / IP chiusa forzata rifiutata a Microsoft PowerBI Embedded che si presenta all'improvviso nei tuoi sistemi.

Queste chiamate PowerBI smettono di funzionare con un errore di chiusura di TCP / IP duro come un firewall bloccherebbe una connessione. Di solito i passaggi di autenticazione funzionano: è quando si seleziona il servizio per un'area di lavoro specifica e gli ID di report non riesce.

Questa è la nota 2020 di Microsoft PowerBI su TLS 1.2 richiesto

PowerBIClient

metodi che mostrano questo problema

GetReportsInGroupAsync GetReportsInGroupAsAdminAsync GetReportsAsync GetReportsAsAdminAsync Microsoft.PowerBI.Api HttpClientHandler Force TLS 1.1 TLS 1.2

Cerca termini di errore per aiutare le persone a trovare questo: System.Net.Http.HttpRequestException: si è verificato un errore durante l'invio della richiesta System.Net.WebException: la connessione sottostante è stata chiusa: si è verificato un errore imprevisto durante un invio. System.IO.IOException: impossibile leggere i dati dalla connessione di trasporto: una connessione esistente è stata chiusa forzatamente dall'host remoto.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.