Я создаю веб-API в .NET Core. Для локальной отладки я создал консольное приложение, которое подключается к моему API. Я отлаживаю в Linux.
При подключении к моему локальному URL-адресу https://локальный: 5001/ мое консольное приложение выдает AuthenticationException (удаленный сертификат недействителен в соответствии с процедурой проверки).
Я пытался обойти это двумя способами:
Добавил ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, sslPolicyErrors) => true;, но это не имеет никакого эффекта.
Я побежал dotnet dev-certs https --trust. Теперь мой веб-браузер больше не жалуется, и это хорошо, но мое консольное приложение по-прежнему выдает исключение. Пробовали перезагружаться.
Как я могу заставить .NET Core доверять моему локальному серверу? Или игнорировать действительность сертификата?





Вы должны доверять сертификату на своем компьютере, импортировав его в хранилище сертификатов.
Отключение проверки — плохая идея, так как вы можете забыть удалить этот код, и тогда ваш готовый продукт окажется небезопасным.
Кроме того, консольное приложение предназначено только для отладки, поэтому не имеет значения, забуду ли я его удалить или нет;)
Возможно, ваш сертификат имеет неправильное имя субъекта, как вы его создали?
Я этого не сделал. Автоматически создается .NET Core при запуске приложения.
Я нашел решение:
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, где настройка невозможна.
Обновить - похоже все-таки удалось настроить: stackoverflow.com/a/63053190/1330361
Я думал, что это то, что сделал dotnet dev-certs https --trust?