Из моего консольного приложения я хочу выполнить http-запрос (GET) с использованием HttpClient
. Я получил Сертификат клиента, ключ и Root CA (.pem
файлы) от сервисной команды REST. Используя OpenSSL, я скопировал эти сертификаты (.pem
) в файл .pfx
. Я проверил этот сертификат, выпустив Http GET для остальной службы с сертификатом .pfx
, прикрепленным с использованием Почтальон . Он работает как шарм.
Проблема в том, что мое Консольное приложение загружает сертификат клиента из файловой системы и выполняет HETP GET, он получает 403-forbidden
ответ.
Клиентское приложение может успешно отправлять Http Get и Receive respose, когда я устанавливаю сертификат клиента на свой компьютер и запускаю тот же код.
Я предполагаю, что клиентское приложение пытается получить сертификат из хранилища сертификатов и не присоединяет сертификат к запросу. Кто-нибудь знает, почему приложение не прикрепляет сертификат к запросу.
Вот мой код.
namespace TestClientApp
{
class Program
{
static async Task Main(string[] args)
{
ServicePointManager.ServerCertificateValidationCallback += (sender, certificate, chain, sslPolicyErrors) => true;
var x509Certificate2 = new X509Certificate2(@"C:\TestClientAppDir\clientCert.pfx"),"<password>");
var handler = new HttpClientHandler();
handler.ClientCertificates.Add(x509Certificate2);
HttpClient client = new HttpClient(handler);
try
{
var response = await client.GetAsync("https://rest service url");
Console.WriteLine($"Server returned status: {response.IsSuccessStatusCode}, {response.StatusCode.ToString()} \n Content {await response.Content.ReadAsStringAsync()}");
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
finally
{
client.Dispose();
}
Console.Read();
}
}
}