Nie można ustanowić relacji zaufania dla bezpiecznego kanału SSL / TLS-SOAP

[[0]} mam proste wywołanie usługi internetowej, generowane przez aplikację. Net (C#) 2.0 windows, za pośrednictwem serwera proxy usługi internetowej generowanego przez Visual Studio, dla usługi internetowej również napisanej w C #(2.0). Działa to od kilku lat i nadal działa w kilkunastu miejscach, w których działa.

Nowa instalacja w nowej witrynie napotyka problem. Podczas próby wywołania usługi internetowej, nie powiedzie się z Komunikatem:

Nie można ustanowić relacji zaufania dla bezpieczeństwa SSL/TLS kanał

Adres URL usługi internetowej wykorzystuje SSL (https://) -- ale to działa od dłuższego czasu (i nadal to robi) z wielu innych lokalizacji.

Gdzie szukać? 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 założyć relacje zaufania? Zgubiłem się!

Author: Amirhossein Mehrvarzi, 2009-04-01

15 answers

Myśli (oparte na bólu w przeszłości):

  • Czy masz DNS I line-of-sight do serwera?
  • Czy używasz poprawnej nazwy z certyfikatu?
  • czy certyfikat jest nadal ważny?
  • czy źle skonfigurowany load balancer psuje wszystko?
  • czy nowy Serwer ma ustawiony poprawnie zegar (tzn. tak, aby czas UTC był prawidłowy [ ignoruj czas lokalny, jest on w dużej mierze nieistotny]) - to z pewnością ma znaczenie dla WCF, więc może mieć wpływ zwykłe mydło?
  • czy jest problem z łańcuchem zaufania certyfikatów? jeśli przeglądasz z serwera do usługi soap, czy możesz uzyskać SSL?
  • powiązane z powyższym-czy certyfikat został zainstalowany we właściwym miejscu? (Kopia może być potrzebna w zaufanych głównych urzędach certyfikacyjnych)
  • czy serwer proxy na poziomie maszyny ustawiony jest poprawnie? (który różni się od proxy użytkownika); patrz proxycfg dla XP / 2003 (nie jestem pewien co do Vista itp)
 150
Author: Marc Gravell,
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
2018-01-18 11:42:36

Poniższe fragmenty naprawią przypadek, gdy coś jest nie tak z certyfikatem SSL na serwerze, na który dzwonisz. Na przykład może to być podpis własny lub nazwa hosta między certyfikatem a serwerem może się nie zgadzać.

Jest to niebezpieczne, jeśli wywołujesz serwer poza Twoją bezpośrednią kontrolą, ponieważ nie możesz być już tak pewny, że rozmawiasz z serwerem, z którym myślisz, że jesteś połączony. Jeśli jednak masz do czynienia z serwerami wewnętrznymi i uzyskanie" poprawnego " certyfikatu nie jest praktyczne, użyj poniższego, aby powiedzieć serwisowi internetowemu, aby zignorował problemy z certyfikatem i odważnie walczył.

Pierwsze dwa używają wyrażeń lambda, trzecie używają kodu regularnego. Pierwszy akceptuje dowolny certyfikat. Ostatnie dwa sprawdzają przynajmniej, czy nazwa hosta w certyfikacie jest tą, której oczekujesz.
... 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;
}
 334
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
2015-11-03 14:17:14

Bardzo proste rozwiązanie "Złap Wszystko" Jest Takie:

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

Rozwiązanie Sebastiana-castaldi jest nieco bardziej szczegółowe.

 147
Author: Remy,
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-03-18 18:00:00

Osobiście najbardziej podoba mi się następujące rozwiązanie:

using System.Security.Cryptography.X509Certificates;
using System.Net.Security;

... następnie przed żądaniem uzyskania błędu wykonaj następujące czynności

System.Net.ServicePointManager.ServerCertificateValidationCallback = delegate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) { return true; };

Znalazłem to po konsultacji Luke ' s Solution

 30
Author: cusman,
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-02-26 22:59:24

Jeśli używasz systemu Windows 2003, możesz spróbować tego:

Otwórz Microsoft Management Console (Start -- > Run -- > mmc.exe);

Wybierz Plik --> Dodaj/Usuń przystawkę;

W zakładce Standalone wybierz Add;

Wybierz przystawkę Certyfikaty i kliknij Dodaj;

