Pacotes assinados

NuGet 4.6.0+ e Visual Studio 2017 versão 15.6 e posterior

Os pacotes NuGet podem incluir uma assinatura digital que fornece proteção contra conteúdo adulterado. Essa assinatura é produzida a partir de um certificado X.509 que também adiciona provas de autenticidade à origem real do pacote.

Os pacotes assinados fornecem a validação de ponta a ponta mais forte. Há dois tipos diferentes de assinaturas do NuGet:

  • Assinatura do autor. Uma assinatura do autor garante que o pacote não foi modificado desde que o autor assinou o pacote, não importa de qual repositório ou por qual método de transporte o pacote é entregue. Além disso, os pacotes assinados pelo autor fornecem um mecanismo de autenticação extra para o pipeline de publicação nuget.org, pois o certificado de autenticação deve ser registrado com antecedência. Para obter mais informações, consulte Registrar certificados.
  • Assinatura de repositório. As assinaturas de repositório fornecem uma garantia de integridade para todos os pacotes em um repositório, sejam eles assinados pelo autor ou não, mesmo que esses pacotes sejam obtidos de um local diferente do repositório original em que foram assinados.

Para obter detalhes sobre como criar um pacote assinado pelo autor, consulte Assinando pacotes e o comando nuget sign. Você pode verificar as assinaturas dos pacotes usando os comandos dotnet nuget verify ou nuget verify.

Importante

No momento, os pacotes assinados pelo autor são suportados apenas pelo nuget.exe no Windows. No entanto, todos os pacotes carregados no nuget.org são automaticamente assinados pelo repositório.

Requisitos de certificado

A assinatura de pacote requer um certificado de assinatura de código, que é um tipo especial de certificado válido para a finalidade id-kp-codeSigning [RFC 5280 seção 4.2.1.12]. Além disso, o certificado deve ter um tamanho de chave pública RSA de 2048 bits ou superior.

Requisitos de carimbo de data/hora

Os pacotes assinados devem incluir um carimbo de data/hora RFC 3161 para garantir a validade da assinatura além do período de validade do certificado de assinatura do pacote. O certificado usado para assinar o carimbo de data/hora deve ser válido para a finalidade id-kp-timeStamping [RFC 5280 seção 4.2.1.12]. Além disso, o certificado deve ter um tamanho de chave pública RSA de 2048 bits ou superior.

Detalhes técnicos adicionais podem ser encontrados nas especificações técnicas de assinatura do pacote (GitHub).

Requisitos de assinatura no NuGet.org

O nuget.org tem requisitos adicionais para aceitar um pacote assinado:

  • A assinatura principal deve ser uma assinatura do autor.
  • A assinatura principal deve ter um único carimbo de data/hora válido.
  • Os certificados X.509 para a assinatura do autor e sua assinatura de carimbo de data/hora:
    • Deve ter uma chave pública RSA de 2048 bits ou maior.
    • Deve estar dentro do período de validade por hora UTC atual no momento da validação do pacote em nuget.org.
    • Deve ser encadeado para uma autoridade raiz confiável que seja confiável por padrão no Windows. Pacotes assinados com certificados emitidos automaticamente são rejeitados.
    • Deve ser válido para a sua finalidade:
      • O certificado de autenticação do autor deve ser válido para assinatura de código.
      • O certificado de carimbo de data/hora deve ser válido para carimbo de data/hora.
    • Não deve ser revogado no momento da assinatura. (Isso pode não ser conhecido no momento do envio, portanto, o nuget.org verifica periodicamente o status de revogação).