2016-07-01 33 views
22

Pracuję nad projektem, który musi łączyć się z witryną https. Za każdym razem, gdy się łączę, mój kod generuje wyjątek, ponieważ certyfikat tej witryny pochodzi z niezaufanej witryny. Czy istnieje sposób na ominięcie sprawdzania certyfikatu w rdzeniu http .net?pomiń niepoprawny certyfikat SSL w rdzeniu .net

Widziałem ten kod z poprzedniej wersji .NET. Chyba potrzebuję czegoś takiego.

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

Prawdopodobny duplikat [Zezwalanie niezaufanym certyfikatom SSL z HttpClient] (http://stackoverflow.com/questions/12553277/allowing-untrusted-ssl-certificates-with-httpclient) – Matyas

Odpowiedz

11

ServicePointManager.ServerCertificateValidationCallback nie jest obsługiwany w .Net Core.

Obecna sytuacja jest taka, że ​​będzie to nowy ServerCertificateCustomValidationCallback metoda na nadchodzący 4.1. * Umowa System.Net.Http (HttpClient). Zespół .NET Core finalizuje teraz umowę 4.1. Można o tym przeczytać w here on github

można wypróbować wersję Pre-Release System.Net.Http 4,1 za pomocą źródła bezpośrednio tutaj w CoreFx lub na paszę MYGET: https://dotnet.myget.org/gallery/dotnet-core

Aktualny WinHttpHandler.ServerCertificateCustomValidationCallback rozdzielczości na Github

+2

Działa to tylko w systemie Windows. Czy masz rozwiązanie dla systemu Linux? Dzięki. – Vladimir

-28

Tak, otwórz aplikację na dowolnego hakera. Świetny pomysł. Utworzenie fałszywego certyfikatu dla dowolnej witryny zajmuje mi około dwóch minut (z wbudowaną funkcjonalnością MacOS X, najprawdopodobniej dostępną w systemach Windows i Linux oraz w podobnej formie). Przekierowanie witryny nieco dłużej trwa hakera, ale nie stanowi to problemu.

Jeśli witryna ma zepsuty lub nieaktualny certyfikat, przejdziesz na stronę administratora, dobrze go kopniesz i powiesz mu, aby naprawił swoją witrynę. W żadnym wypadku nie powinieneś nawet rozważać używania https z uszkodzonym certyfikatem.

+0

To jedyne prawidłowe rozwiązanie. NIGDY nie należy pomijać sprawdzania poprawności certyfikatu bezpieczeństwa. Kropka. – Crypt32

+9

W rzeczywistości podczas sprawdzania autentyczności podpisu możesz potrzebować obejścia sprawdzania oryginalności. – Set

+0

Nie mogę się zgodzić. Na przykład zespoły ds. Wewnętrznego rozwoju u moich klientów korzystają ze specjalnego wewnętrznego wewnętrznego urzędu certyfikacji, który jest zaufany w ich sieci. Pomaga to również zweryfikować dodatkowy kod walidacji certyfikatu. – Crypt32

4

Przyszedłem tutaj, szukając odpowiedzi na ten sam problem, ale używam WCF dla NET Core. Jeśli jesteś w tej samej łodzi, użyj:

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

Globalna dla wszystkich certyfikatów i AppDomain? – Kiquenet

+0

@Kiquenet: Wierzę, że tak, tak. Sprawdź zaktualizowaną odpowiedź w innym miejscu, teraz może być lepsze rozwiązanie. To był rok. Sądzę, że możesz podklasować wystawcę, jeśli nic innego. I nie, nie ma natywnej fabryki dla HttpClient, którą znam. Jeśli potrzebujesz więcej funkcjonalności, spójrz na RestClient. –

12

Można zastąpić czek cert SSL na połączenia HTTP z pomocą anonimowej funkcji zwrotnej jak ten

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

Dodatkowo, proponuję użyć wzór fabryczny dla HttpClient, ponieważ jest to obiekt współdzielony, którego nie można natychmiast usunąć, a zatem connections will stay open.

+1

Używam .Net Core 1.0 i to działało dla mnie. Jako heads up wygląda. Net Core 2.0 dodał właściwość 'HttpClient' o nazwie' DangerousAcceptAnyServerCertificateValidator', która zapewnia sposób, aby to działało na MacOSX. Więcej informacji tutaj - https://github.com/dotnet/corefx/pull/19908 –

+0

Używając tego z AWS Lambda, .NET Core 1.0 poprawił to, co uniemożliwiało mi połączenie z wewnętrznym HTTPS z niestandardowym certyfikatem głównego CA. – QuickNull

+0

Dowolny "wzór fabryczny" dla 'HttpClient'? – Kiquenet

Powiązane problemy