Partilhar via


Verificação de pacotes assinados do 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 dos pacotes NuGet são baseadas em certificados X.509, e um pré-requisito para a verificação de pacotes assinados é um depósito raiz de certificados que seja válido tanto para assinatura de código quanto para 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.
  • Que tipo de armazenamento base é utilizado?

Mac OS

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 para finalidades gerais e ao 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.

Aplicações 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 procurará um conjunto 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 faltar certificados de raiz, como os usados em pacotes assinados no NuGet.org, a verificação de pacotes assinados pelo NuGet falhará, resultando num estado 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 a verificação de certificados de carimbo de data/hora, o NuGet utiliza sempre o pacote de certificados do SDK do .NET.

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.

Ver também