W kreatorze wybierz komputer Konto, a następnie wybierz lokalny Komputer. Naciśnij przycisk Zakończ, aby zakończyć wizard;

Zamknij okno dialogowe Dodaj/Usuń przystawkę;

Przejdź do Certificates (Local Komputer) i wybrać sklep do import:

Jeśli posiadasz certyfikat Root CA dla firmy, która wydała certyfikat, wybierz zaufany Root Jednostki Certyfikujące;

Jeśli posiadasz certyfikat na sam serwer, wybierz inne osoby

Kliknij prawym przyciskiem myszy sklep i wybierz Wszystkie Zadania -- > Import

Postępuj zgodnie z kreatorem i podaj plik certyfikatu, który posiadasz;

Po tym, po prostu uruchom ponownie IIS i spróbuj ponownie dzwonię do serwisu internetowego.

Odniesienie: http://www.outsystems.com/NetworkForums/ViewTopic.aspx?Topic=Web-Services:-Could-not-establish-trust-relationship-for-the-SSL/TLS-...

 17
Author: Diogo,
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-03-25 00:10:56

Jeśli nie chcesz ślepo ufać wszystkim i zrobić wyjątek zaufania tylko dla niektórych hostów, poniższe rozwiązanie jest bardziej odpowiednie.

public static class Ssl
{
    private static readonly string[] TrustedHosts = new[] {
      "host1.domain.com", 
      "host2.domain.com"
    };

    public static void EnableTrustedHosts()
    {
      ServicePointManager.ServerCertificateValidationCallback = 
      (sender, certificate, chain, errors) =>
      {
        if (errors == SslPolicyErrors.None)
        {
          return true;
        }

        var request = sender as HttpWebRequest;
        if (request != null)
        {
          return TrustedHosts.Contains(request.RequestUri.Host);
        }

        return false;
      };
    }
}

Następnie po prostu zadzwoń do Ssl.EnableTrustedHosts po uruchomieniu aplikacji.

 14
Author: Gregor Slavec,
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-10-08 07:58:09

Narzędzie Diagnostyczne SSL firmy Microsoft może pomóc w zidentyfikowaniu problemu.

UPDATE link został już naprawiony.

 7
Author: sipwiz,
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-09-30 04:07:23

Łukasz napisał na ten temat całkiem niezły artykuł .. całkiem prosto .. spróbuj tego

Rozwiązanie Łukasza

Reason (cytat z jego artykułu (minus przeklinanie)) ".. Problem z powyższym kodem polega na tym, że nie działa ON, jeśli certyfikat nie jest ważny. Dlaczego miałbym publikować na stronie internetowej z nieprawidłowym certyfikatem SSL? Bo jestem tania i nie mam ochoty płacić Verisignowi ani jednemu z **-*s jak cert do mojego pudełka testowego więc sam podpisałem to. Kiedy wysłałem prośbę, rzuciłem na mnie piękny wyjątek:

System.Net. WebException podstawowe połączenie zostało zamknięte. Nie można nawiązać relacji zaufania ze zdalnym serwerem.

Nie wiem jak wy, ale dla mnie ten wyjątek wyglądał jak coś, co spowodowałoby głupi błąd w kodzie, który powodował awarię posta. Więc szukałam, poprawiałam i robiłam różne dziwne rzeczy. Dopiero po wygooglowaniu tego * * * n okazało się, że domyślnym zachowaniem po napotkaniu nieprawidłowego certyfikatu SSL jest wyrzucenie tego wyjątku. .."

 6
Author: Hans,
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-25 19:36:27

Właśnie napotkałem ten problem. Moja rozdzielczość polegała na aktualizacji czasu systemowego poprzez ręczną synchronizację z serwerami czasu. Aby to zrobić możesz:

  • Kliknij prawym przyciskiem myszy zegar na pasku zadań
  • Wybierz Adjust Date/Time
  • Wybierz kartę Internet Time
  • Kliknij Change Settings
  • Wybierz Update Now

W moim przypadku synchronizacja była nieprawidłowa, więc musiałem kliknąć kilka razy, zanim zaktualizował się poprawnie. Jeśli nadal aktualizuje się nieprawidłowo, możesz nawet spróbować użyć innego czasu serwer z listy rozwijanej Serwera.

 3
Author: Chris - Haddox Technologies,
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-02-22 16:09:16

