Firma un paquete NuGet.

Un paquete firmado permite comprobar la integridad del contenido, lo que ofrece protección contra la manipulación del mismo. El hecho de firmar un paquete también sirve como prueba única en lo que respecta al origen real del paquete y permite reafirmar su autenticidad ante el cliente. En esta guía se da por hecho que ya ha creado un paquete.

Obtención de un certificado de firma de código

Los certificados válidos se pueden obtener de una entidad de certificación pública, como:

La lista completa de autoridades de certificación en las que confía Windows también puede obtenerse en http://aka.ms/trustcertpartners.

Si quiere realizar una prueba, también puede usar un certificado de emisión propia. Sin embargo, los paquetes firmados mediante certificados de emisión propia no se aceptan en NuGet.org. Más información sobre la creación de un certificado de prueba.

Exportación del archivo de certificado

  • Para exportar un certificado existente en formato binario DER, puede usar el asistente para exportación de certificados.

    Certificate Export Wizard

  • También puede exportar el certificado con el comando Export-Certificate de PowerShell.

Firma del paquete

Firme el paquete mediante la firma de nuget dotnet (se requiere el SDK de .NET 6.0.100 o una versión posterior).

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

o

Firme el paquete mediante la firma de nuget (se requiere nuget.exe 4.6.0 o una versión posterior):

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

Sugerencia

El proveedor de certificados a menudo proporciona también una URL de servidor de marca de tiempo que puede usar para el argumento opcional Timestamper que se muestra anteriormente. Consulte con su proveedor la documentación y la compatibilidad de esa URL de servicio.

  • Puede usar un certificado disponible en el almacén de certificados, o bien otro procedente de un archivo. Consulte la referencia de CLI sobre nuget sign.
  • Los paquetes firmados deben incluir una marca de tiempo para asegurarse de que la firma es válida cuando ha expirado el certificado de firma. De lo contrario, la operación de firma generará una advertencia.
  • Para consultar los detalles de la firma de un paquete determinado, use nuget verify.

Registro del certificado en NuGet.org

Para publicar un paquete firmado, primero debe registrar el certificado con NuGet.org. Necesita el certificado como un archivo .cer en un formato DER binario.

  1. Inicie sesión en NuGet.org.
  2. Vaya a Account settings (o, si quiere registrar el certificado con una cuenta de organización, a Manage Organization>Edit Organization).
  3. Expanda la sección Certificates y seleccione Register new.
  4. Busque el archivo del certificado que ha exportado anteriormente y selecciónelo. Registered Certificates

Nota:

  • Un usuario puede enviar varios certificados, del mismo modo que varios usuarios pueden registrar el mismo certificado.
  • Una vez que un usuario haya registrado un certificado, el resto de envíos de paquetes que realice deberán estar firmados con uno de los certificados. Consulte Administración de los requisitos de firma de paquetes en NuGet.org.
  • Los usuarios también pueden eliminar un certificado registrado de la cuenta. Una vez que el certificado se haya eliminado, los paquetes firmados con dicho significado no se podrán enviar. Los paquetes existentes no se verán afectados.

Publicar el paquete

Ahora está listo para publicar el paquete en NuGet.org. Consulte Publicación de paquetes.

Creación de un certificado de prueba

Si quiere realizar una prueba, también puede usar un certificado de emisión propia. Para crear un certificado de emisión propia, use el comando de PowerShell New-SelfSignedCertificate.

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 permite crear un certificado de prueba que estará disponible en el almacén de certificados personal del usuario actual. Para abrir el almacén de certificados y consultar el certificado que acaba de crear, ejecute certmgr.msc.

Advertencia

NuGet.org no admite paquetes firmados con un certificado de emisión propia.

Administración de los requisitos de firma de paquetes en NuGet.org

  1. Inicie sesión en NuGet.org.

  2. Vaya a Manage PackagesConfigure package signers

  • Si es el único propietario de un paquete, es el firmante obligatorio, es decir, puede utilizar cualquiera de los certificados registrados para firmar y publicar sus paquetes en NuGet.org.

  • Si un paquete tiene varios propietarios, de forma predeterminada se podrán utilizar certificados de cualquiera de ellos para firmar el paquete. Como copropietario del paquete, puede reemplazar "Cualquiera" por usted mismo o por cualquier otro de los copropietarios para que sea el firmante obligatorio. Si elige a un propietario que no tenga registrado ningún certificado, se permitirá el uso de paquetes sin firmar.

  • De igual modo, si se selecciona la opción predeterminada "Cualquiera" para un paquete con dos propietarios, uno que tenga un certificado registrado y otro que no tenga ninguno, NuGet.org aceptará tanto un paquete firmado con la firma registrada de uno de sus propietarios como uno sin firmar (puesto que uno de los propietarios no tiene ningún certificado registrado).