Что я могу сделать, если SSL-сертификат не работает в IIS, но работает в локальной

#asp.net #asp.net-core #ssl

Вопрос:

У меня есть два проекта: Web Api(сзади) и MVC(спереди). Веб-Api(back) имеет метод, который использует SSL-сертификат. Если запустить веб-Api(обратно) в локальном режиме, то метод работает, но если запустить веб-Api(обратно) в IIS и отправить сообщение в MVC(спереди) методу, то он обнаруживает ошибку «Произошла одна или несколько ошибок». (Не удалось установить SSL-соединение, см. Внутреннее исключение.). Код веб-Api(back)

 public decimal GetIdentification(IdentificationModel identification, int key)
    {
        try
        { 
        var handler = new HttpClientHandler();
        var path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory,"cert\hgg.p12");
        handler.ClientCertificates.Add(new X509Certificate2(path, _certPassword));

        using (var httpClient = new HttpClient(handler))
        {
            using (var request = new HttpRequestMessage(new HttpMethod("POST"), _identityUrl   "iin="   identification.IIN   "amp;vendor="   _vendor))
            {
                string token = GetToken();
                request.Headers.TryAddWithoutValidation("Authorization", "Bearer "   token);
                request.Headers.TryAddWithoutValidation("x-idempotency-key", "key:"   "hggKey-"   key);
                request.Method = new HttpMethod("POST");
                //request.Content = new StringContent(identification.Photo);
                request.Content = new StreamContent(new MemoryStream(Convert.FromBase64String(identification.Photo)));
                request.Content.Headers.ContentType = MediaTypeHeaderValue.Parse("image/png");

                var response = httpClient.SendAsync(request);
                string data = response.Result.Content.ReadAsStringAsync().Resu<
                return JsonConvert.DeserializeObject<dynamic>(data).resu<
            }
        }
        }
        catch (Exception e)
        {
            throw new Exception("GetIdentification"   e.Message);
        }
    }
    public string GetToken()
    {
        var handler = new HttpClientHandler();
        var path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "cert\hgg.p12");
        handler.ClientCertificates.Add(new X509Certificate2(path, _certPassword));
        try
        {
            

            using (var httpClient = new HttpClient(handler))
            {
                using (var request = new HttpRequestMessage(new HttpMethod("POST"), _tokenUrl))
                {
                    request.Headers.TryAddWithoutValidation("Authorization", "Basic "   _token);
                    request.Method = new HttpMethod("POST");
                    request.Content = new StringContent("grant_type=passwordamp;username="   _username   "amp;password="   _password   "amp;scope=identkey");
                    request.Content.Headers.ContentType = MediaTypeHeaderValue.Parse("application/x-www-form-urlencoded");

                    var response = httpClient.SendAsync(request);

                    return JsonConvert.DeserializeObject<dynamic>(response.Result.Content.ReadAsStringAsync().Result).access_token;
                }
            }
        }
        catch(Exception e)
        {
            throw new Exception("GetToken"   e.Message   path   " "  _certPassword);
        }
    }
}
 

MVC(спереди)

 public string Identity(RequestClass<IdentificationModel> request)
    {            
        ResponseClass<decimal> response = new ResponseClass<decimal>();
        using (var httpClient = new HttpClient())
        {
            var json = JsonConvert.SerializeObject(request);
            var data = new StringContent(json, Encoding.UTF8, "application/json");
            var httpResponse =
                    httpClient.PostAsync(_apiUrl   $"Identification", data).Resu<
            string responseContent = httpResponse.Content.ReadAsStringAsync().Resu<
            
            return responseContent;
        }
    }
 

Ответ №1:

У ApplicationPoolIdentity нет разрешения на certmgr.msc