2016-07-01 77 views
22

Sto lavorando su un progetto che deve connettersi a un sito https. Ogni volta che mi collego, il mio codice genera un'eccezione perché il certificato di quel sito proviene da un sito non affidabile. C'è un modo per aggirare il certificato di controllo in. Net http?bypass certificato SSL non valido in .net core

Ho visto questo codice dalla versione precedente di .NET. Credo di aver bisogno di qualcosa del genere.

ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, sslPolicyErrors) => true; 
+0

Possibile duplicato di [Consentire certificati SSL non attendibili con HttpClient] (http://stackoverflow.com/questions/12553277/allowing-untrusted-ssl-certificates-with-httpclient) – Matyas

risposta

11

ServicePointManager.ServerCertificateValidationCallback non è supportato in .Net Core.

situazione attuale è che si tratterà di un nuovo ServerCertificateCustomValidationCallback metodo per la prossima 4.1. * Contratto System.Net.Http (HttpClient). Il team di .NET Core sta ultimando il contratto 4.1 ora. Si può leggere su questo in here on github

È possibile provare la versione pre-release di System.Net.Http 4.1 utilizzando le fonti direttamente qui in CoreFx o feed MYGET: https://dotnet.myget.org/gallery/dotnet-core

corrente WinHttpHandler.ServerCertificateCustomValidationCallback definizione su Github

+2

Questo funziona solo su Windows. Hai una soluzione per Linux? Grazie. – Vladimir

-28

Sì, apri la tua app a qualsiasi hacker. Ottima idea Sono necessari circa due minuti per creare un certificato falso per qualsiasi sito (con funzionalità integrate di MacOS X, molto probabilmente disponibile su Windows e Linux e in forma simile). Il reindirizzamento del tuo sito impiega un hacker un po 'più a lungo, ma non è un problema.

Se il sito ha un certificato scaduto o obsoleto, allora vai all'amministratore del sito, dagli un bel calcio, e digli di aggiustare il suo sito. In nessuna circostanza si dovrebbe mai considerare di utilizzare https con un certificato rotto.

+0

Questa è l'unica soluzione valida. NON superare mai la convalida del certificato di sicurezza. Periodo. – Crypt32

+9

In realtà, potrebbe essere necessaria la convalida di bypass durante lo sviluppo, ad esempio se si dispone di un certificato autofirmato. – Set

+0

Non posso essere d'accordo. Ad esempio, i team di sviluppo interni dei miei clienti utilizzano CA interne per lo sviluppo speciale, che sono affidabili all'interno della loro rete. Ciò aiuta a convalidare anche il codice di convalida del cert extra. – Crypt32

4

Sono venuto qui cercando una risposta allo stesso problema, ma sto usando WCF per NET Core. Se siete nella stessa barca, utilizzare:

client.ClientCredentials.ServiceCertificate.SslCertificateAuthentication = 
    new X509ServiceCertificateAuthentication() 
    { 
     CertificateValidationMode = X509CertificateValidationMode.None, 
     RevocationMode = X509RevocationMode.NoCheck 
    }; 
+0

Globale per tutti i certificati e AppDomain? – Kiquenet

+0

@Kiquenet: credo di si, si. Cerca una risposta aggiornata altrove, potrebbe esserci una soluzione migliore ora. È passato un anno. Immagino che potresti sottoclassi l'autenticatore se non altro. E no, non esiste una fabbrica nativa per HttpClient che conosca. Se hai bisogno di più funzionalità, guarda a RestClient. –

12

è possibile ignorare controllo CERT dello SSL in una chiamata HTTP con l'una funzione di callback anonima come questo

using (var httpClientHandler = new HttpClientHandler()) 
{ 
    httpClientHandler.ServerCertificateCustomValidationCallback = (message, cert, chain, errors) => { return true; }; 
    using (var client = new HttpClient(httpClientHandler)) 
    { 
     // Make your request... 
    } 
} 

Inoltre, vi suggerisco di utilizzare un modello di fabbrica per HttpClient perché è un oggetto condiviso che potrebbe non essere smaltito immediatamente e quindi connections will stay open.

+1

Sto usando .Net Core 1.0 e questo ha funzionato per me. A prima vista sembra che .Net Core 2.0 abbia aggiunto una proprietà 'HttpClient' chiamata' DangerousAcceptAnyServerCertificateValidator' che fornisce un modo per farlo funzionare su MacOSX. Maggiori informazioni qui - https://github.com/dotnet/corefx/pull/19908 –

+0

Utilizzando questo con AWS Lambda, .NET Core 1.0 ha corretto ciò che mi impediva di connettermi a un HTTPS interno con un certificato CA radice personalizzato. – QuickNull

+0

Qualunque 'modello di fabbrica' per' HttpClient'? – Kiquenet

Problemi correlati