Verificação de pacote assinado NuGet

Você pode assinar um pacote NuGet para permitir que os consumidores do pacote validem a autenticidade e a integridade do pacote. Se a verificação estiver habilitada, o .NET verificará os pacotes assinados durante uma operação de restauração de pacote, que ocorre automaticamente quando um consumidor de pacote cria ou executa seu projeto.

As assinaturas de pacote NuGet são baseadas em certificados X.509, e um pré-requisito para a verificação de pacote assinado é um armazenamento raiz de certificado válido para assinatura de código e carimbo de data/hora.

A partir do SDK do .NET 6.0.400, o NuGet usa pacotes de certificados incluídos no SDK do .NET para verificar pacotes assinados onde um armazenamento raiz do sistema adequado não está disponível. Esses pacotes são provenientes do Microsoft Trusted Root Program e contêm os mesmos certificados de assinatura de código e carimbo de data/hora que o armazenamento raiz no Windows. Esses pacotes de certificados devem conter todos os certificados raiz necessários para verificar os pacotes do NuGet.org.

Alguns comandos do NuGet, como sign e verify, sempre executam a verificação de pacote assinado.

As seções a seguir para cada sistema operacional descrevem:

  • Quando a verificação implícita durante as operações de restauração é habilitada por padrão.
  • Como habilitá-lo.
  • Quais armazenamentos raiz são usados.

Windows

A verificação é sempre ativada durante as operações de restauração do pacote.

O NuGet usa o armazenamento raiz padrão no Windows, que já oferece suporte à assinatura de código de uso geral e carimbo de data/hora. Os pacotes de certificados do SDK do .NET não são usados. Toda a funcionalidade de verificação de pacote assinado é suportada no Windows na versão do SDK do .NET na qual foi introduzida.

Linux

Importante

Embora a funcionalidade de verificação de pacote assinado tenha sido adicionada no SDK do .NET 5, a funcionalidade não é suportada no Linux até o SDK do .NET 6.0.400. Não use a verificação de pacote assinado com versões do SDK do .NET anteriores a 6.0.400.

Antes do SDK do .NET 8, a verificação era desabilitada por padrão durante as operações de restauração do pacote. Para participar, defina a variável DOTNET_NUGET_SIGNATURE_VERIFICATION de ambiente como true.

A partir do SDK do .NET 8, a verificação é habilitada por padrão. Para desativar, defina a variável DOTNET_NUGET_SIGNATURE_VERIFICATION de ambiente como false.

Para verificação de certificado de assinatura de código, o NuGet primeiro investigará um pacote de certificados no seguinte local:

/etc/pki/ca-trust/extracted/pem/objsign-ca-bundle.pem

Se um pacote de certificado válido for encontrado, o NuGet o preferirá ao pacote de certificados do SDK do .NET para assinatura de código. Se ele contiver pelo menos o mesmo conjunto de certificados raiz que o pacote de certificados do SDK do .NET, a verificação do pacote assinado do NuGet deverá ser bem-sucedida. Se não tiver certificados raiz, como os usados em pacotes assinados no NuGet.org, a verificação de pacote assinado do NuGet falhará com um status não confiável (via NU3018 ou NU3028). Adicionar certificados raiz a este pacote de certificados pode permitir uma verificação bem-sucedida; no entanto, lembre-se de que esse pacote de certificados é um armazenamento confiável em todo o sistema, enquanto os pacotes de certificados do SDK do .NET são usados como um armazenamento de confiança em todo o aplicativo.

Se um pacote de certificado válido não for encontrado no local acima, o NuGet voltará a usar o pacote de certificados do SDK do .NET para assinatura de código.

Para verificação de certificado de carimbo de data/hora, o NuGet sempre usa o pacote de certificados do SDK do .NET para carimbo de data/hora.

macOS

A verificação é desabilitada por padrão durante as operações de restauração do pacote. Para participar, defina a variável DOTNET_NUGET_SIGNATURE_VERIFICATION de ambiente como true. No entanto, recomendamos que não ative a verificação. Para obter mais informações, consulte NuGet/Home#11985 e NuGet/Home#11986.

O NuGet usa apenas os pacotes de certificados do SDK do .NET.

Importante

Embora a funcionalidade de verificação de pacote assinado tenha sido adicionada no SDK do .NET 5, a funcionalidade não é suportada atualmente no macOS. Não use a verificação de pacote assinado com versões do SDK do .NET anteriores a 6.0.400. Deixe-o desativado por padrão.

Consulte também