Assinar um pacote NuGet.

Um pacote assinado permite verificações de integridade do conteúdo que oferecem proteção contra violação de conteúdo. A assinatura do pacote também serve como a única fonte de verdade sobre a origem real do pacote e reforça a autenticidade do pacote para o consumidor. Este guia pressupõe que você já criou um pacote.

Obter um certificado de assinatura de código

Certificados válidos podem ser obtidos de uma autoridade de certificação pública, como:

A lista completa de autoridades de certificação confiáveis para Windows também pode ser obtida em http://aka.ms/trustcertpartners.

Você pode usar certificados emitidos por conta própria para fins de teste. No entanto, os pacotes assinados com certificados emitidos por conta própria não são aceitos pelo NuGet.org. Saiba mais sobre como criar um certificado de teste.

Exportar o arquivo do certificado

  • Você pode exportar um certificado existente para um formato DER binário usando o Assistente de Exportação de Certificados.

    Certificate Export Wizard

  • Você também pode exportar o certificado usando o comando Export-Certificate do PowerShell.

Assinar o pacote

Assine o pacote usando o comando dotnet nuget sign (requer o SDK do .NET 6.0.100 ou posterior).

dotnet nuget sign MyPackage.nupkg --certificate-path <PathToTheCertificate> --timestamper <TimestampServiceURL>

or

Assine o pacote usando o comando nuget sign (requer o nuget.exe 4.6.0 ou posterior).

nuget sign MyPackage.nupkg -CertificatePath <PathToTheCertificate> -Timestamper <TimestampServiceURL>

Dica

Geralmente, o provedor de certificado também fornece uma URL de servidor de carimbo de data/hora que pode ser usada para o argumento opcional Timestamper mostrado acima. Consulte a documentação e/ou o suporte do seu provedor para essa URL de serviço.

  • Você pode usar um certificado disponível no repositório de certificados ou usar um certificado de um arquivo. Consulte a CLI de referência para nuget sign.
  • Os pacotes assinados devem incluir um carimbo de data/hora para assegurar que a assinatura permaneça válida quando o certificado de autenticação expira. Caso contrário, a operação de entrada produzirá um aviso.
  • Você pode usar nuget verify para ver os detalhes da assinatura de um determinado pacote.

Registrar o certificado em NuGet.org

Para publicar um pacote assinado, você deve primeiro registrar o certificado com NuGet.org. Você precisará do certificado como um arquivo .cer em um formato DER binário.

  1. Entre em NuGet.org.
  2. Vá para Account settings (ou Manage Organization>Edit Organization se você gostaria de registrar o certificado com uma conta de organização).
  3. Expanda a seção Certificates e selecione Register new.
  4. Procure e selecione o arquivo de certificado que foi exportado anteriormente. Registered Certificates

Observação

  • Um usuário pode enviar vários certificados e o mesmo certificado pode ser registrado por vários usuários.
  • Depois que um usuário tem um certificado registrado, todos os envios de pacote futuros precisam ser assinados com um dos certificados. Veja Gerenciar os requisitos de assinatura do seu pacote em NuGet.org
  • Os usuários também podem remover um certificado registrado da conta. Depois que um certificado é removido, o envio de novos pacotes assinados com esse certificado falhará. Os pacotes existentes não serão afetados.

Publicar o pacote

Agora você está pronto para publicar o pacote em NuGet.org. Consulte Publicando pacotes.

Criar um certificado de teste

Você pode usar certificados emitidos por conta própria para fins de teste. Para criar um certificado emitido por conta própria, use o comando New-SelfSignedCertificate do PowerShell.

New-SelfSignedCertificate -Subject "CN=NuGet Test Developer, OU=Use for testing purposes ONLY" `
                          -FriendlyName "NuGetTestDeveloper" `
                          -Type CodeSigning `
                          -KeyUsage DigitalSignature `
                          -KeyLength 2048 `
                          -KeyAlgorithm RSA `
                          -HashAlgorithm SHA256 `
                          -Provider "Microsoft Enhanced RSA and AES Cryptographic Provider" `
                          -CertStoreLocation "Cert:\CurrentUser\My" 

Este comando cria um certificado de teste disponível no repositório de certificados pessoal do usuário atual. Você pode abrir o repositório de certificados executando certmgr.msc para ver o certificado recém-criado.

Aviso

O NuGet.org não aceita pacotes assinados com certificados emitidos por conta própria.

Gerenciar os requisitos de assinatura do seu pacote em NuGet.org

  1. Entre em NuGet.org.

  2. Acesse Manage PackagesConfigure package signers

  • Se for o único proprietário de um pacote, você será o signatário necessário, ou seja, poderá usar qualquer um dos certificados registrados para assinar e publicar seus pacotes em NuGet.org.

  • Se um pacote tem vários proprietários, por padrão, os certificados do proprietário "Qualquer" podem ser usados para assinar o pacote. Como um coproprietário do pacote, você pode substituir "Qualquer" consigo mesmo ou com qualquer outro coproprietário para ser o signatário necessário. Se você criar um proprietário que não tiver nenhum certificado registrado, os pacotes não assinados serão permitidos.

  • Da mesma forma, se a opção "Qualquer" estiver selecionada para um pacote em que um proprietário tenha um certificado registrado e o outro proprietário não tenha nenhum certificado registrado, o NuGet.org aceitará um pacote assinado com uma assinatura registrada por um de seus proprietários ou então aceitará um pacote não assinado (porque um dos proprietários não tem nenhum certificado registrado).