2015-08-16 18 views
10

A Twelve factor app è previsto per store configuration in the environment.Dove archiviare i certificati SSL per un'app a 12 fattori

È inteso a includere certificati SSL e file di chiavi, che possono essere "grandi" (multipli di kb almeno) e (a seconda del formato), spesso contengono caratteri non stampabili (righelli al minimo).

Oppure l'ambiente è atteso solo per indicare i nomi dei file cert/chiave? (Questo sembra forse non ideale quando proviamo a distribuire tramite Docker, ad esempio - non vogliamo davvero memorizzare le chiavi private nell'immagine della finestra mobile, vero? Ma forse è una domanda separata.)

+0

Ho 0 esperienza con l'app 12-factor (un nome interessante però, inizialmente l'ho letto come autenticazione a 12 fattori). Indipendentemente dal fatto che tu abbia lavorato su alcuni plugin di terze parti che supportano riferimenti a risorse di server reali all'interno della sua configurazione. In particolare, un numero di serie del certificato SSL, o forse l'identificazione digitale. Si tratta di identificatori univoci che è possibile inserire facilmente in una variabile di ambiente a condizione che l'applicazione o il servizio sia correlata al certificato SSL effettivo in archivio a cui si fa riferimento. La gestione delle chiavi è sempre una sfida se non si può/non si può usare un HSM: D – rdev5

risposta

-2

Ci sono diversi tipi di elementi di configurazione. La motivazione per le app di 12 fattori per archiviare la configurazione nell'ambiente è per un obiettivo specifico: semplificare il suo reimpiego altrove in un nuovo ambiente. Pertanto, solo quegli elementi di configurazione si qualificano per andare all'ambiente che contribuisce a questo obiettivo. Altri elementi di configurazione specifici del dominio o dell'applicazione possono rimanere in bundle con il metodo di configurazione specifico locale o specifico dell'applicazione.

Per i certificati SSL, sembra che questi non cambieranno da ambiente ad ambiente, quindi non si è obbligati a tenerli nelle variabili di ambiente, IMO.

+0

Se i certificati SSL non cambiano tra gli ambienti, direi che si stanno usando i certificati SSL in modo errato. – Flimzy

+0

corretto. Non mi stavo concentrando su come utilizzare correttamente i certificati, ma solo per sottolineare che la configurazione in app a 12 fattori non deve necessariamente essere sempre nell'ambiente, ma solo così tanto è sensibile ai cambiamenti dell'ambiente. –

-1

Non sono esperto di best practice per app a 12 fattori; tuttavia, dall'articolo collegato sulla configurazione dell'app 12 fattori sembra che la pratica prescritta sia quella di utilizzare le variabili di ambiente per identificare gli aspetti configurabili del programma.

Forse SSL_CERT_FILE e SSL_KEY_FILE vars possono essere letti come percorsi ai rispettivi file in modo che possano essere facilmente sostituiti in ambienti diversi in cui i file potrebbero risiedere in posizioni diverse.

Personalmente sono appassionato di software che "funziona" senza la necessità di configurazioni aggiuntive, quindi potresti anche considerare l'incorporamento del certificato e dei file chiave nell'eseguibile stesso (se possibile) in modo che il programma funzioni "fuori dal box "ma gli utenti del programma possono anche specificare percorsi di file cert/chiave alternativi se necessario dall'ambiente o dall'applicazione specifica.

+0

Perché il downvote? Curioso di sapere perché questa risposta non è buona ... – maerics

0

Un certificato SSL è (strettamente visto) non una configurazione ma un file di asset.

Il modo in cui fornisci questa risorsa dipende dal tuo modo di hosting. Ma ecco alcune opzioni:

Un modo semplice è integrare la crittografia e utilizzare certbot che gestisce il download dei certificati in modo sicuro e automatico. letsencrypt ha alcune integrazioni per alcune lingue (ad esempio, ha diversi client che possono essere integrati in un'app).

È possibile utilizzare un servizio di bilanciamento del carico e terminare lo ssl con il servizio di bilanciamento del carico. In questo caso la tua app non ha bisogno di sapere nulla sul certificato.

Kubernetes fornisce segreti in grado di archiviare i certificati in modo sicuro e di copiare tali file sulla distribuzione in un pod (semplificata: un pod è un pacchetto che avvolge in modo sottile un contenitore finestra mobile compresa l'app).

Kubernetes può anche utilizzare Ingress come LoadBalancer che termina lo ssl.

Un'altra opzione è utilizzare il Vault di hashicorp. Questo è un servizio che gestisce e distribuisce segreti.

Sicuramente, ci sono più opzioni e questi sono solo suggerimenti. Ma l'archiviazione e la distribuzione sicura dei certificati SSL non è un compito facile. Spero di aver dato qualche buon suggerimento.