Mam proste wywołanie usługi internetowej, wygenerowane przez aplikację systemu Windows .NET (C #) 2.0, za pośrednictwem proxy usługi internetowej wygenerowanej przez Visual Studio, dla usługi internetowej napisanej również w C # (2.0). Działało to od kilku lat i nadal działa w kilkunastu miejscach, w których działa.
Wystąpił problem z nową instalacją w nowej witrynie. Podczas próby wywołania usługi sieci Web komunikat nie powiedzie się:
Nie można ustanowić relacji zaufania dla bezpiecznego kanału SSL / TLS
Adres URL usługi internetowej korzysta z protokołu SSL (https: //) - ale działa to od dłuższego czasu (i nadal działa) z wielu innych lokalizacji.
Gdzie patrze Czy może to być problem bezpieczeństwa między Windows i .NET, który jest unikalny dla tej instalacji? Jeśli tak, to gdzie mam skonfigurować relacje zaufania? Zgubiłem się!
Odpowiedzi:
Myśli (oparte na bólu w przeszłości):
serwerma poprawnie ustawiony zegar (tj. aby czas UTC był poprawny [zignoruj czas lokalny, jest to w dużej mierze nieistotne]) - to z pewnością ma znaczenie dla WCF, więc może wpłynąć na zwykłe SOAP?źródło
Poniższe fragmenty naprawią przypadek, w którym coś jest nie tak z certyfikatem SSL na serwerze, do którego dzwonisz. Na przykład może być samopodpisany lub nazwa hosta między certyfikatem a serwerem może być niezgodna.
To jest niebezpieczne jeśli dzwonisz do serwera poza bezpośrednią kontrolą, ponieważ nie możesz być już tak pewien, że rozmawiasz z serwerem, z którym myślisz, że jesteś podłączony. Jeśli jednak masz do czynienia z serwerami wewnętrznymi i uzyskanie „poprawnego” certyfikatu jest niepraktyczne, skorzystaj z poniższych instrukcji, aby poinformować serwis internetowy o zignorowaniu problemów z certyfikatem i odważnym żołnierzu.
Pierwsze dwa używają wyrażeń lambda, trzeci używa kodu regularnego. Pierwszy akceptuje dowolny certyfikat. Co najmniej dwa ostatnie sprawdzają, czy nazwa hosta w certyfikacie jest tą, której się spodziewasz.
... mam nadzieję, że okaże się to pomocne
źródło
ServicePointManager.ServerCertificateValidationCallback = null;
powinien przywrócić domyślne zachowanie.Bardzo proste rozwiązanie „złap wszystko” jest następujące:
Rozwiązanie od Sebastian-Castaldi jest nieco bardziej szczegółowe.
źródło
#If CONFIG = "Debug"
instrukcji, aby było aktywowane tylko w trybie debugowania. Działa świetnie!Osobiście najbardziej podoba mi się następujące rozwiązanie:
... następnie zanim poprosisz o uzyskanie błędu, wykonaj następujące czynności
Znalazłem to po konsultacji z rozwiązaniem Luke'a
źródło
Jeśli używasz systemu Windows 2003, możesz spróbować:
Odniesienie: http://www.outsystems.com/NetworkForums/ViewTopic.aspx?Topic=Web-Services:-Could-not-establish-trust-relationship-for-the-SSL/TLS- ...
źródło
Jeśli nie chcesz ślepo ufać wszystkim i zrobić wyjątek zaufania tylko dla niektórych hostów, bardziej odpowiednie jest następujące rozwiązanie.
Następnie po prostu wywołaj Ssl.EnableTrustedHosts podczas uruchamiania aplikacji.
źródło
Łukasz napisał całkiem niezły artykuł na ten temat .. całkiem prosto .. spróbuj tego
Rozwiązanie Luke'a
Powód (cytat z jego artykułu (bez przekleństwa)) „Problem z powyższym kodem polega na tym, że nie działa on, jeśli twój certyfikat nie jest prawidłowy. Dlaczego miałbym publikować na stronie internetowej z nieprawidłowym certyfikatem SSL? Jestem tani i nie chciałem płacić Verisign ani jednemu z pozostałych ** - * s za certyfikat do mojego testu, więc podpisałem go sam. Kiedy wysłałem prośbę, otrzymałem piękny wyjątek:
System.Net.WebException Połączenie podstawowe zostało zamknięte. Nie można ustanowić relacji zaufania ze zdalnym serwerem.
Nie wiem o tobie, ale dla mnie ten wyjątek wyglądał jak coś, co byłoby spowodowane głupim błędem w moim kodzie, który powodował niepowodzenie testu POST. Więc ciągle szukałem, poprawiałem i robiłem różne dziwne rzeczy. Dopiero po przejrzeniu wyszukiwarki *** n dowiedziałem się, że domyślnym zachowaniem po napotkaniu nieprawidłowego certyfikatu SSL jest zgłoszenie tego wyjątku. .. ”
źródło
Narzędzie diagnostyczne SSL firmy Microsoft może pomóc w zidentyfikowaniu problemu.
AKTUALIZACJA link został naprawiony.
źródło
Właśnie napotkałem ten problem. Moim rozwiązaniem było zaktualizowanie czasu systemowego poprzez ręczną synchronizację z serwerami czasu. Aby to zrobić, możesz:
Adjust Date/Time
Internet Time
zakładkęChange Settings
Update Now
W moim przypadku synchronizacja była niepoprawna, więc musiałem ją kliknąć kilka razy, aby poprawnie zaktualizować. Jeśli nadal będzie się niepoprawnie aktualizować, możesz nawet spróbować użyć innego serwera czasu niż lista rozwijana serwera.
źródło
Spróbuj tego:
Zauważ, że musisz pracować co najmniej z 4.5 .NET Framework
źródło
Miałem podobny problem z
.NET
aplikacją w Internet Explorerze.Rozwiązałem problem dodając certyfikat (certyfikat VeriSign Class 3 w moim przypadku) do certyfikatów zaufanych redaktorów.
Możesz uzyskać certyfikat, jeśli eksportujesz go z:
dzięki
źródło
Ten błąd działał na serwerze sieci Web z adresem URL takim jak:
ale nie było na to certyfikatu, więc dostałem DNS o nazwie
Po prostu podpowiedź do tego rozwiązania, ponieważ znalazło się na pierwszym miejscu w Google.
źródło
Dla tych, którzy mają ten problem po stronie klienta VS, po pomyślnym dodaniu odwołania do usługi i próbie wykonania pierwszego połączenia, otrzymano następujący wyjątek: „Podstawowe połączenie zostało zamknięte: nie można ustanowić relacji zaufania dla bezpiecznego kanału SSL / TLS” Jeśli używasz (podobnie jak w moim przypadku) adresu URL punktu końcowego z adresem IP i otrzymałeś ten wyjątek, prawdopodobnie prawdopodobnie będziesz musiał ponownie dodać odwołanie do usługi, wykonując następujące kroki:
Spróbuj ponownie :). Dzięki
źródło
W moim przypadku próbowałem przetestować SSL w moim środowisku Visual Studio przy użyciu IIS 7.
Tak właśnie skończyłem, aby to zadziałało:
Pod moją witryną w sekcji „Wiązania ...” po prawej stronie w IIS musiałem dodać powiązanie „https” do portu 443 i wybrać „IIS Express Development Development Certificate”.
W mojej witrynie w sekcji „Ustawienia zaawansowane ...” po prawej stronie musiałem zmienić „Włączone protokoły” z „http” na „https”.
Pod ikoną „Ustawienia SSL” wybrałem „Akceptuj” dla certyfikatów klientów.
Potem musiałem ponownie przetworzyć pulę aplikacji.
Musiałem również zaimportować certyfikat lokalnego hosta do mojego osobistego sklepu za pomocą mmc.exe.
Mój
web.config
plik został już poprawnie skonfigurowany, więc po rozwiązaniu wszystkich powyższych problemów mogłem kontynuować testowanie.źródło
Moje rozwiązanie (VB.Net, wersja „staging” (UAT) tej aplikacji musi współpracować z certyfikatem „staging”, ale nie może wpływać na żądania, gdy znajdą się w aktywnej witrynie):
źródło
Jeśli nie działa zły sertertyfikat, gdy ServerCertificateValidationCallback zwraca true; My ServerCertificateValidationCallback code:
Mój kod, który uniemożliwił wykonanie ServerCertificateValidationCallback:
Funkcja OnValidateCertificateError:
Wyłączyłem bardzo dobrze działający kod CertificateValidation i ServerCertificateValidationCallback
źródło