UWP ServicePointManager.ServerCertificateValidationCallback

8

Eu tenho um aplicativo Xamarin.Forms que implementa a fixação de certificado utilizando a classe e o método ServicePointManager.ServerCertificateValidationCallback. No Android e iOS, isso funciona sem problemas, pois permitirá conexões com serviços esperados cujas chaves de certificado foram fixadas e não permitirá conexões para as que não tenho.

No entanto, na UWP, todas as conexões são permitidas, independentemente de a chave do certificado ter sido fixada ou não. Eu retornei explicitamente false do método de validação de certificado e a conexão ainda é permitida. Estou certo de que a verificação está sendo executada porque depurei e passei pelo método de validação de certificado.

O que pode estar causando a conexão, mesmo que eu esteja retornando falso da verificação de validação?

ServicePointManager.ServerCertificateValidationCallback = ValidateServerCertficate;
private static bool ValidateServerCertficate(
   object sender,
   X509Certificate certificate,
   X509Chain chain,
   SslPolicyErrors sslPolicyErrors
)
{
   return false;
}
Jason
fonte
O retorno de chamada é acionado, portanto não é a mesma situação.
31419 Jason
Será que ValidateServerCertficatechamar em seu lado?
Nico Zhu - MSFT
ValidateServerCertificate está sendo chamado, mas o valor de retorno não tem influência se a conexão é permitida ou não
Jason

Respostas:

1

Consegui consertar isso da seguinte maneira:

  1. No projeto UWP, clique duas vezes no arquivo Package.appxmanifest
  2. No menu Declarações, selecione Certificados na lista suspensa Declarações disponíveis.
  3. Clique no botão Adicionar
  4. Selecione a opção Confiança exclusiva

Isso coloca o seguinte xml no arquivo Package.appxmanifest:

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