Jak rozwiązać " nie można ustanowić relacji zaufania dla bezpiecznego kanału SSL / TLS z urzędem"

Naprawdę myślałem, że naprawiłem ten problem, ale wcześniej był tylko przebrany.

Mam usługę WCF hostowaną w IIS 7 przy użyciu HTTPS. Kiedy przeglądam tę stronę w Internet Explorerze, działa to jak urok, dzieje się tak dlatego, że dodałem certyfikat do lokalnego sklepu głównego urzędu certyfikacji.

Rozwijam się na jednej maszynie, więc klient i serwer to ta sama maszyna. Certyfikat jest podpisywany samodzielnie bezpośrednio z aplikacji IIS 7 management snap in.

Ciągle dostaję ten błąd teraz...

Nie można ustanowić relacji zaufania dla bezpiecznego kanału SSL / TLS z autorytetem.

... po wywołaniu z konsoli klienta.

Dałem sobie ręcznie 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 jeszcze mogę wygląda na to, że wyczerpałem wszystkie możliwości, dlaczego nie mogę się połączyć?

Author: Jeroen, 2009-11-16

15 answers

Jako obejście możesz dodać obsługę do ServicePointManager ' s ServerCertificateValidationCallback Po stronie klienta:

System.Net.ServicePointManager.ServerCertificateValidationCallback +=
    (se, cert, chain, sslerror) =>
        {
            return true;
        };

Ale należy pamiętać, że to nie jest dobra praktyka ponieważ całkowicie ignoruje certyfikat serwera i mówi menedżerowi punktów usługowych, że każdy certyfikat jest w porządku, co może poważnie zagrozić bezpieczeństwu klienta. Możesz to udoskonalić i wykonać niestandardowe sprawdzenie(dla nazwy certyfikatu, skrótu itp.). przynajmniej możesz ominąć problemy podczas programowania podczas korzystania z testu certyfikaty.

 178
Author: Joachim Kerschbaumer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-14 09:33:42

Kiedy mam ten problem, to dlatego, że klient.config miał swoje punkty końcowe:

 https://myserver/myservice.svc 

Ale certyfikat oczekiwał

 https://myserver.mydomain.com/myservice.svc

Zmiana punktów końcowych, aby pasowały do FQDN serwera rozwiązuje mój problem. Wiem, że to nie jedyna przyczyna tego problemu.

 36
Author: Mike Cheel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-02-08 20:48:44

Twój problem pojawia się, ponieważ używasz samodzielnie podpisanego klucza. Klient nie ufa temu kluczowi, ani sam klucz nie zapewnia łańcucha do walidacji ani listy odwołań certyfikatu.

Masz kilka opcji-możesz

  1. Wyłącz sprawdzanie poprawności certyfikatu klient (zły ruch, człowiek w środkowe ataki obfitują)

  2. Użyj makecert, aby utworzyć root CA i utwórz z tego certyfikaty (ok move, ale nadal nie ma CRL)

  3. Utwórz wewnętrzny korzeń CA za pomocą Windows Certificate Server lub inne Rozwiązanie PKI to Zaufaj temu rootowi cert (a bit of a pain to manage)

  4. Zakup certyfikatu SSL od jednego zaufanego CAs (drogie)

 19
Author: blowdart,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-11-16 15:40:57

Dwie pierwsze używają lambda, trzecia używa zwykłego kodu... mam nadzieję, że okaże się to pomocne

            //Trust all certificates
            System.Net.ServicePointManager.ServerCertificateValidationCallback =
                ((sender, certificate, chain, sslPolicyErrors) => true);

            // trust sender
            System.Net.ServicePointManager.ServerCertificateValidationCallback
                = ((sender, cert, chain, errors) => cert.Subject.Contains("YourServerName"));

            // validate cert by calling a function
            ServicePointManager.ServerCertificateValidationCallback += new RemoteCertificateValidationCallback(ValidateRemoteCertificate);

    // callback used to validate the certificate in an SSL conversation
    private static bool ValidateRemoteCertificate(object sender, X509Certificate cert, X509Chain chain, SslPolicyErrors policyErrors)
    {
        bool result = false;
        if (cert.Subject.ToUpper().Contains("YourServerName"))
        {
            result = true;
        }

        return result;
    }
 19
Author: Sebastian Castaldi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-03 12:45:16

Rozwiązanie jednoliniowe. Dodaj to w dowolnym miejscu przed wywołaniem serwera po stronie klienta:

System.Net.ServicePointManager.ServerCertificateValidationCallback += delegate { return true; };

Powinno to być używane tylko do celów testowych, ponieważ klient pominie kontrole bezpieczeństwa SSL / TLS.

 11
Author: Gaspa79,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-15 20:16:52

