Как избежать ошибки о «эфемерных ключах» при использовании файлов PEM в .NET для веб-запросов с MTLS?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Как избежать ошибки о «эфемерных ключах» при использовании файлов PEM в .NET для веб-запросов с MTLS?

Сообщение Anonymous »

Я пытаюсь создать веб-запрос с помощью .NET 8 в Windows, используя файлы pem, поскольку они требуются API. Это работает при использовании Python:

Код: Выделить всё

import requests

url = "https://{SOMEURL}"

headers = {
'SOMECOMPANY-Client-Id': 'xxxxxxxxxxxxxxxxx',
'Accept': 'application/json'
}

response = requests.get(url, headers=headers, cert=('example-cert.pem', 'example-key.pem'))

print(f'Response {response.text}')
print(f'Response status code {response.status_code}')
Я рад, что это работает! Однако при использовании .NET я получаю исключение. Вот мой код C#.

Код: Выделить всё

var url = "https://{SOMEURL}";
var clientId = "xxxxxxxxxxxxxxxxx";
using var handler = new HttpClientHandler();
using var client = new HttpClient(handler);
// Load the certificate
var certificate = X509Certificate2.CreateFromPemFile("example-cert.pem", "example-key.pem");
handler.ClientCertificates.Add(certificate);
// Add headers
client.DefaultRequestHeaders.Add("SOMECOMPANY-Client-Id", clientId);
client.DefaultRequestHeaders.Add("Accept", "application/json");
// Make the GET request
var response = await client.GetAsync(url);
// Read response content
var responseContent = await response.Content.ReadAsStringAsync();
// Print the response
Console.WriteLine($"Response: {responseContent}");
Console.WriteLine($"Response status code: {(int)response.StatusCode}");
Это исключение (см. ниже). Так что мне теперь делать? Веб-запрос, который я пытаюсь выполнить, возможен и успешен! Однако при использовании .NET у меня это не получается. Помогите мне исправить мой код C#. Вероятно, основная проблема связана с этим сообщением об ошибке:

Аутентификация не удалась, поскольку платформа не поддерживает эфемерные
ключи.
Вот исключение:

Код: Выделить всё

System.Net.Http.HttpRequestException: The SSL connection could not be established, see inner exception.
---> System.Security.Authentication.AuthenticationException: Authentication failed because the platform does not support ephemeral keys.
---> System.ComponentModel.Win32Exception (0x8009030E): Geen referenties beschikbaar in het beveiligingspakket
at System.Net.SSPIWrapper.AcquireCredentialsHandle(ISSPIInterface secModule, String package, CredentialUse intent, SCH_CREDENTIALS* scc)
at System.Net.Security.SslStreamPal.AcquireCredentialsHandle(CredentialUse credUsage, SCH_CREDENTIALS* secureCredential)
at System.Net.Security.SslStreamPal.AcquireCredentialsHandleSchCredentials(SslAuthenticationOptions authOptions)
....

Подробнее здесь: https://stackoverflow.com/questions/778 ... net-for-we
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»