Naprawdę myślałem, że naprawiłem ten problem, ale wcześniej był on tylko zamaskowany.
Mam usługę WCF hostowaną w usługach IIS 7 przy użyciu protokołu HTTPS. Kiedy przejść do tej strony w przeglądarce Internet Explorer, to działa jak czar, to dlatego, że nie dodaje certyfikat do lokalnego sklepu urzędzie certyfikacji korzeń.
Programuję na 1 maszynie, więc klient i serwer to ta sama maszyna. Certyfikat jest samopodpisywany bezpośrednio z przystawki zarządzania usługami IIS 7.
Ciągle otrzymuję ten błąd teraz ...
Nie można ustanowić relacji zaufania dla bezpiecznego kanału SSL / TLS z uprawnieniami.
... przy wywołaniu z konsoli klienta.
Ręcznie nadałem sobie uprawnienia i usługę sieciową do certyfikatu, używając findprivatekey
i używając cacls.exe
.
Próbowałem połączyć się z usługą za pomocą SOAPUI i to działa, więc musi to być problem w mojej aplikacji klienckiej, która jest kodem opartym na tym, co kiedyś działało z http.
Gdzie indziej mogę szukać. Wydaje mi się, że wyczerpałem wszystkie możliwości, dlaczego nie mogę się połączyć?
źródło
Odpowiedzi:
Jako obejście można dodać do obsługi
ServicePointManager
„sServerCertificateValidationCallback
po stronie klienta:należy jednak pamiętać, że nie jest to dobra praktyka, ponieważ całkowicie ignoruje certyfikat serwera i informuje menedżera punktu usług, że każdy certyfikat jest prawidłowy, co może poważnie zagrozić bezpieczeństwu klienta. Możesz to udoskonalić i przeprowadzić niestandardowe sprawdzenie (nazwy certyfikatu, skrótu itp.). przynajmniej możesz ominąć problemy podczas programowania, używając certyfikatów testowych.
źródło
Kiedy mam ten problem, to dlatego, że client.config miał swoje punkty końcowe takie jak:
ale certyfikat się spodziewał
Zmiana punktów końcowych, aby pasowały do nazwy FQDN serwera, rozwiązuje mój problem. Wiem, że to nie jedyna przyczyna tego problemu.
źródło
pierwsze dwa używają lambdy, trzeci używa zwykłego kodu ... mam nadzieję, że uznasz to za pomocne
źródło
Twój problem pojawia się, ponieważ używasz klucza z podpisem własnym. Klient nie ufa temu kluczowi, ani sam klucz nie zapewnia łańcucha do weryfikacji ani listy odwołania certyfikatów.
Masz kilka opcji - możesz
wyłącz walidację certyfikatu na kliencie (zły ruch, obfitują ataki man in the middle)
użyj makecert, aby utworzyć główny ośrodek certyfikacji i utworzyć z niego certyfikaty (ok, ruch, ale nadal nie ma CRL)
utwórz wewnętrzny główny urząd certyfikacji za pomocą serwera certyfikatów systemu Windows lub innego rozwiązania PKI, a następnie zaufaj temu certyfikatowi głównemu (zarządzanie to trochę uciążliwe)
kupić certyfikat SSL od jednego z zaufanych urzędów certyfikacji (drogie)
źródło
Rozwiązanie w jednej linii. Dodaj to w dowolnym miejscu przed wywołaniem serwera po stronie klienta:
Powinno to być używane tylko do celów testowych, ponieważ klient pominie testy bezpieczeństwa SSL / TLS.
źródło
Napotkałem ten sam problem i mogłem go rozwiązać dwoma rozwiązaniami: Najpierw użyłem przystawki MMC „Certyfikaty” dla „Konta komputera” i przeciągnąłem certyfikat z podpisem własnym do folderu „Zaufane główne urzędy certyfikacji” . Oznacza to, że komputer lokalny (ten, który wygenerował certyfikat) będzie teraz ufał temu certyfikatowi. Po drugie, zauważyłem, że certyfikat został wygenerowany dla jakiejś wewnętrznej nazwy komputera, ale usługa internetowa była dostępna przy użyciu innej nazwy. Spowodowało to niezgodność podczas walidacji certyfikatu. Wygenerowaliśmy certyfikat dla computer.operations.local, ale uzyskaliśmy dostęp do usługi internetowej przy użyciu https://computer.internaldomain.companydomain.com . Kiedy zmieniliśmy adres URL na ten używany do generowania certyfikatu, nie było więcej błędów.
Może samo przełączenie adresów URL by zadziałało, ale dzięki zaufaniu certyfikatu unikniesz również czerwonego ekranu w programie Internet Explorer, który informuje, że nie ufa certyfikatowi.
źródło
Jeśli używasz .net core, spróbuj tego:
źródło
Wykonaj następujące kroki:
Otwórz łącze serwisowe w IE.
Kliknij wzmiankę o błędzie certyfikatu na pasku adresu i kliknij Wyświetl certyfikaty.
Czek wystawiony na: nazwisko.
Weź wystawioną nazwę i zastąp wzmiankę localhost w nazwie adresu podstawowego punktu końcowego usługi i klienta na w pełni kwalifikowaną nazwę domeny (FQDN).
Na przykład: https: // localhost : 203 / SampleService.svc Do https: // INL-126166-.groupinfra.com : 203 / SampleService.svc
źródło
Oprócz powyższych odpowiedzi możesz napotkać ten błąd, jeśli Twój klient ma niewłaściwą wersję TLS, na przykład jeśli serwer działa tylko z TLS 1.2.
Możesz to naprawić, używając:
źródło
Miałem ten sam problem. Dodałem też certyfikaty CA w lokalnym sklepie, ale zrobiłem to w NIEPRAWIDŁOWY sposób.
Używając konsoli mmc (Start -> Uruchom -> mmc ) należy dodać przystawkę Certyfikaty jako konto usługi (wybierając konto usługi IIS) lub konto komputera (dodaje się do każdego konta na komputerze)
Tutaj obraz tego, o czym mówię
Od teraz możesz dodawać certyfikaty urzędów certyfikacji ( zaufane główne urzędy certyfikacji i pośrednie urzędy certyfikacji ) i wszystko będzie działać dobrze
źródło
Miałem podobny problem z certyfikatem z podpisem własnym. Mogłem rozwiązać ten problem, używając nazwy certyfikatu takiej samej jak FQDN serwera.
W idealnym przypadku część SSL powinna być zarządzana po stronie serwera. Klient nie musi instalować żadnego certyfikatu SSL. Ponadto niektóre posty wspomniały o omijaniu SSL z kodu klienta. Ale całkowicie się z tym nie zgadzam.
źródło
Po prostu przeciągnąłem certyfikat do folderu „Zaufane główne urzędy certyfikacji” i wszystko działało dobrze.
O. I najpierw dodałem następujące z wiersza polecenia administratora:
Nie jestem pewien, jakiej nazwy potrzebujesz dla użytkownika (moja jest norweska, jak widzisz!)
user=NT-AUTHORITY/INTERACTIVE
:?Możesz zobaczyć wszystkie istniejące adresy URL, wydając polecenie:
netsh http show urlacl
źródło
Wystąpiło to podczas próby nawiązania połączenia z usługą WCF za pośrednictwem. IP np.
https://111.11.111.1:port/MyService.svc
podczas używania certyfikatu powiązanego z nazwą np. mysite.com.Przełączam się na
https://mysite.com:port/MyService.svc
rozwiązany.źródło
Wystąpiło to podczas próby połączenia się z usługą WCF przy użyciu tylko nazwy hosta, np . Https: //host/MyService.svc, podczas korzystania z certyfikatu powiązanego z nazwą, np. Host.mysite.com.
Przełączenie na https://host.mysite.com/MyService.svc i to rozwiązało problem.
źródło
Właśnie rozwiązałem podobny problem.
Uświadomiłem sobie, że mam pulę aplikacji działającą na koncie, które miało tylko uprawnienia do odczytu certyfikatu, którego było używane.
Aplikacja .NET mogła poprawnie pobrać certyfikat, ale ten wyjątek został zgłoszony tylko wtedy, gdy wywołano GetRequestStream ().
Uprawnieniami do certyfikatów można zarządzać za pomocą konsoli MMC
źródło
W przypadku korzystania z .net core podczas programowania można ominąć sprawdzanie poprawności certyfikatu przy użyciu dyrektyw kompilatora. W ten sposób zweryfikuje certyfikat tylko do wydania, a nie do debugowania:
źródło
Dodaj to do swojego kodu klienta:
źródło