Как разрешить все https независимо от действительности в .NET Core HttpClient?

Я создаю веб-API в .NET Core. Для локальной отладки я создал консольное приложение, которое подключается к моему API. Я отлаживаю в Linux.

При подключении к моему локальному URL-адресу https://локальный: 5001/ мое консольное приложение выдает AuthenticationException (удаленный сертификат недействителен в соответствии с процедурой проверки).

Я пытался обойти это двумя способами:

  1. Добавил ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, sslPolicyErrors) => true;, но это не имеет никакого эффекта.

  2. Я побежал dotnet dev-certs https --trust. Теперь мой веб-браузер больше не жалуется, и это хорошо, но мое консольное приложение по-прежнему выдает исключение. Пробовали перезагружаться.

Как я могу заставить .NET Core доверять моему локальному серверу? Или игнорировать действительность сертификата?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
8
0
9 890
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Вы должны доверять сертификату на своем компьютере, импортировав его в хранилище сертификатов.

Отключение проверки — плохая идея, так как вы можете забыть удалить этот код, и тогда ваш готовый продукт окажется небезопасным.

Я думал, что это то, что сделал dotnet dev-certs https --trust?

HelloWorld 15.04.2019 11:54

Кроме того, консольное приложение предназначено только для отладки, поэтому не имеет значения, забуду ли я его удалить или нет;)

HelloWorld 15.04.2019 11:55

Возможно, ваш сертификат имеет неправильное имя субъекта, как вы его создали?

Milney 15.04.2019 11:56

Я этого не сделал. Автоматически создается .NET Core при запуске приложения.

HelloWorld 15.04.2019 11:59

Я нашел решение:

var httpClientHandler = new HttpClientHandler();

httpClientHandler.ServerCertificateCustomValidationCallback = (message, cert, chain, errors) => true; // DEBUGGING ONLY

var httpClient = new HttpClient(httpClientHandler);

Хотя мне до сих пор непонятно, почему сертификат не считается действительным после запуска dotnet dev-certs https --trust.

Определите эти функции:

public static void IgnoreBadCertificates()
{
    System.Net.ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(AcceptAllCertifications);
}

private static bool AcceptAllCertifications(object sender, System.Security.Cryptography.X509Certificates.X509Certificate certification, System.Security.Cryptography.X509Certificates.X509Chain chain, System.Net.Security.SslPolicyErrors sslPolicyErrors)
{
    return true;
}

И используйте верхнюю часть программы следующим образом:

IgnoreBadCertificates();
Ответ принят как подходящий

Используйте пример ниже из здесь

var httpClientHandler = new HttpClientHandler();
// Return `true` to allow certificates that are untrusted/invalid
httpClientHandler.ServerCertificateCustomValidationCallback = 
    HttpClientHandler.DangerousAcceptAnyServerCertificateValidator;
var httpClient = new HttpClient(httpClientHandler);

Есть ли способ сделать это глобально? Для случаев, когда вы не контролируете поведение клиента. т.е. Обратный вызов openidconnect, который запускает запрос https, где настройка невозможна.

Luigi 16.12.2020 16:10

Обновить - похоже все-таки удалось настроить: stackoverflow.com/a/63053190/1330361

Luigi 16.12.2020 16:27

Другие вопросы по теме