ansible-koji/docs/technical/decisiones/2026-06-16-03-implementacion_siguldry_pkcs11_spooler.rst
Rénich Bon Ćirić 89d6f66be8
feat: Integración de Siguldry PKCS#11 y spooler de firmas
* Implementación del rol de Ansible 'siguldry' para CentOS Stream 10
* Migración del plugin de firmas de Koji Hub a un spooler asíncrono
* Modificación de roles para utilizar empaquetamiento RPM nativo de siguldry-pkcs11
* Documentación de decisiones (ADRs) y roadmap en docs/technical/
* Limpieza de binarios locales pesados de PKCS#11 en Ansible

Co-developed-by: Gemini AI <renich+gemini@woralelandia.com>
Signed-off-by: Rénich Bon Ćirić <renich@woralelandia.com>
2026-06-16 10:06:44 -06:00

2.8 KiB

Implementación de Siguldry PKCS#11 y Spooler de Firmas

Este registro documenta la decisión e implementación de usar la compilación cruzada local del módulo PKCS#11 de Siguldry, su distribución e integración con el spooler de firmas de Koji.

Contexto

En el registro 2026-06-16-02 identificamos el bloqueo de compilación de python-nss en CentOS Stream 10, imposibilitando el cliente de Sigul tradicional. Seleccionamos Siguldry (Rust) como alternativa nativa moderna.

Sin embargo, al configurar el paquete RPM de siguldry en EPEL 10, encontramos que la biblioteca dinámica del módulo PKCS#11 (libsiguldry_pkcs11.so) no está empaquetada ni disponible en los repositorios de CentOS Stream 10 / EPEL 10, a pesar de que los servicios principales (server, bridge y client) sí están presentes.

Decisión

Para resolver la ausencia del módulo PKCS#11 y mantener la compatibilidad con el backend de firmas moderno de CentOS Stream 10, tomamos las siguientes decisiones:

  1. Compilación en Host de Desarrollo: Compilar localmente el sub-crate siguldry-pkcs11 en la máquina de desarrollo del administrador (Fedora 43 x86_64) utilizando cargo build --release.

  2. Distribución vía Ansible: Colocar la biblioteca compilada libsiguldry_pkcs11.so en los archivos del rol koji_hub y desplegarla en /usr/lib64/libsiguldry_pkcs11.so del Hub VM con permisos de ejecución.

  3. Migración del Spooler a rpmsign: Reescribir el demonio koji-sign-spooler para invocar el comando nativo rpmsign con el backend de Sequoia PGP (motor por defecto en EL10), configurando las variables de entorno PKCS11_MODULE_PATH y SIGULDRY_SOCKET en el proceso.

  4. Almacenamiento de Credenciales con systemd: Utilizar el directorio nativo /etc/credstore/ para alojar las claves TLS y la frase de paso de GPG, permitiendo que systemd las exponga al demonio a través del mecanismo seguro de credenciales ImportCredential=siguldry.*.

Implicaciones

  • Seguridad Mejorada: Las claves GPG y TLS se gestionan e importan usando los mecanismos de aislamiento modernos de systemd, sin exponer credenciales en archivos planos del sistema.

  • Integración Transparente: Al firmar los paquetes RPM en caliente mediante rpmsign sobre el almacenamiento NFS de Koji, extraemos la firma directamente usando koji.rip_rpm_sighdr para guardarla en la base de datos de Koji, igualando el comportamiento del Hub oficial.

  • Independencia de Compilación en VMs: Las máquinas virtuales de staging de Koji no requieren instalar herramientas de desarrollo pesadas como cargo o rustc, manteniendo una huella de memoria ligera.