======================================================== 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.