Tworzymy nowy SharePoint, dla którego nie mamy jeszcze ważnego certyfikatu SSL. Chciałbym wywołać na nim usługę internetową Listy, aby pobrać metadane dotyczące konfiguracji. Jednak kiedy próbuję to zrobić, pojawia się wyjątek:
Połączenie bazowe zostało zamknięte: nie można ustanowić relacji zaufania dla bezpiecznego kanału SSL / TLS.
Zagnieżdżony wyjątek zawiera komunikat o błędzie:
Zdalny certyfikat jest nieważny zgodnie z procedurą weryfikacji.
To prawda, ponieważ używamy tymczasowego certyfikatu.
Moje pytanie brzmi: jak mogę powiedzieć klientowi usługi sieciowej .Net ( SoapHttpClientProtocol ), aby zignorował te błędy?
źródło
Alternatywnie możesz zarejestrować delegata oddzwaniania, który ignoruje błąd certyfikacji:
... ServicePointManager.ServerCertificateValidationCallback = MyCertHandler; ... static bool MyCertHandler(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors error) { // Ignore errors return true; }
źródło
Jak odpowiedź Jasona S.
ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
Umieszczam to w moim Main i sprawdzam moje
app.config
i sprawdzam, czy(ConfigurationManager.AppSettings["IgnoreSSLCertificates"] == "True")
przed wywołaniem tego wiersza kodu.źródło
Rozwiązałem to w ten sposób:
Wywołaj następujące informacje tuż przed wywołaniem usługi internetowej ssl, która powoduje ten błąd:
using System.Net; using System.Net.Security; using System.Security.Cryptography.X509Certificates; /// <summary> /// solution for exception /// System.Net.WebException: /// The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel. ---> System.Security.Authentication.AuthenticationException: The remote certificate is invalid according to the validation procedure. /// </summary> public static void BypassCertificateError() { ServicePointManager.ServerCertificateValidationCallback += delegate( Object sender1, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) { return true; }; }
źródło
Miałem ten sam błąd podczas korzystania z DownloadString; i udało się sprawić, że działa jak poniżej z sugestiami na tej stronie
System.Net.WebClient client = new System.Net.WebClient(); ServicePointManager.ServerCertificateValidationCallback = delegate { return true; }; string sHttpResonse = client.DownloadString(sUrl);
źródło
ServicePointManager.ServerCertificateValidationCallback += (mender, certificate, chain, sslPolicyErrors) => true;
pominie invaild ssl. Napisz go do konstruktora usługi internetowej.
źródło
Dla początkujących możesz rozszerzyć swoją częściową klasę usług w oddzielnym pliku cs i dodać kod dostarczony przez "imanabidi", aby go zintegrować
źródło
Aby dalej rozwinąć post Simona Johnsonsa - Idealnie byłoby, gdybyś potrzebował rozwiązania, które będzie symulować warunki, które zobaczysz na produkcji, a modyfikowanie kodu tego nie zrobi i może być niebezpieczne, jeśli zapomnisz pobrać kod przed jego wdrożeniem.
Będziesz potrzebował jakiegoś certyfikatu z podpisem własnym. Jeśli używasz IIS Express, będziesz już mieć jeden z nich, po prostu musisz go znaleźć. Otwórz Firefoksa lub dowolną przeglądarkę, którą lubisz i przejdź do swojej witryny deweloperskiej. Powinno być możliwe wyświetlenie informacji o certyfikacie z paska adresu URL, aw zależności od przeglądarki powinno być możliwe wyeksportowanie certyfikatu do pliku.
Następnie otwórz MMC.exe i dodaj przystawkę Certyfikat. Zaimportuj plik certyfikatu do magazynu zaufanych głównych urzędów certyfikacji i to wszystko, czego potrzebujesz. Ważne jest, aby upewnić się, że trafia do tego sklepu, a nie do innego sklepu, takiego jak „Osobisty”. Jeśli nie znasz programu MMC lub certyfikatów, istnieje wiele witryn internetowych zawierających informacje, jak to zrobić.
Teraz twój komputer jako całość będzie niejawnie ufał wszystkim certyfikatom, które sam wygenerował i nie będziesz musiał dodawać kodu, aby to obsłużyć. Kiedy przejdziesz do produkcji, będzie ona nadal działać, pod warunkiem, że masz tam zainstalowany odpowiedni ważny certyfikat. Nie rób tego na serwerze produkcyjnym - byłoby to złe i nie zadziała dla żadnych innych klientów poza tymi na samym serwerze.
źródło