Miałem podobny problem w .NET aplikacji w Internet Explorerze.

Rozwiązałem problem z dodaniem certyfikatu (w moim przypadku certyfikat VeriSign klasy 3) do certyfikatów zaufanych edytorów.

Przejdź do Opcje internetowe -> treści - > wydawcy i zaimportuj je

Możesz otrzymać certyfikat, jeśli wyeksportujesz go z:

Opcje Internetowe -> Content -> Certyfikaty -> Intermediate Certification Authorities - > VeriSign Class 3 Public Primary Certification Authority-G5

 2
Author: debiasej,
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-25 14:07:40

Spróbuj tego:

System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12;

Zauważ, że musisz pracować przynajmniej z 4.5. NET framework

 2
Author: Manuel Roldan,
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
2018-05-15 12:23:57

Miałem ten błąd działający na serwerze internetowym z adresem URL:

a.b.domain.com

Ale nie było na to certyfikatu, więc dostałem DNS o nazwie

a_b.domain.com

Wystarczy umieścić podpowiedź do tego rozwiązania tutaj, ponieważ to wyszło na górę w google.

 1
Author: Thomas Koelle,
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-01-22 13:28:26

Dla tych, którzy mają ten problem po stronie klienta VS po pomyślnym dodaniu referencji usługi i próbie wykonania pierwszego połączenia dostał ten 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 (jak w moim przypadku) adresu URL punktu końcowego z adresem IP i otrzymałeś ten wyjątek, prawdopodobnie powinieneś ponownie dodać odniesienie do usługi, wykonując następujące kroki:

  • Otwórz adres URL punktu końcowego na Internet Explorer.
  • Kliknij na Błąd certyfikatu (czerwona ikona na pasku adresu)
  • Kliknij wyświetl certyfikaty.
  • chwyć wydany do: "name "i zamień adres IP lub jakąkolwiek nazwę używaliśmy i otrzymujemy błąd dla tej"name".

Spróbuj jeszcze raz:). Dzięki

 1
Author: Ernest,
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-06-12 20:28:05

W moim przypadku próbowałem przetestować SSL w moim środowisku Visual Studio przy użyciu IIS 7.

Oto, co zrobiłem, aby to zadziałało:

  • Pod moją stroną w "wiązaniach"...'sekcja po prawej stronie w IIS, musiałem dodać powiązanie 'https' do portu 443 i wybrać "IIS Express Developement Certificate".

  • Pod moją witryną w " Ustawienia zaawansowane...'sekcja po prawej musiałem zmienić' Enabled Protocols ' z "http" na "https".

  • Pod ikoną "ustawienia SSL" wybrałem "Akceptuj" dla certyfikatów klientów.

  • Potem musiałem ponownie wykorzystać pulę aplikacji.

  • Musiałem również zaimportować lokalny certyfikat hosta do mojego osobistego sklepu za pomocą mmc.exe.

Mój plik web.config był już poprawnie skonfigurowany, więc po tym, jak wszystko uporządkowałem, mogłem kontynuować testowanie.

 0
Author: Popo,
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-02-17 17:55:24

If not work bad sertificate, when ServerCertificateValidationCallback return true; Mój kod ServerCertificateValidationCallback:

ServicePointManager.ServerCertificateValidationCallback += delegate
{
    LogWriter.LogInfo("Проверка сертификата отключена, на уровне ServerCertificateValidationCallback");
    return true;
};

Mój kod, który uniemożliwił wykonanie ServerCertificateValidationCallback:

     if (!(ServicePointManager.CertificatePolicy is CertificateValidation))
    {
        CertificateValidation certValidate = new CertificateValidation();
        certValidate.ValidatingError += new CertificateValidation.ValidateCertificateEventHandler(this.OnValidateCertificateError);
        ServicePointManager.CertificatePolicy = certValidate;
    }

Funkcja OnValidateCertificateError:

private void OnValidateCertificateError(object sender, CertificateValidationEventArgs e)
{
    string msg = string.Format(Strings.OnValidateCertificateError, e.Request.RequestUri, e.Certificate.GetName(), e.Problem, new Win32Exception(e.Problem).Message);
    LogWriter.LogError(msg);
    //Message.ShowError(msg);
}

Wyłączyłem Kod CertificateValidation i servercertificatevalidationcallback działa bardzo dobrze

 -4
Author: Roberto Gata,
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-01-10 11:17:07