MVC Webapi не может получить сертификат - PullRequest
0 голосов
/ 30 апреля 2019

У меня есть приложение 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();
        }
    }
}
...