RPM (Red Hat Package Manager) es un sistema de gestión de paquetes utilizado en distribuciones Linux, en particular en aquellas basadas en Red Hat, como Fedora y CentOS. Los paquetes RPM son paquetes de software que contienen archivos ejecutables, bibliotecas, documentación y otros recursos necesarios para que una aplicación o servicio específico funcione correctamente en un sistema Linux.
Los paquetes RPM son archivos comprimidos que siguen un formato de archivo y una convención de nomenclatura específicos. Suelen tener la extensión ".rpm" y se pueden instalar, actualizar o eliminar mediante herramientas de gestión de paquetes RPM.
El formato de paquete RPM se usa ampliamente en muchas distribuciones de Linux y simplifica la gestión de software al proporcionar un método estandarizado y confiable para empaquetar y distribuir software.
Resumen
Para firmar paquetes RPM con claves GPG, normalmente se siguen los siguientes pasos:
-
Generar par de claves GPG
El responsable del paquete o su distribuidor genera un par de claves GPG compuesto por una clave privada y su correspondiente clave pública. La clave privada se mantiene segura (preferiblemente en un HSM ) y no debe compartirse, mientras que la clave pública puede distribuirse ampliamente.
-
Configurar la firma RPM
La clave pública GPG se añade al conjunto de claves del gestor de paquetes RPM, lo que le permite verificar los paquetes firmados con la clave privada correspondiente. Este paso garantiza que el gestor de paquetes reconozca la clave GPG como confiable.
-
Firmar paquetes RPM
El responsable del mantenimiento del paquete firma los paquetes RPM utilizando la clave privada asociada al par de claves GPG. Este proceso genera una firma digital para cada paquete.
-
Verificar paquetes RPM
Cuando el gestor de paquetes RPM encuentra un paquete firmado, utiliza la clave pública GPG para verificar su firma. Comprueba si la firma es válida y coincide con el contenido del paquete, garantizando así que no haya sido modificada ni alterada desde su firma.
La firma RPM con claves GPG añade seguridad adicional a los paquetes RPM. Ayuda a establecer la autenticidad e integridad de los paquetes al confirmar que fueron firmados por la entidad que posee la clave privada asociada a la clave pública GPG. Este método permite a los usuarios y sistemas verificar la fiabilidad de los paquetes RPM antes de su instalación y protege contra modificaciones no autorizadas o manipulaciones maliciosas.
Requisitos previos
-
Generar par de claves en HSM
-
Cambiar el directorio a /opt/nfast/bin
$ cd /opt/nfast/bin -
Ejecute el comando e ingrese los detalles apropiados
$ ./generatekey pkcs11 selfcert=yesNota: Recuerde el nombre y la dirección de correo electrónico de su clave, ya que los necesitará en los pasos siguientes.
-
Ejecutar comando
$ ./ckcerttool -n -f pkcs11_ua4335d6933d9809f048dcf4bc47c90194f2f7ba4b_selfcert -k ua4335d6933d9809f048dcf4bc47c90194f2f7ba4b -L rpmtestAquí, la opción “ -f ” corresponde a “autocertificado”, la opción “ -k ” se refiere a la clave y el parámetro “ -L ” debe coincidir con el nombre de la clave ingresado previamente.
-
Instalar gnupg-pkcs11-scd
$ sudo apt-get install gnupg-pkcs11-scdNota: Si encuentra algún problema al ejecutar el comando “sudo apt-get install” , intente ejecutar el siguiente comando previamente.
$ sudo apt-get update && sudo apt-get upgrade -y -
Configurar el agente gnupg
-
Edita las siguientes líneas en el archivo gpg-agent.conf
$ nano ~/.gnupg/gpg-agent.conf
- Enter the below lines and save the file
scdaemon-program /usr/bin/gnupg-pkcs11-scd
pinentry-program /usr/bin/pinentry -
Edite las siguientes líneas en el archivo gnupg-pkcs11-scd.conf
$ nano ~/.gnupg/gnupg-pkcs11-scd.conf
- Enter the below lines and save the file
providers p1
provider-p1-library /opt/nfast/toolkits/pkcs11/libcknfast.so
-
-
Recargar el agente
$ gpg-agent --server gpg-connect-agent <<EOF
> RELOADAGENT
> EOF -
Obtenga la cadena GPG KEY-FRIENDLY (de la clave recién generada)
-
Recuperar los datos de la tarjeta
$ gpg --card-status -
Recuperar nombres y certificados compatibles con claves
$ gpg-agent --server gpg-connect-agent << EOF
> SCD LEARN
> EOF
-
-
Importar la clave al llavero GPG 2
$gpg --expert --full-generate-keyNota: Introduzca el teclado virtual generado previamente en el parámetro "Introduzca la combinación de teclas".
-
Para comprobar la clave en el llavero gpg, ejecute el siguiente comando.
$ gpg --list-keys
-
-
Establezca variables de entorno para la ruta del certificado de autenticación de cliente SSL y la contraseña del certificado.
Nota: El certificado de autenticación de cliente SSL debe estar en formato PKCS12 (.p12 o .pfx).
Ejecute el siguiente comando para establecer las variables de entorno:
-
Mac o Linux
$ export EC_Client_Auth=path_to_ssl_certificate
$ export EC_Client_Pass=your_client_certificate_password -
Windows
$ set EC_Client_Auth=path_to_ssl_certificate
$ set EC_Client_Pass=your_client_certificate_password
-
-
Instale todos los siguientes requisitos:
- criptografía==1.4.1
- criptografía==40.0.2
- pycryptodome==3.16.0
- solicitudes == 2.28.2
¿Cómo utilizar la utilidad RPM Signer?
Obtenga la versión de la utilidad RPM Signer
Ejecute el siguiente comando
$ python3 rpmsigner.py -v or $ python3 rpmsigner.py --version
Firmar un paquete RPM
Ejecute el siguiente subcomando sign para firmar un paquete RPM.
Sintaxis:
python3 rpmsigner.py sign <file_to_be_signed> -u <user_name> -k <key_name> -i <issuer_email> -f <key_fingerprint> -a <algorithm> [-o <output_sig_file_name>]
parámetros:
- firmar: Paquete RPM a firmar.
- -tu: Un nombre de usuario en el servidor de firma de código de Encryption Consulting.
- -k: Nombre de clave/certificado para firma/verificación proporcionado por el servidor de firma de código de Encryption Consulting.
- -I: Dirección de correo electrónico del usuario utilizada para generar el par de claves.
- -F: Huella digital de clave gpg en formato hexadecimal.
-
-un:
Algoritmo para firmar. Se utilizará una de las siguientes opciones:
- SHA224
- SHA256 (predeterminado)
- SHA384
- SHA512
Si no se proporciona el algoritmo, utilizará SHA256 como predeterminado.
- -o: Archivo de salida para almacenar la firma. Este parámetro es opcional. Si se proporciona esta opción, se generará un archivo de firma con el nombre especificado. .sig
- -h: Mostrar ayuda.
- -v: Mostrar registros detallados.
Ejemplo:
python3 rpmsigner.py sign test_rpm_signer.rpm -u admin -k RPMtestcert -i [email protected] -f
3E633D3878815FAC111CF488FC15CA0088C43155 -a SHA256 -o myFile.sig
Verificar un paquete RPM
Ejecute el siguiente subcomando de verificación para verificar la firma de un paquete RPM.
Sintaxis:
python3 rpmsigner.py verify <file_to_be_verified> -u <user_name> -k <key_name> -i <issuer_email> -f <key_fingerprint> -a <algorithm>
Ejemplo:
python3 rpmsigner.py verify test_rpm_signer.rpm -u admin -k RPMtestcert -i [email protected] -f
3E633D3878815FAC111CF488FC15CA0088C43155 -a SHA256
¿Quieres saber cómo podemos ayudarte?
CodeSign Secure de Encryption Consulting ofrece a las organizaciones una solución integral de firma de código adaptada a sus necesidades específicas. Mediante esta solución, las organizaciones pueden establecer una sólida política de firma de código que mitiga eficazmente los riesgos de seguridad y garantiza la autenticidad de su software. Nuestro producto optimiza el proceso de firma de código y ofrece diversas funciones diseñadas para mejorar la seguridad.
Una característica clave de CodeSign Secure es la gestión segura de claves. Permite a las organizaciones almacenar de forma segura las claves privadas de sus certificados de firma de código mediante la integración con módulos de seguridad de hardware (HSM) líderes en el sector y con certificación FIPS. Esta integración elimina los riesgos potenciales asociados al robo, la corrupción o el uso indebido de claves, ya que las claves privadas nunca salen del HSM durante el proceso de firma de código.
