Fondo
He estado jugando con la idea de usar una clave privada protegida envuelta por una API, como Azure KeyVault o Amazon KMS para firmar certificados para la infraestructura de clave privada interna.
Conceptualmente, esto es similar a usar el Agente de OpenSSH para firmar solicitudes de conexión para SSH. La clave nunca se expone a la aplicación que preparó la solicitud.
Mi interés es principalmente académico. Manejo las claves RSA con frecuencia para el trabajo, y me encanta echar un vistazo debajo de las fundas a cómo funciona todo. Pero si puedo encontrar algo que realmente esté listo para la producción, podría usarlo para mi trabajo diario con implementaciones web.
Opciones que he explorado
Azure KeyVault proporciona una interfaz para crear certificados autofirmados, pero si quiero usar los certificados como certificados de cliente con MongoDB (por ejemplo), sería útil tener un certificado para usar como raíz.
He visto una serie de opciones para lograr este objetivo. El que parecía más prometedor es escribir un proveedor PKCS11 personalizado para que actúe como intermediario de la clave envuelta en API. Tal vez usando libcurl o algo así para hacer la llamada a la API. No soy tan competente como programador de C / C ++, por lo que esta no sería una solución muy práctica para mí ... aunque me interese buscarlo para la experiencia de aprendizaje.
Podría usar una solución de terceros como Hashicorp Vault PKI o Certificados RedHub . Hashicorp Vault tiene un proveedor de almacenamiento para mantener la clave resultante en Azure KeyVault. Pero a partir de la documentación, parece que ambos servicios aún dejan la Clave Privada expuesta a sí mismos.
Miré pyOpenSSL como un nivel superior abstracción para firmar un CSR, pero la API toma una clave privada como parámetro.
Beneficios de la solución
Para mí, los beneficios percibidos de usar una solución de este tipo son que la clave privada nunca es accesible (ni siquiera para mí). Por lo tanto, la exposición del acceso a la clave de la CA raíz se limita a los certificados que un atacante logra emitir mientras tiene acceso.
Dado que el acceso a la clave tiene un registro de auditoría, simplificaría el seguimiento de su uso y la identificación de accesos no autorizados.
La pregunta real
Estoy tratando de encontrar o desarrollar una solución donde la firma digital sea procesada por un tercero, pero la lógica de construir el contenido para firmar se maneja localmente, preferiblemente mediante soluciones estándar conocidas como OpenSSL (como biblioteca o CLI) .
¿Existe una solución para procesar un CSR x509 en un Certificado x509 donde la clave privada y los algoritmos de firma se envuelven en una API web?
En su defecto, ¿hay alguna buena documentación en algún lugar para utilizar las bibliotecas existentes para convertir un CSR en un certificado en un nivel bajo? Entradas de blog de bienvenida.