A Pré-visualização da Atualização Cumulativa de Novembro de 2020 para Windows 10 versão 2004 e abaixo, bem como a versão de Rollup de Segurança e Qualidade de janeiro de 2021 para .NET Framework 4.8, lançaram uma alteração para melhorar o processo de limpeza dos certificados X509Certificate2. Abaixo, fornecemos esclarecimentos adicionais sobre uma duração de chave privada no Windows.

Desde .NET Framework 2.0, existem duas formas diferentes de carregar um certificado e a respetiva chave privada associada a partir de um ficheiro PKCS#12 PFX: como um objeto de certificado através de membros na classe X509Certificate2 ou como todos os certificados presentes no PFX através dos métodos X509Certificate2Collection.Import.

O comportamento predefinido é que a chave privada é carregada para uma chave persistente (nomeada) através de uma das bibliotecas de criptografia do sistema, que escreve indiretamente um ficheiro no disco.  A maioria dos autores de chamadas que carregam um PFX só utilizam o objeto de certificado temporariamente, pelo que, quando o .NET está a libertar os recursos nativos associados ao certificado, também elimina a chave privada.  As principais exceções a este comportamento são

  1. O sinalizador X509KeyStorageFlags.PersistKeySet, que resulta na escrita do ficheiro, mas não eliminado,

  2. O sinalizador X509KeyStorageFlags.EphemeralKetSet, que resulta no carregamento da chave privada para a memória sem ficheiro de cópia de segurança,

  3. Terminação anormal do processo, que pode ocorrer quando a eliminação da chave está pendente.

Contraintuitivamente, as duas formas diferentes de carregar certificados sempre utilizaram mecanismos diferentes para controlar quando é o momento adequado para eliminar a chave privada.  Carregar um único certificado através da classe X509Certificate2 utiliza um marcador que só é visível para o runtime do .NET e só se aplica a essa referência de objeto.  Carregar um PFX através de X509Certificate2Collection.Import utiliza um marcador no objeto de certificado nativo, o que resulta na partilha da "responsabilidade de eliminação" em todos os objetos geridos que representem o mesmo certificado nativo.  Isto significa que o novo X509Certificate2(otherCert.Handle). Dispose() fará com que o ficheiro de chave privada seja apagado durante a chamada para Dispose() se outro Certificado tiver sido carregado a partir de um PFX através de X509Certificate2Collection.Import, mas não se tiver sido carregado a partir de um PFX através de quaisquer membros da classe X509Certificate2.  Algumas partes do .NET criam internamente novos objetos X509Certificate2 geridos a partir de identificadores de certificado nativos, como a classe X509Chain e o método X509Certificate2Collection.Find.  Estas partes da estrutura, e quaisquer partes que as utilizem direta ou indiretamente, podem resultar numa eliminação prematura de chaves à medida que os objetos que criam obtêm lixo recolhido.

Foi introduzido um erro na versão inicial do .NET Framework 4.8, o que resultou em X509Certificate2Collection.Import para não aplicar o marcador de eliminação, mesmo que nem PersistKeySet nem EphemeralKeySet tenham sido especificados. O .NET lançou uma correção para este erro no Rollup de Segurança e Qualidade de janeiro de 2021 para evitar a acumulação não intencional de ficheiros de chaves privadas abandonados.  Os autores de chamadas afetados por esta correção podem especificar o sinalizador PersistKeySet para regressar ao comportamento (não intencionalmente diferente) .NET Framework 4,8 RTM, embora isso resulte numa acumulação de ficheiros que tem de ser resolvida com lógica de limpeza personalizada.

X509Certificate2Collection.Import no .NET Core para Windows e .NET 5+ para Windows comporta-se da mesma forma que .NET Framework 2.0-4.7.2 (e .NET Framework 4.8 com todas as atualizações aplicadas).  A equipa do .NET está a considerar mudar para um design melhorado no .NET 6 (ou versões futuras), mas esta atualização de design não se aplicará a .NET Framework, .NET Core ou .NET 5.

Precisa de mais ajuda?

Quer mais opções?

Explore os benefícios da subscrição, navegue em cursos de formação, saiba como proteger o seu dispositivo e muito mais.