windows store apps - tiene - Cómo confiar en un certificado autofirmado en una aplicación de la tienda de Windows
confiar en certificado autofirmado (3)
Esto es un poco antiguo, pero dado que hay bastantes observadores daré mi solución.
// 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);
Estoy tratando de anular la validación del certificado en una aplicación de la Tienda Windows para aceptar un certificado autofirmado en dos servicios externos (usando HttpClient) para permitir que la aplicación de Windows 8 acepte los certificados y establezca una relación de confianza para SSL
EDITAR: He implementado el enfoque documentado aquí: Instalar certificados utilizando appmanifest
y agregué los archivos .cer relevantes a mi aplicación y me aseguré de que fueran ''Contenido'' y ''Copiar siempre''.
Mi sección de Extensiones de package.appxmanifest se ve así:
<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>
Pero esto todavía no funciona.
He intentado colocar los certificados de la aplicación en el Nombre de la Tienda ''Raíz'' pero aún no he tenido éxito. ¿Alguien tiene alguna idea de por qué esto podría no funcionar, por favor?
Funcionará si coloca el archivo cer en la raíz del proyecto y cambia la sección de Contenido en el archivo de manifiesto a Contenido = "archivo.cer"
Sólo para ahorrar tiempo. Tengo que resolver esto por 2 días de prueba y error. Aquí puedes resolverlo. Agregue el archivo .cer a su proyecto, haga que la acción de compilación sea "Contenido", cópielo como más nuevo y luego agréguelo a su aplicación.
<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>
y a su código detrás ahora puede acceder al archivo usando este
//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();
}
ver enlace para help referencia