Integrazione Nginx e HSM per tenere le chiavi private

17

Utilizziamo Nginx e memorizziamo chiavi private in un file sul server. Vorremmo spostare le chiavi private in HSM in modo che le chiavi SSL siano memorizzate in HSM e non abbandonino mai HSM. Tutte le operazioni di crittografia richieste durante la terminazione SSL possono essere eseguite su HSM.

Dopo Heartbleed, abbiamo visto molti articoli che suggeriscono l'uso di HSM, ma non siamo stati in grado di scoprire come può essere abilitato / aggiunto a Nginx. Durante alcune ricerche abbiamo trovato una patch che abilita il Keyform del motore per leggere le chiavi private dal motore link . Ma invece di leggere le chiavi da un motore supportato da PKCS # 11, vorremmo usare HSM per eseguire tutte le operazioni di crittografia in modo che le chiavi SSL non abbandonino mai HSM.

Esistono plugin / moduli / implementazioni Nginx / OpenSSL esistenti che possono aiutarci a raggiungere questo obiettivo? Ho visto molti articoli che parlano della terminazione SSL usando HSM, ma non ho trovato nessun dettaglio di implementazione. Quindi, prima di iniziare a scavare nel codice Nginx / OpenSSL, mi piacerebbe sapere se qualcuno ha qualche suggerimento o raccomandazione per questo problema.

    
posta GG01 11.06.2015 - 14:38
fonte

3 risposte

4

Non l'ho mai fatto prima. Ma qui ci sono alcuni suggerimenti suggestivi. Questi punti NON sono passi concreti per farlo funzionare. Dalla documentazione per il nuovo AWS Offerta CloudHSM (non classica):

  1. Imposta CloudHSM e genera la chiave privata utilizzando l'utilità CLI.
  2. Installa e configura la libreria CloudSSM OpenSSL.
  3. Verifica se il motore funziona openssl engine -t cloudhsm
  4. Configura Nginx. Dal momento che Nginx 1.7.9, puoi specificare un motore per le chiavi private

The value engine:name:id can be specified instead of the file (1.7.9), which loads a secret key with a specified id from the OpenSSL engine name.

Quindi la tua configurazione di nginx sarebbe simile a questa

ssl_certificate_key cloudhsm:<name>:<keyid>;

Non sono abbastanza sicuro di quale sia il nome o il keyID. Leggerò un po ' e modifica questa risposta se trovo qualcosa.

Nota. Inoltre, per documentazione , potresti dover impostare ssl_engine in cloudhsm se si desidera abilitare l'accelerazione SSL (facendo la crittografia in HSM).

ssl_engine cloudhsm;
  1. di prova.

Posso chiederti perché non vuoi scaricare il tuo SSL sui Load Balancer usando AWS ACM? Questo è il modo più semplice per farlo ed è sicuro se ti fidi di AWS per essere sicuro.

modifica: leggo un po 'e sono più o meno certo che Key Handle nel linguaggio di CloudHSM - l'identificatore numerico a 6 cifre - è il keyid qui. Penso anche che user name sia la parte name . Quindi la tua configurazione Nginx potrebbe essere:

# something that looks like:
ssl_certificate_key cloudhsm:AWSUser:568900;

edit2: la compilazione Nginx non è necessaria. Dobbiamo solo assicurarci che il motore di openssl sia caricabile. Una volta configurato, questo è ciò che appare quando si verifica:

[root@ip-172-31-14-127 ~]# export n3fips_password=user_cu:Wzs8sukUp7FkVs4xQU
[root@ip-172-31-14-127 ~]# openssl engine -t cloudhsm
(cloudhsm) CloudHSM hardware engine support
     SDK Version: 2.03
[ available ]

edit3: buone notizie! Secondo questo post sul forum , Amazon sta lavorando a una documentazione migliore per l'integrazione di Nginx con CloudHSM .

edit4: AWS ha aggiornato la propria documentazione per includere le istruzioni per Apache e Nginx. Mi sembra di aver ragione leggermente! ;) Quindi, apparentemente, si scarica una "chiave privata falsa" e la si usa nella configurazione di Nginx. Il resto delle istruzioni regge bene.

Regardless of which method you choose, you then export a private key handle from the HSMs and save it to a file. The file doesn't contain the actual private key. It contains a reference to the handle of the private key that is stored on the HSMs. The file's contents are known as a fake PEM format private key. Your web server software uses the fake PEM format private key file, along with the AWS CloudHSM software library for OpenSSL, to offload SSL or TLS processing to the HSMs in your cluster

Documentazione qui: link

Non l'ho ancora provato. Pubblicherò un aggiornamento una volta fatto.

    
risposta data 09.09.2017 - 10:21
fonte
0

Come si utilizza Safenet (ora Gemalto) Luna HSM SA 7000. È possibile aggiungere un livello di astrazione per il servizio di gestione delle chiavi. Ad esempio: Key Secure Appliance di Gadalto (fanno l'appliance virtuale).

KMS si integra con HSM. È necessario registrare il servizio di gestione delle chiavi con HSM, quindi ciascuna transazione da KMS verrebbe inclusa con una chiave master che si trova in una delle partizioni registrate sul HSM.

Ho lavorato su HSM e KeySecure, ma non ho mai terminato SSL. Per iniziare se si può provare SSL con KMS (senza HSM), posso aiutare con il resto delle integrazioni.

    
risposta data 10.09.2017 - 17:28
fonte
0

Per il beneficio di chiunque altro abbia trovato questo post tramite Googling "cloudhsm nginx" come ho fatto io: la risposta di @eternaltyro è quasi corretta. Ma invece di fare riferimento all'ID della chiave nel formato cloudhsm:<name>:<keyid>; , si utilizza la funzione getCaviumPrivKey in key_mgmt_util per esportare la chiave come un file PEM "falso", quindi puntare il nginx ssl_certificate_key su quel file. Dovresti anche impostare ssl_engine su cloudhsm come indicato.

    
risposta data 12.10.2017 - 22:34
fonte

Leggi altre domande sui tag