Verificação de pacote assinado 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 o consumidor do pacote compila ou executa o 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 onde um repositório raiz do sistema adequado não está disponível. Esses pacotes têm origem no Microsoft Trusted Root Program 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 certificados 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 as operações de restauração está habilitada por padrão.
  • Como habilitar a verificação.
  • 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 utilize a verificação de pacote conectado com versões do .NET SDK 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 de ambiente DOTNET_NUGET_SIGNATURE_VERIFICATION 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 contiver pelo menos o mesmo conjunto de certificados raiz que o pacote de certificados do SDK do .NET, a verificação do pacote assinado pelo NuGet deverá ser bem-sucedida. Se 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). A adição de 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 confiável em todo o sistema, enquanto os pacotes de certificados do SDK do .NET são usados como um repositório confiável em todo o aplicativo.

Se um pacote de certificados 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 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/Página Inicial#11985 e NuGet/Página Inicial#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 utilize a verificação de pacote conectado com versões do .NET SDK anteriores à 6.0.400. Deixe-a desabilitada por padrão.

Confira também