2015-10-12 15 views
11

Ho configurato l'installazione e la configurazione di nginx (insieme con i certificati SSL di configurazione per il sito https) tramite ansible. I certificati SSL sono sotto passphrase.Passare la password cert per Nginx con il sito https durante il riavvio

Voglio scrivere task ansilbe che sta riavviando nginx. Il problema sta seguendo.

Normalmente, nginx con sito https all'interno richiede PEM pass phrase durante il riavvio. Ansible non chiede quella passphrase durante l'esecuzione del playbook.

C'è solution con la memorizzazione di cert decrittografato e la chiave in qualche directory privata. Ma non voglio davvero lasciare la mia cert e la chiave da qualche parte non criptate.

Come passare la password a nginx (oa openssl) durante il riavvio tramite ansible? Lo scenario perfetto è il seguente:

  1. Ansible richiede la password SSL (tramite vars_promt). Un'altra opzione è usare il caveau ansible.
  2. Ansible sta riavviando nginx e quando nginx richiede PEM pass phrase, ansible sta passando la password a nginx.

È possibile?

risposta

3

Se le autorizzazioni sono abbastanza restrittive per la chiave privata (ad esempio, consentendo solo a nginx di essere in grado di leggerlo), questo sarebbe probabilmente sufficiente. Nginx dovrà tenerlo comunque caricato nella memoria; questo potrebbe essere più difficile da recuperare per un utente malintenzionato, ma se hanno accesso root alla casella dovresti considerare la chiave compromessa a prescindere.

In alternativa, è possibile reindirizzare la password al comando che si sta riavviando (ad esempio). Ciò causerà la sua visualizzazione in testo semplice negli elenchi di processi e non dovrebbe essere considerato più sicuro.

Suggerirei di bloccare le autorizzazioni sul file e di non avere una password. Non credo che Ansible abbia modo di specificare le risposte ai singoli prompt, oltre a sudo.

12

Nginx ha il parametro ssl_password_file.

Specifica un filecon passphrase per chiavi segrete in cui è specificato ogni passphrase su una riga separata. Le passphrase vengono provate a turno quando si carica la chiave.

Esempio:

http { 
    ssl_password_file /etc/keys/global.pass; 
    ... 
    server { 
     server_name www1.example.com; 
     ssl_certificate_key /etc/keys/first.key; 
    } 
    server { 
     server_name www2.example.com; 
     # named pipe can also be used instead of a file 
     ssl_password_file /etc/keys/fifo; 
     ssl_certificate_key /etc/keys/second.key; 
    } 
} 

Che cosa si potrebbe fare è tenere che ssl_password_file in ansible-volta, copiarlo, riavviare nginx e quindi in caso di successo eliminarlo.

Non ho esperienza di prima mano se funzionerà effettivamente o quali altri effetti collaterali questo potrebbe avere (ad esempio il manuale service nginx restart probabilmente non riuscirà), ma mi sembra un approccio logico per me.

+2

Copiarlo su disco potrebbe anche vanificare l'intero punto di non memorizzarlo sul server ... – Basic

+0

Oppure puoi generare un certificato senza passphrase, aggiungendo '-nodes' al comando openssl mentre generi certificati – Alcalyn