2012-10-29 71 views
16

我試圖覆蓋Windows應用商店應用中的證書驗證,以接受兩個外部服務(使用HttpClient)上的自簽名證書以允許Windows 8應用接受證書並建立SSL信任關係如何信任Windows應用商店應用中的自簽名證書

編輯: 我實現了方法記錄在這裏:Installing certs by using the 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> 

但是這仍然無法正常工作。

我曾嘗試將應用程序證書放在'Root'StoreName中,但仍然沒有成功。有沒有人有任何想法,爲什麼這可能無法正常工作?

+0

我也想知道解決這個問題。我試圖在appxmanifest中添加public .cer文件,但沒有任何運氣。 – ReinierDG

+0

可能的重複:http://stackoverflow.com/questions/9986039/overriding-certificate-verification-in-windows8 – pkumar0

+0

@ pkumar0這是一個不同的問題 – Redeemed1

回答

0

,如果你把CER文件到項目根目錄,清單文件正文=「file.cer」

+0

我沒有項目可用於我了,所以我無法測試這個。也許別人可以試試看看 – Redeemed1

+0

我試過這個沒有成功。 –

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); 
+1

NeO感謝這一點,它看起來像一個有趣的解決方案,並很好地使用框架。我現在既沒有項目也沒有時間來做這件事。如果其他人可以嘗試確認它是否有效,那麼我可以將其標記爲答案。 – Redeemed1

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(); 

     } 

見鏈接以供參考 help

相關問題