Обхід помилок недійсних помилок сертифіката SSL при виклику веб-служб у


88

Ми встановлюємо новий SharePoint, для якого у нас ще немає дійсного сертифіката SSL. Я хотів би зателефонувати до веб-служби "Списки", щоб отримати деякі метадані про налаштування. Однак, коли я намагаюся зробити це, я отримую виняток:

Основне з'єднання було закрито: не вдалося встановити відносини довіри для захищеного каналу SSL / TLS.

Вкладений виняток містить повідомлення про помилку:

Віддалений сертифікат недійсний відповідно до процедури перевірки.

Це правильно, оскільки ми використовуємо тимчасовий сертифікат.

Моє запитання: як я можу сказати клієнту веб-служби .Net ( SoapHttpClientProtocol ) ігнорувати ці помилки?

Відповіді:


18

Підхід, який я використав, стикаючись із цією проблемою, полягав у додаванні підписувача тимчасового сертифіката до списку довірених органів на відповідному комп’ютері.

Зазвичай я тестую із сертифікатами, створеними за допомогою CACERT, і додавання їх до списку довірених авторитетів працювало плавно.

Роблячи це таким чином, вам не потрібно додавати будь-який власний код до своєї програми, і він правильно імітує, що станеться, коли ваша програма буде розгорнута. Таким чином, я думаю, що це чудове рішення для програмного вимкнення перевірки.


Це була і моя перша ідея. На жаль, термін дії сертифіката також закінчився, тому довірити його неможливо.
jan.vdbergh

Чи є причина, по якій ви не можете використовувати когось, як сертифікат CA? Якщо це тестовий сертифікат, ви можете просто продовжити це. Я не впевнений, чи є спосіб вимкнути ці перевірки!
Саймон Джонсон,

113

Крім того, ви можете зареєструвати делегата зворотного дзвінка, який ігнорує помилку сертифікації:

...
ServicePointManager.ServerCertificateValidationCallback = MyCertHandler;
...

static bool MyCertHandler(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors error)
{
// Ignore errors
return true;
}

1
Я додав цей статичний метод до global.asax і встановив подію на "OnApplicationStart". працював як оберіг. Дякую
Хуан Замора

1
@JuanZamora Я зробив те саме, що і ти. Це спрацювало!
Сачин Б.Р.

5
Це все, що вам потрібно зробити, якщо ви хочете бути вразливим до нападу "Людина посередині" ...
Хаутман,

2
В ідеалі це слід робити лише в середовищі розробки.
Ron DeFreitas

79

Як відповідь Джейсона С.

ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };

Я поміщаю це в свій Main і переглядаю свій app.configі перевіряю, чи (ConfigurationManager.AppSettings["IgnoreSSLCertificates"] == "True")перед викликом цього рядка коду.


24

Я вирішив це таким чином:

Зателефонуйте наступне безпосередньо перед тим, як зателефонувати до веб-служби ssl, яка спричиняє цю помилку:

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;
        };
}

12

У мене була така ж помилка при використанні DownloadString; і змогла змусити це працювати, як показано нижче, із пропозиціями на цій сторінці

System.Net.WebClient client = new System.Net.WebClient();            
ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
string sHttpResonse = client.DownloadString(sUrl);

3
ServicePointManager.ServerCertificateValidationCallback +=
            (mender, certificate, chain, sslPolicyErrors) => true;

обійде invaild ssl. Напишіть це у своєму конструкторі веб-сервісу.


1

Для новачків ви можете розширити свій частковий клас обслуговування в окремому файлі cs та додати код із кодом, наданим "imanabidi", щоб інтегрувати його


1

Для подальшого розширення публікації Саймона Джонсона - в ідеалі ви хочете, щоб імітували умови, які ви побачите у виробництві, а модифікація коду не зробить цього і може бути небезпечною, якщо ви забудете вийняти код перед тим, як його розгорнути.

Вам знадобиться якийсь самопідписаний сертифікат. Якщо ви використовуєте IIS Express, у вас вже буде один із них, вам просто потрібно буде його знайти. Відкрийте Firefox або будь-який інший браузер, який вам подобається, і перейдіть на веб-сайт розробника. Ви повинні мати можливість переглядати інформацію про сертифікат із рядка URL-адреси, і залежно від вашого браузера ви зможете експортувати сертифікат у файл.

Далі відкрийте MMC.exe та додайте оснастку сертифіката. Імпортуйте файл сертифіката в магазин надійних кореневих сертифікатів, і це все, що вам потрібно. Важливо переконатися, що він надходить у цей магазин, а не в якийсь інший магазин, такий як „Особистий”. Якщо ви не знайомі з MMC або сертифікатами, існує безліч веб-сайтів з інформацією про те, як це зробити.

Тепер ваш комп’ютер в цілому буде неявно довіряти будь-яким сертифікатам, які він сам створив, і вам не потрібно буде додавати код, щоб спеціально обробляти це. Коли ви перейдете на виробництво, воно буде продовжувати працювати, якщо у вас там встановлений відповідний дійсний сертифікат. Не робіть цього на робочому сервері - це буде погано, і це не буде працювати для будь-яких інших клієнтів, крім тих, що знаходяться на самому сервері.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.