¿Qué es NuGet?
NuGet es el gestor de paquetes oficial del ecosistema .Net. Proporciona plataformas y herramientas que ayudan a los desarrolladores a crear, publicar y usar paquetes .Net. Seguro que te estás preguntando qué es un paquete. Los paquetes generalmente son bibliotecas compiladas con metadatos descriptivos en una unidad fácil de compartir. La función de NuGet es hacer que estas bibliotecas sean lo más accesibles y fáciles de compartir posible en forma de paquetes. NuGet ayuda a los desarrolladores a aprovechar todo un ecosistema y a construir sobre las soluciones existentes en lugar de crear todo desde cero.
Lea el artículo a continuación para comprender mejor qué es la firma NuGet.
Un paquete NuGet es un archivo comprimido, identificable por la extensión .nupkg, que incluye código compilado (DLL), archivos asociados y un manifiesto descriptivo que detalla atributos como la versión del paquete. Los desarrolladores que desean compartir su código generan estos paquetes y los publican en un host público o privado. Los usuarios de estos paquetes los recuperan de los hosts adecuados, los integran en sus proyectos y, posteriormente, invocan la funcionalidad del paquete en el código de su proyecto. NuGet gestiona todos los detalles intermedios sin problemas.
La versatilidad de NuGet se extiende tanto al alojamiento público de nuget.org como a la compatibilidad con hosts privados. Esta flexibilidad permite utilizar paquetes NuGet para compartir código exclusivamente dentro de una organización o grupo de trabajo. Además, los desarrolladores pueden emplear paquetes NuGet como un método optimizado para modularizar su código y usarlo exclusivamente en sus proyectos. Un paquete NuGet es una unidad de código distribuible sin requisitos ni implicaciones específicas en cuanto al modo de uso compartido.
Hablemos del flujo de paquetes
En su función pública, NuGet es como una gran biblioteca (nuget.org) con más de 100 000 paquetes diferentes. Muchos desarrolladores de .NET/.NET Core usan estos paquetes a diario. NuGet también te permite tener tu biblioteca privada en la nube (como en Azure DevOps), en una red privada o en tu ordenador. De esta forma, solo ciertos desarrolladores con acceso a la biblioteca pueden usar esos paquetes y puedes compartirlos con un grupo específico. Puedes obtener más información sobre estas opciones en "Hospedar tus propios feeds de NuGet". Al configurarlo de cierta manera, puedes controlar de qué bibliotecas un ordenador puede obtener paquetes, asegurándote de que provengan de fuentes específicas y no solo de la gran biblioteca pública (nuget.org).
Sea como sea, una biblioteca es como un punto de encuentro para creadores y usuarios de paquetes. Los creadores crean paquetes NuGet útiles y los incluyen en una biblioteca. Los usuarios buscan paquetes útiles en bibliotecas accesibles, los descargan y los añaden a sus proyectos. Una vez en un proyecto, las herramientas de estos paquetes están listas para usarse en el resto del código.
Antes de profundizar en la firma de NuGet, entendamos qué es la firma de código.
Firma de código es un criptográfico Proceso que implica adjuntar una firma digital al software para verificar su origen y garantizar que no haya sido manipulado. Esta firma digital se genera mediante una clave privada y puede verificarse con la clave pública correspondiente, lo que proporciona a los usuarios confianza en la autenticidad e integridad del código.
Beneficios clave de la firma de código:
-
Autenticidad
La firma de código verifica la identidad del editor del software, lo que garantiza que los usuarios puedan confiar en la fuente del código.
-
Integridad
Adjuntar una firma digital al código puede detectar modificaciones no autorizadas, protegiéndolo contra manipulaciones.
-
Distribución a prueba de manipulaciones
La firma de código permite a los desarrolladores distribuir su software de forma segura, reduciendo el riesgo de alteraciones maliciosas durante el tránsito.
Comprensión de la firma NuGet
Como se mencionó anteriormente, NuGet es un gestor de paquetes popular para el desarrollo .NET, que permite a los desarrolladores compartir y consumir código fácilmente. La firma de NuGet es una extensión de la firma de código diseñada específicamente para paquetes NuGet. Al firmar un paquete NuGet, se incluye una firma digital que ofrece las mismas ventajas que la firma de código tradicional, garantizando la autenticidad e integridad del código empaquetado.
Requisitos generales de la firma de NuGet
-
Asegúrese de que un paquete firmado siga siendo compatible con los lectores y escritores de paquetes que no admiten la firma de paquetes.
-
Integre la firma del paquete de forma intrincada dentro del archivo del paquete.
-
Cumpla estrictamente la regla de que cada paquete firmado debe contener exactamente una firma principal. (La co-firma está explícitamente prohibida)
-
Lo ideal es designar la firma principal como firma de autor o de repositorio.
-
Al aplicar una firma de autor, asegúrese de que sea la firma principal. Elimine la firma principal existente antes de agregar una firma de autor a un paquete ya firmado.
Requisitos mínimos del certificado
Un certificado de firma de NuGet DEBE cumplir los siguientes requisitos mínimos:
-
La función certificado DEBE ser válido para el propósito de id-kp-codeSigning [RFC 5280 sección 4.2.1.12].
-
El certificado DEBE tener una RSA longitud de clave pública de 2048 bits o superior.
Un certificado de sellado de tiempo DEBE cumplir los siguientes requisitos mínimos:
-
El certificado DEBE ser válido para el propósito id-kp-timeStamping [RFC 5280 sección 4.2.1.12].
-
El certificado DEBE tener una longitud de clave pública RSA de 2048 bits o superior.
Al momento de la firma, un certificado DEBE estar dentro de su período de validez según el autor del paquete y NO DEBE ser revocado. Al momento de la validación, el revocación del certificado Se DEBE verificar nuevamente el estado; sin embargo, los lectores de paquetes PUEDEN no poder abrirse si el estado de revocación no está disponible (por ejemplo, una CRL es inaccesible).
Los certificados NO DEBEN tener el EKU de firma de por vida (1.3.6.1.4.1.311.10.3.13).
Algoritmos soportados:
Se DEBEN admitir los siguientes algoritmos hash:
| Algoritmo hash | Algoritmo hash-Oid |
| SHA-2-256 | 2.16.840.1.101.3.4.2.1 |
| SHA-2-384 | 2.16.840.1.101.3.4.2.2 |
| SHA-2-512 | 2.16.840.1.101.3.4.2.3 |
Flujo de trabajo de firma de NuGet: Firma de un paquete
A continuación se describen los pasos que debe seguir el autor para firmar un paquete.
Paso 1: Determinar si el paquete está firmado
- Si el paquete está firmado y la operación de firma no debe sobrescribir una firma existente: la operación de firma falla con un mensaje que dice "el paquete ya está firmado".
- Si el paquete está firmado y la operación de firma debo sobrescribir una firma existente: elimine la firma existente y siga el paso 2
- Si el paquete no está firmado, continúe con el paso 2
Paso 2:Verifique que el certificado de firma cumpla con los requisitos mínimos (como se mencionó anteriormente)
Paso 3: Verificar que el soporte sea compatible hachísSe utilizan algoritmos hash de firma y marca de tiempo. (como se mencionó anteriormente)
Paso 4: Generar archivo de firma de paquete
- Crear firma de autor
- Obtener una marca de tiempo de la firma del autor
Verifique que el certificado de firma de marca de tiempo cumpla con los requisitos mínimos del certificado (como se mencionó anteriormente) y utilice el algoritmo hash compatible.
- Ampliar la firma del autor a CAdES-T [RFC 5126]
- Codificar la firma del autor CMS SignedData
- Escriba la firma del autor codificada en el archivo
Paso 5: Agregue el archivo de firma del paquete como un archivo sin comprimir (almacenado) al paquete que se está firmando
Paso 6: Validar el paquete firmado
- Determinar si el paquete está firmado (si no está firmado, detener la validación inmediatamente)
- Verifique que el archivo de firma del paquete sea un archivo normal y sin comprimir.
- Verifique que el formato de firma del paquete sea compatible.
- Verificar la integridad del paquete
- Verificar la validez y la confianza de la firma principal
- Si no se han encontrado fallos, trate el paquete como un paquete firmado válido.
Conclusión
NuGet es un gestor de paquetes gratuito y de código abierto para el ecosistema .NET. En un mundo donde el software... ataques a la cadena de suministro están aumentando, implementando medidas de seguridad robustas como firma de código La firma NuGet es esencial. Estas prácticas infunden confianza en la cadena de suministro de software, brindando a los desarrolladores y usuarios finales seguridad en la autenticidad e integridad del código que consumen.
CodeSign seguro Firmar paquetes NuGet sin complicaciones. Con la solución CodeSign Secure de Encryption Consulting, ofrecemos un enfoque altamente efectivo y eficiente para firmar paquetes NuGet. Nuestra solución no solo garantiza la seguridad de sus paquetes mediante robustas medidas criptográficas, sino que también agiliza el proceso de firma, mejorando la eficiencia general de su ciclo de desarrollo de software.
Referencias:
RFC 5126 – Firmas electrónicas avanzadas de CMS (CAdES) (ietf.org)
