Sfondo
Mi sono preso gioco dell'idea di utilizzare una chiave privata protetta racchiusa da un'API, come Azure KeyVault o chiavi Amazon KMS per firmare i certificati per l'infrastruttura a chiave privata interna.
Concettualmente, questo è simile all'utilizzo di OpenSSH Agent per firmare le richieste di connessione per SSH. La chiave non viene mai esposta all'applicazione che ha preparato la richiesta.
Il mio interesse è principalmente accademico. Gestisco frequentemente le chiavi RSA per lavoro e mi piace solo sbirciare sotto le copertine di come funziona. Ma se riesco a trovare qualcosa che sia effettivamente pronto per la produzione, potrei usarlo per il mio lavoro quotidiano con le distribuzioni Web.
Opzioni che ho esaminato
Azure KeyVault fornisce un'interfaccia per la creazione di certificati autofirmati, ma se voglio utilizzare i certificati come certificati client con MongoDB (ad esempio), sarebbe utile avere un certificato da utilizzare come root.
Ho esaminato una serie di opzioni per raggiungere questo obiettivo. Quello che sembrava più promettente è scrivere un provider PKCS11 personalizzato per fungere da intermediario per la chiave impacchettata dell'API. Forse usando libcurl o qualcosa di simile per fare la chiamata API. Non sono così competente come programmatore C / C ++, quindi questa non sarebbe una soluzione molto pratica per me ... anche se potrei essere interessato a perseguirlo per l'esperienza di apprendimento.
Potrei usare una soluzione di terze parti come Hikicorp Vault PKI o Certificati di CredHub . Hashicorp Vault dispone di un provider di archiviazione per mantenere la chiave risultante in Azure KeyVault. Ma dalla documentazione, sembra che entrambi i servizi lasciano la chiave privata esposta a se stessi.
Ho esaminato pyOpenSSL come livello superiore astrazione per firmare un CSR, ma l'API accetta una chiave privata come parametro.
Vantaggi della soluzione
Per me, i benefici percepiti dall'utilizzo di tale soluzione sono che la chiave privata non è mai accessibile (nemmeno a me). Pertanto, un'esposizione dell'accesso alla chiave della CA principale è limitata a tutti i certificati che un utente malintenzionato riesce a emettere mentre ha accesso.
Poiché l'accesso alla chiave ha un registro di controllo, semplificherebbe il monitoraggio del suo utilizzo e l'identificazione di accessi non autorizzati.
The Actual Question
Sto cercando di trovare o sviluppare una soluzione in cui la firma digitale viene elaborata da una terza parte, ma la logica di costruzione del contenuto da firmare viene gestita localmente, preferibilmente da soluzioni standard note come OpenSSL (come libreria o CLI) .
Esiste una soluzione per l'elaborazione di un CSR x509 in un certificato x509 in cui la chiave privata e gli algoritmi di firma sono racchiusi in un'API Web?
In caso contrario, c'è qualche buona documentazione da qualche parte per usare le librerie esistenti per convertire un CSR in un Certificato a basso livello? Post di blog benvenuti.