Paquetes firmados

NuGet 4.6.0+ y Visual Studio 2017 versión 15.6 y posteriores

Los paquetes NuGet pueden incluir una firma digital que proporciona protección contra el contenido alterado. Esta firma se genera a partir de un certificado X.509 que también agrega pruebas de autenticidad al origen real del paquete.

Los paquetes firmados proporcionan la validación de un extremo a otro más segura. Hay dos tipos de firmas de Nuget diferentes:

  • Firma del creador. Una firma del creador garantiza que el paquete no se ha modificado desde que el creador lo ha firmado, independientemente del repositorio o del método de transporte con el que se entrega el paquete. Además, los paquetes firmados por el creador proporcionan un mecanismo de autenticación adicional a la canalización de publicación de nuget.org, porque el certificado de firma se debe registrar con antelación. Para más información, vea Registro de certificados.
  • Firma de repositorio. Las firmas de repositorio proporcionan una garantía de integridad para todos los paquetes de un repositorio independientemente de que estén firmados por el creador o no, incluso si esos paquetes se obtienen de una ubicación diferente a la del repositorio original donde se han firmado.

Para más información sobre cómo crear un paquete firmado por el creador, vea Firma de paquetes y el comando nuget sign. Puede comprobar las firmas de los paquetes mediante los comandos dotnet nuget verify o nuget verify.

Importante

En este momento los paquetes de firma de creador solo son compatibles con nuget.exe en Windows. Pero todos los paquetes cargados en nuget.org se firman automáticamente en el repositorio.

Requisitos de certificados

Para la firma de paquetes se necesita un certificado de firma de código, que es un tipo especial de certificado válido para id-kp-codeSigning [sección 4.2.1.12 de RFC 5280]. Además, el certificado debe tener una longitud de clave pública RSA de 2048 bits o superior.

Requisitos de marca de tiempo

Los paquetes firmados deben incluir una marca de tiempo RFC 3161 para garantizar la validez de la firma más allá del período de validez del certificado de firma del paquete. El certificado usado para firmar la marca de tiempo debe ser válido para el propósito id-kp-timeStamping [sección 4.2.1.12 de RFC 5280]. Además, el certificado debe tener una longitud de clave pública RSA de 2048 bits o superior.

Puede encontrar detalles técnicos adicionales en las especificaciones técnicas de firma de paquetes (GitHub).

Requisitos de firma en NuGet.org

nuget.org tiene requisitos adicionales para aceptar un paquete firmado:

  • La firma principal debe ser una firma de creador.
  • La firma principal debe tener una sola marca de tiempo válida.
  • Certificados X.509 para la firma de creador y su firma de marca de tiempo:
    • Debe tener una clave pública RSA de 2048 bits o superior.
    • Debe estar dentro de su período de validez según la hora UTC actual en el momento de la validación del paquete en nuget.org.
    • Debe encadenarse a una entidad raíz de confianza que sea de confianza de forma predeterminada en Windows. Se rechazan los paquetes firmados con certificados autoemitidos.
    • Debe ser válido para su propósito:
      • El certificado de firma de creador debe ser válido para la firma de código.
      • El certificado de marca de tiempo debe ser válido para la marca de tiempo.
    • No se debe revocar en el momento de la firma. (Es posible que esto no se conozca en el momento del envío, por lo que nuget.org vuelve a comprobar periódicamente el estado de revocación).