2012-10-29 38 views
16

Tôi đang cố gắng ghi đè xác thực chứng chỉ trong Windows Store App để chấp nhận chứng chỉ tự ký trên hai dịch vụ bên ngoài (sử dụng HttpClient) để cho phép ứng dụng Windows 8 để chấp nhận giấy chứng nhận và thiết lập một mối quan hệ tin cậy cho SSLCách tin cậy chứng chỉ tự ký trong ứng dụng cửa sổ cửa sổ

EDIT: tôi thực hiện phương pháp này ghi nhận ở đây: Installing certs by using the appmanifest

và thêm vào các tập tin cer liên quan đến ứng dụng của tôi và đảm bảo họ là 'Nội dung' và 'Sao chép Luôn luôn'.

My phần Extensions package.appxmanifest trông như thế này:

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

nhưng điều này vẫn không hoạt động.

Tôi đã thử đặt chứng chỉ ứng dụng trong 'Store' gốc nhưng vẫn không thành công. Có ai có bất kỳ ý tưởng tại sao điều này có thể không làm việc xin vui lòng?

+0

tôi cũng muốn biết giải pháp cho vấn đề này. Tôi đã cố gắng để thêm các tập tin .cer công cộng trong appxmanifest là tốt, mà không có bất kỳ may mắn. – ReinierDG

+0

có thể trùng lặp: http://stackoverflow.com/questions/9986039/overriding-certificate-verification-in-windows8 – pkumar0

+0

@ pkumar0 đó là một vấn đề khác nhau – Redeemed1

Trả lời

0

Nó sẽ có tác dụng nếu bạn đặt tập tin cer vào thư mục gốc của dự án và thay đổi phần nội dung trong file manifest để Content = "file.cer"

+0

Tôi không có dự án nào có sẵn cho tôi nữa nên tôi không thể kiểm tra điều này. Có lẽ ai đó khác có thể thử điều này để xem – Redeemed1

+0

Tôi đã thử điều này mà không thành công. –

1

Đây là một chút của cái cũ, nhưng nhìn thấy như có khá vài người quan sát tôi sẽ đưa ra giải pháp của tôi.

// 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 cảm ơn cho điều này, nó trông giống như một giải pháp thú vị và sử dụng khuôn khổ tốt. Tôi không có dự án và thời gian nữa để làm bất cứ điều gì về điều này. Nếu ai đó có thể thử điều này để xác nhận nếu nó hoạt động thì tôi có thể đánh dấu nó như một câu trả lời. – Redeemed1

1

Chỉ để tiết kiệm thời gian của bạn. Tôi đã giải quyết vấn đề này trong 2 ngày thử và sai. Ở đây bạn có thể giải quyết nó. Thêm file cer để dự án của bạn, Hãy hành động xây dựng là "Nội dung", sao chép như mới sau đó thêm video này vào ứng dụng của bạn manifest

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

và mã của bạn đằng sau bây giờ bạn có thể truy cập các tập tin sử dụng này liên kết

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

     } 

see để tham khảo help

Các vấn đề liên quan