16

Windowsストアアプリで証明書の検証をオーバーライドして、2つの外部サービス(HttpClientを使用)で自己署名証明書を受け入れ、Windows 8アプリが証明書を受け入れ、SSLの信頼関係を確立できるようにしようとしています。

編集:ここに記載されているアプローチを実装しました:appmanifestを使用して証明書をインストールします

関連する.cerファイルをアプリケーションに追加し、それらが「コンテンツ」および「常にコピー」であることを確認しました。

私のpackage.appxmanifest拡張機能セクションは次のようになります。

  <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>

しかし、これはまだ機能しません。

アプリの証明書を「ルート」StoreNameに入れようとしましたが、それでも成功しません。なぜこれがうまくいかないのか誰かが何か考えを持っていますか?

4

3 に答える 3

1

時間を節約するためだけに。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();

       }

参照 ヘルプのリンクを参照してください

于 2014-12-09T06:44:27.153 に答える
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);
于 2014-08-13T08:58:29.143 に答える
0

cer ファイルをプロジェクト ルートに置き、マニフェスト ファイルの Content セクションを Content="file.cer" に変更すると機能します。

于 2013-06-04T08:40:34.523 に答える