Теперь у меня есть веб-API ASP.NET .NET Framework 4.7.2, работающий в IIS. . Я пытаюсь взаимодействовать со сторонним API, которому требуется сертификат клиента для mTLS. Когда мой API отправляет первоначальный запрос на вход в систему, я получаю сообщение об ошибке. Запрос был прерван: не удалось создать безопасный канал SSL/TLS. Исключение, похоже, не содержит каких-либо подробностей о причине и не имеет внутреннего исключения.
Самое безумие в том, что я только получаю эту ошибку, когда мой API работает в IIS на сервере Windows 2022 (AWS EC2). Я не получаю сообщение об ошибке при локальном тестировании. Более того, я не получаю сообщение об ошибке, когда копирую точный код из моего API в консольное приложение и запускаю это на том же сервере, на котором работает API.
Сертификат загружается так:
Код: Выделить всё
using (var s3Client = new AmazonS3Client())
{
var response = s3Client.GetObject(bucket, key);
using (response.ResponseStream)
using (var file = new MemoryStream())
{
response.ResponseStream.CopyTo(file);
cert = new X509Certificate2(file.ToArray(), certPassword);
}
}
Код: Выделить всё
var httpClientHandler = new HttpClientHandler();
httpClientHandler.ClientCertificates.Add(cert);
_httpClient = new HttpClient(httpClientHandler)
{
BaseAddress = _config.BaseUri
};
Вот как выглядит успех (консольное приложение):
Успех
Вот как выглядит сбой (ASP.NET Web API 2)
Сбой
Из ответов на подобные вопросы я пробовал :
- добавление каждой записи реестра, связанной с включением TLSv1.2 в Windows.
- добавление ServicePointManager.SecurityProtocol = SecurityProtocolType.tls12 в код.
- добавление ServicePointManager.ServerCertificateValidationCallback += (отправитель, сертификат, цепочка, ошибки) => true в код.
- убедитесь, что в файле Web.config для httpRuntime установлено значение 4.7.2.
Подробнее здесь: https://stackoverflow.com/questions/791 ... secure-cha