Napotkałem ten sam problem i udało mi się go rozwiązać dwoma rozwiązaniami: Najpierw użyłem przystawki MMC "certyfikaty" dla "konta komputerowego" i przeciągnąłem certyfikat z podpisem własnym do folderu "Zaufane główne urzędy certyfikacji". Oznacza to, że lokalny komputer (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 za pomocą inne nazwisko. Spowodowało to niedopasowanie podczas walidacji certyfikatu. Wygenerowaliśmy certyfikat dla komputera.szef.lokalny, ale dostęp do usługi internetowej za pomocą https://computer.internaldomain.companydomain.com . Kiedy zmieniliśmy adres URL na ten, który został użyty do wygenerowania certyfikatu, nie otrzymaliśmy więcej błędów.

Być może samo przełączanie adresów URL zadziałałoby, ale czyniąc certyfikat zaufanym, unikasz również czerwonego ekranu w przeglądarce Internet Explorer, gdzie mówi ci, że nie ufa certyfikat.

 9
Author: Jeroen-bart Engelen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-05-24 09:58:27

Wykonaj następujące kroki:

  1. Open service link W IE.

  2. Kliknij wzmiankę o błędzie certyfikatu na pasku adresu i kliknij Wyświetl certyfikaty.

  3. Czek wystawiony na: imię i nazwisko.

  4. Przyjmij wydaną nazwę i zastąp localhost wzmiankę w usłudze i kliencie endpoint base address name pełną kwalifikowaną nazwą domeny (FQDN).

Na przykład: https://localhost:203/SampleService.svc Na https: / / INL-126166-.groupinfra.com : 203 / SampleService. svc

 7
Author: Rahul Rai,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-15 17:49:58

Miałem ten sam problem. Dodałem również certyfikaty CA w lokalnym sklepie, ale zrobiłem w niewłaściwy sposób.

Używając konsoli mmc (Start - > Run - > mmc) należy dodać certyfikaty jako konto usługi (wybierając konto usługi IIS) lub konto komputera (dodaje się dla każdego konta na komputerze)

Oto obraz tego, o czym mówię Dodaj snap-in dla konta usługi lub konta komputera

Od teraz możesz dodać certyfikaty CAs ( zaufany Root CAs i Intermediate CAs ), a wszystko będzie dobrze działać

 4
Author: dar0x,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-26 10:48:12

Miałem podobny problem z certyfikatem własnoręcznie podpisanym. Mogę go rozwiązać, używając nazwy certyfikatu takiej samej jak FQDN serwera.

Idealnie, część SSL powinna być zarządzana po stronie serwera. Klient nie musi instalować żadnego certyfikatu dla SSL. Również niektóre z postów wymienionych o omijaniu SSL z kodu klienta. Ale całkowicie się z tym nie zgadzam.

 3
Author: Umesh Bhavsar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-16 23:54:32

Właśnie przeciągnąłem certyfikat do folderu "Trusted Root Certification Authorities" i voila wszystko działało ładnie.

Oh. I po raz pierwszy dodałem następujący wiersz polecenia administratora:
netsh http add urlacl url=https://+:8732/Servicename user=NT-MYNDIGHET\INTERAKTIV

Nie jestem pewien, jakiej nazwy potrzebujesz dla użytkownika (moja jest norweska, jak widać !): user=NT-AUTHORITY/INTERACTIVE ?

Możesz zobaczyć wszystkie istniejące urlacl ' y, wydając polecenie: netsh http show urlacl

 3
Author: Haguna,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-04 06:52:16

Oprócz powyższych odpowiedzi, możesz napotkać ten błąd, jeśli twój Klient uruchamia złą wersję TLS, na przykład jeśli serwer obsługuje tylko TLS 1.2.

Możesz to naprawić używając:

            ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; //tested in .NET 4.5
 3
Author: NMrt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-25 01:28:19

Miało to miejsce podczas próby połączenia się z usługą WCF używając tylko nazwy hosta, np. https://host/MyService.svc Podczas używania certyfikatu powiązanego z nazwą np. host.mysite.com.

Przełączanie na https://host.mysite.com/MyService.svc i to rozwiązało sprawę.

 1
Author: sonia,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-06 05:34:54

Miało to miejsce podczas próby połączenia się z usługą WCF poprzez. IP np. https://111.11.111.1:port/MyService.svc podczas używania certyfikatu powiązanego z nazwą np. mysite.com.

Przejście na https://mysite.com:port/MyService.svc rozwiązało to.

 0
Author: lko,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-08 10:35:33

Po prostu Naprawiono podobny problem.

Zdałem sobie sprawę, że mam pulę aplikacji, która była uruchomiona pod kontem, które miało tylko uprawnienia do odczytu nad certyfikatem, że zostało użyte.

Aplikacja. NET mogła poprawnie pobrać certyfikat, ale ten wyjątek został wyrzucony tylko po wywołaniu GetRequestStream ().

Uprawnienia certyfikatów można zarządzać za pomocą MMC console

 0
Author: Alberto,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-16 05:50:03

Dodaj to do kodu klienta:

ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(
    delegate
    {
        return true;
    });
 -6
Author: user662285,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-04-14 12:33:31