
YubiHSM 2 y cert-manager para TLS por hardware en Kubernetes
Cómo empezó el debate
He creado un emisor externo para cert-manager que firma certificados TLS utilizando una clave privada alojada dentro de un YubiHSM 2. La clave nunca sale del dispositivo físico. ¿Es exagerado para un homelab? Desde luego. Pero si vas a gestionar tu propia autoridad de certificación (CA), más vale hacer que la clave privada resulte físicamente imposible de robar.
El emisor de CA integrado en cert-manager almacena tu clave de firma en un Kubernetes Secret, a solo un simple comando kubectl get secret de quedar expuesta. La parte divertida de este proyecto consistió en conectar el HSM con la interfaz crypto.Signer de Go para que cert-manager ni siquiera note que la firma procede del hardware. Funciona exactamente igual que cualquier otro emisor. Artículo detallado con la arquitectura y el código: https://charles.dev/blog/yubihsm-cert-manager
Mi siguiente proyecto consiste en construir una cartera de Bitcoin respaldada por hardware con el mismo YubiHSM 2. Encantado de resolver dudas mientras tanto.
Lo más destacado en los comentarios
Punto de debate 1
Robarlo físicamente tampoco bastaría. La clave se almacena como un objeto no exportable, así que no existe forma humana de extraerla por USB ni a través de ninguna API. El módulo HSM firmará peticiones, pero jamás revelará la clave en sí. Lograr extraerla exigiría ataques invasivos a nivel de silicio con instrumental especializado de laboratorio. Llegados a ese extremo, estás atacando el silicio, no el software.
Punto de debate 2
¿Es posible crear un clúster de YubiHSM con distribución de claves y balanceo de carga en tiempo real? Es decir, si falla una clave, ¿cómo garantizas la redundancia y el failover sin pérdida de datos? ¿Y el balanceo de carga utilizando múltiples dispositivos YubiHSM?
Punto de debate 3
¿Acaso robarlo físicamente no es el único camino viable?
Punto de debate 4
He desarrollado una biblioteca en Go llamada yubihsm-sync que replica objetos criptográficos entre 2-5+ dispositivos YubiHSM mediante un demonio en segundo plano. Detecta cambios continuamente y los sincroniza entre todos los dispositivos del grupo. Si un HSM se avería, los demás ya disponen de todas las claves. Esto se consigue utilizando claves maestras de empaquetado (wrapping keys) compartidas. El mismo proyecto incluye una pasarela compatible con el protocolo nativo que se sitúa entre tus aplicaciones y los HSM, por lo que las aplicaciones no necesitan saber que detrás operan varios dispositivos. Admite múltiples modos de enrutamiento:
- Principal/failover: utiliza un único HSM y asciende automáticamente a otro si el primero cae
- Round-robin: distribuye las peticiones entre todos los HSM operativos
- Basado en contenido: enruta hacia el HSM específico que aloja el objeto solicitado
Gestiona automáticamente la afinidad de sesión, la agrupación de conexiones y las comprobaciones de estado. Detallaré el funcionamiento de estas herramientas y las lecciones aprendidas en una próxima publicación de la serie.
Punto de debate 5
Por ahora no hay repositorio público. Se trata de un proyecto personal que me encantaría convertir en producto comercial en el futuro, así que de momento mantengo el código en privado. Ahora mismo estoy totalmente volcado en desarrollar las bibliotecas base y las integraciones profundas en toda la pila. Dicho esto, nada de lo que hago es ningún truco secreto a nivel conceptual. El mecanismo de importación y exportación con wrap keys de YubiHSM es lo que hace posible la replicación, y el protocolo está ampliamente documentado por Yubico. Cualquiera con la motivación necesaria podría construir esto por su cuenta, y confío en que estas publicaciones sirvan de guía para ello. Mi siguiente artículo tratará sobre la implementación de BTC y la interfaz de terminal (TUI) que programé para acompañarla. Parte de la gracia de compartir esto es ver qué le interesa a la gente, así que agradezco sinceramente preguntas como esta. No dudes en escribirme si quieres más detalles o te interesa colaborar.
Resumen del hilo
- Subreddit original: r/kubernetes
- Autor original: u/net_charlessullivan
- Puntuación en Reddit: 63
- Número de comentarios: 18
- Hilo original: https://www.reddit.com/r/kubernetes/comments/1r6b2fg/yubihsm_2_certmanager_hardwaresigned_tls/