Compartilhar via


Verificação de pacote assinado do NuGet

Você pode assinar um pacote NuGet para permitir que os consumidores de 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 do pacote NuGet são baseadas em certificados X.509 e um pré-requisito para verificação de pacote assinado é um repositório 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 certificado incluídos no SDK do .NET para verificar os pacotes assinados em que um repositório raiz do sistema adequado não está disponível. Esses pacotes são provenientes do Programa Raiz Confiável da Microsoft e contêm os mesmos certificados de assinatura de código e carimbo de data/hora que o repositório raiz no Windows. Esses pacotes de certificado devem conter todos os certificados raiz necessários para verificar os pacotes de 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 operações de restauração é habilitada por padrão.
  • Como habilitá-lo.
  • Quais repositórios raiz são usados.

Windows

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

O NuGet usa o repositório raiz padrão no Windows, que já dá suporte à assinatura de código de uso geral e ao carimbo de data/hora. Os pacotes de certificados do SDK do .NET não são usados. Todas as funcionalidades de verificação de pacote assinado têm suporte no Windows na versão do SDK do .NET na qual ela 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 tem suporte 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 à 6.0.400.

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

A partir do SDK do .NET 8, a verificação é habilitada por padrão. Para recusar, 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á em vez do 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 ele não tiver certificados raiz, como os usados em pacotes assinados no NuGet.org, a verificação do pacote assinado do NuGet falhará com um status não confiável (via NU3018 ou NU3028). Adicionar certificados raiz a esse pacote de certificados pode habilitar a verificação bem-sucedida; no entanto, tenha em mente que esse pacote de certificados é um repositório de confiança em todo o sistema, enquanto os pacotes de certificados do SDK do .NET são usados como um repositório de confiança em todo o aplicativo.

Se um pacote de certificado válido não for encontrado no local acima, o NuGet retornará ao uso do 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 de pacote. Para autorizar, defina a variável de ambiente DOTNET_NUGET_SIGNATURE_VERIFICATION como true. No entanto, recomendamos que você não habilite 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 tem suporte no macOS no momento. Não use a verificação de pacote assinado com versões do SDK do .NET anteriores à 6.0.400. Deixe-o desabilitado por padrão.

Consulte também