UWP ServicePointManager.ServerCertificateValidationCallback

8

Tengo una aplicación Xamarin.Forms que implementa la fijación de certificados utilizando la clase y el método ServicePointManager.ServerCertificateValidationCallback. En Android e iOS, esto funciona sin problemas, ya que permitirá conexiones a servicios esperados cuyas claves de certificado se han anclado y no permitirá conexiones para aquellos que no tengo.

Sin embargo, en UWP, todas las conexiones están permitidas independientemente de si la clave del certificado se ha anclado o no. He devuelto explícitamente false desde el método de validación del certificado y la conexión aún está permitida. Estoy seguro de que la verificación se está realizando ya que he depurado y revisado el método de validación del certificado.

¿Qué podría estar causando que la conexión continúe a pesar de que estoy volviendo falso de la verificación de validación?

ServicePointManager.ServerCertificateValidationCallback = ValidateServerCertficate;
private static bool ValidateServerCertficate(
   object sender,
   X509Certificate certificate,
   X509Chain chain,
   SslPolicyErrors sslPolicyErrors
)
{
   return false;
}
Jason
fuente
La devolución de llamada se dispara, así que no es la misma situación.
Jason
¿ ValidateServerCertficateLlama a tu lado?
Nico Zhu - MSFT
Se está llamando a ValidateServerCertificate pero el valor de retorno no tiene relación con si la conexión está permitida o no
Jason

Respuestas:

1

Pude arreglar esto:

  1. En el proyecto UWP, haga doble clic en el archivo Package.appxmanifest
  2. En el menú Declaraciones, seleccione Certificados en el menú desplegable Declaraciones disponibles
  3. Haga clic en el botón Agregar
  4. Seleccione la opción de confianza exclusiva

Esto coloca el siguiente xml en el archivo Package.appxmanifest:

<Extensions>
   <Extension Category="windows.certificates">
     <Certificates>
       <TrustFlags ExclusiveTrust="true" />
     </Certificates>
   </Extension>
</Extensions>
Jason
fuente