Как доверять самозаверяющемуся сертификату в приложении для магазина Windows - программирование

Как доверять самозаверяющемуся сертификату в приложении для магазина Windows

Я пытаюсь переопределить проверку сертификата в приложении Windows Store, чтобы принять самозаверяющий сертификат для двух внешних служб (используя HttpClient), чтобы позволить приложению Windows 8 принимать сертификаты и устанавливать доверительные отношения для SSL

EDIT: Я применил описанный здесь подход: Установка сертификатов с помощью appmanifest

и добавили соответствующие файлы .cer в мое приложение и гарантировали, что они являются "Контент" и "Копировать всегда".

Мой пакет package.appxmanifest Extensions выглядит следующим образом:

  <Extensions>
<Extension Category="windows.certificates">
  <Certificates>
    <Certificate StoreName="TrustedPeople" Content="Assets\ReportingServices.cer" />
    <Certificate StoreName="TrustedPeople" Content="Assets\Crm.cer" />
    <Certificate StoreName="CA" Content="Assets\DigiCertHighAssurance.cer" />
    <TrustFlags ExclusiveTrust="true" />
    <SelectionCriteria AutoSelect="true" />
  </Certificates>
</Extension>

но это все еще не работает.

Я попытался поместить сертификаты приложений в "Root" StoreName, но все равно не добился успеха. У кого-нибудь есть идеи, почему это может не сработать?

4b9b3361

Ответ 1

Это немного старый, но, видя, что есть немало наблюдателей, я дам свое решение.

// Create the httpClient and send the request
HttpBaseProtocolFilter aHBPF = new HttpBaseProtocolFilter();
// If you want to ignore expired Certs
aHBPF.IgnorableServerCertificateErrors.Add(ChainValidationResult.Expired);
// Untrused because this is a self signed cert that is not installed
aHBPF.IgnorableServerCertificateErrors.Add(ChainValidationResult.Untrusted);
// Host names and certs names may not match
aHBPF.IgnorableServerCertificateErrors.Add(ChainValidationResult.InvalidName);

HttpClient httpClient = new HttpClient(aHBPF);
HttpResponseMessage response = await httpClient.SendRequestAsync(httpRequest, HttpCompletionOption.ResponseHeadersRead).AsTask(cts.Token);

Ответ 2

Просто чтобы сэкономить ваше время. Я должен решить это в течение 2 дней проб и ошибок. Здесь вы можете решить эту проблему. Добавьте файл .cer в свой проект, сделайте действие сборки как "Контент", скопируйте как новый затем добавьте это в свой манифест приложения.

<Capabilities>
    <Capability Name="sharedUserCertificates" />
    <Capability Name="enterpriseAuthentication" />
    <Capability Name="privateNetworkClientServer" />
    <Capability Name="internetClient" />
</Capabilities>


<Extensions>
<Extension Category="windows.certificates">
  <Certificates>
    <Certificate StoreName="Root" Content="Certificates\vibeapi.cer" />
      <TrustFlags ExclusiveTrust="true" />
       <SelectionCriteria AutoSelect="true" />
    </Certificates>
  </Extension>
</Extensions>

и к вашему коду позади вы можете теперь получить доступ к файлу, используя этот

//Testing https connection
HttpClientHandler msgHandler = new HttpClientHandler();

using (System.Net.Http.HttpClient httpClient = new System.Net.Http.HttpClient(msgHandler, true))
       {
          var HTTPSURL = new Uri("https://www.sample.net/");


       var response = await httpClient.GetAsync(HTTPSURL);
       var responseStr = await response.Content.ReadAsStringAsync();

       }

см. ссылку для справки help

Ответ 3

Он будет работать, если вы поместите файл cer в корневой каталог проекта и измените раздел содержимого в файле манифеста на Content = "file.cer"