У меня есть приложение Webapi на моем локальном хосте и консольное приложение на компьютере разработчика.
Я уже включил атрибут «Требуемый SSL» в моей Visual Studio и добавил RequiredHTTPS в веб-интерфейс.Но когда я отправляю .Cer из консольного приложения в webapi, webapi не получает никакого сертификата.Очень признателен, если кто-то может помочь мне в этом. я использую сертификат iis express localhost для звонка вот мой код.WebAPI
HttpResponseMessage response = new HttpResponseMessage();
X509Certificate2 clientCertInRequest = RequestContext.ClientCertificate; //null here
X509Certificate2 clientCertInRequest2 = Request.GetClientCertificate();//null here as well
if (clientCertInRequest != null)
{
//function
return Task.FromResult(response);
}
}
response = Request.CreateErrorResponse(HttpStatusCode.Unauthorized, "Unauthorized");
return Task.FromResult(response);
}
Функция консольного приложения, вызывающая функцию webapi
X509Certificate2 clientCert = GetClientCertificate();
WebRequestHandler requestHandler = new WebRequestHandler();
requestHandler.ClientCertificateOptions = ClientCertificateOption.Manual;
requestHandler.ClientCertificates.Add(clientCert);
HttpClient client = new HttpClient(requestHandler);
HttpResponseMessage response = await client.PostAsync("api/apicontroller/myAPIMethod", stringContent);
для получения сертификата в консоли
X509Store userCaStore = new X509Store(StoreName.My, StoreLocation.CurrentUser);
try
{
userCaStore.Open(OpenFlags.ReadOnly);
X509Certificate2Collection certificatesInStore = userCaStore.Certificates;
X509Certificate2Collection findResult = certificatesInStore.Find(X509FindType.FindBySerialNumber, "myserialnumber", true);
X509Certificate2 clientCertificate = null;
if (findResult.Count == 1)
{
clientCertificate = findResult[0];//i do get one cert from this line
}
else
{
throw new Exception("Unable to locate the correct client certificate.");
}
return clientCertificate;
}
catch
{
throw;
}
finally
{
userCaStore.Close();
}
}
}