2012-10-29 12 views
16

Próbuję zastąpić sprawdzanie poprawności certyfikatu w aplikacji Sklepu systemu Windows, aby zaakceptować samopodpisany certyfikat w dwóch usługach zewnętrznych (przy użyciu HttpClient), aby zezwolić na aplikację Windows 8 akceptować certyfikaty i ustanowić relację zaufania dla SSLJak ufać samopodpisanemu certyfikatowi w aplikacji sklepu z systemem Windows

EDIT: i wdrożone podejście udokumentowane tutaj: Installing certs by using the appmanifest

i dodaje odpowiednie pliki cer do mojego wniosku i zapewnione są „Treść” i „Kopiuj Zawsze'.

Moja sekcja Rozszerzenia package.appxmanifest wygląda następująco:

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

ale to nadal nie działa.

Próbowałem już umieścić certyfikaty aplikacji w "Store" root'a, ale nadal nie udało się. Czy ktoś ma jakieś pomysły, dlaczego to może nie działać?

+0

ja również chcą poznać rozwiązanie tego problemu. Próbowałem również dodać publiczny plik .cer w appxmanifest bez żadnego szczęścia. – ReinierDG

+0

możliwy duplikat: http://stackoverflow.com/questions/9986039/overriding-certificate-verification-in-windows8 – pkumar0

+0

@ pkumar0 czyli inny problem – Redeemed1

Odpowiedz

0

Będzie działać, jeśli umieścić cer plik do katalogu głównego projektu i zmienić zawartość sekcji w pliku manifestu do content = „file.cer”

+0

Nie mam już projektu do dyspozycji, więc nie mogę przetestować to. Może ktoś inny mógłby spróbować tego, aby zobaczyć – Redeemed1

+0

próbowałem tego bez powodzenia. –

1

To jest trochę stary, ale skoro są dość niewielu obserwatorów dam moje rozwiązanie.

// 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 dziękuje za to, wygląda na ciekawe rozwiązanie i dobrze wykorzystuje framework. Nie mam już ani czasu, ani projektu, ani czasu, aby cokolwiek z tym zrobić. Jeśli ktoś może to wypróbować, aby potwierdzić, czy działa, mogę go oznaczyć jako odpowiedź. – Redeemed1

1

Tylko po to, aby zaoszczędzić czas. Muszę rozwiązać ten problem przez 2 dni prób i błędów. Tutaj możesz go rozwiązać. Dodaj plik cer do projektu, Pozwól działanie kompilacji jak „content”, skopiuj jak nowsze następnie dodać do swojej aplikacji oczywistego

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

i waszym kodem tyłu można teraz uzyskać dostęp do pliku za pomocą tego Link

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

     } 

patrz odnośnik help

Powiązane problemy