certificati docker container ssl


88

Esiste un modo elegante per aggiungere certificati ssl alle immagini provenienti da Docker pull ?.

Sto cercando un modo semplice e riproducibile per aggiungere un file in / etc / ssl / certs ed eseguire update-ca-certificates. (Questo dovrebbe coprire le immagini di Ubuntu e Debian).

Sto usando docker su CoreOS e la macchina coreos si fida dei certificati ssl necessari, ma i contenitori docker ovviamente hanno solo il valore predefinito.

Ho provato a usare docker run --entrypoint=/bin/bashper quindi aggiungere il certificato ed eseguire update-ca-certificates, ma questo sembra sovrascrivere in modo permanente il punto di ingresso.

Mi chiedo anche ora, sarebbe più elegante montare semplicemente /etc/ssl/certs sul contenitore dalla copia della macchina host? Ciò consentirebbe implicitamente ai contenitori di considerare attendibili le stesse cose dell'host.

Sto lavorando con un fastidioso proxy che rassegna tutto :(. Che rompe SSL e rende i container un po 'strani con cui lavorare.


3
Hai pensato di creare un Dockerfile che usasse la tua immagine, aggiungesse il file ed eseguisse update-ca-certificates? o non è quello che stai cercando?
Céline Aussourd

L'ho fatto per alcune immagini. Non è una cattiva soluzione. Tuttavia, richiede di costruire su tutte le immagini con le tue.
Beau Trepp

Risposte:


75

Montare i certificati sul container Docker utilizzando -v:

docker run -v /host/path/to/certs:/container/path/to/certs -d IMAGE_ID "update-ca-certificates"

5
È piuttosto carino. Se il contenitore utilizza lo stesso stile di ssl_certs non avresti nemmeno bisogno della riga update-ca-certificates, l'host l'avrebbe già fatto :).
Beau Trepp

2
e se stiamo costruendo nel cloud?
Ewoks

27

Sto cercando di fare qualcosa di simile a questo. Come commentato sopra, penso che vorresti costruire una nuova immagine con un Dockerfile personalizzato (usando l'immagine che hai estratto come immagine di base), il ADDtuo certificato, quindi RUN update-ca-certificates. In questo modo avrai uno stato coerente ogni volta che avvii un contenitore da questa nuova immagine.

# Dockerfile
FROM some-base-image:0.1
ADD you_certificate.crt:/container/cert/path
RUN update-ca-certificates

Diciamo che un docker buildcontro quel Dockerfile ha prodotto IMAGE_ID. Il prossimo docker run -d [any other options] IMAGE_ID, il contenitore avviato da quel comando avrà le informazioni sul certificato. Semplice e riproducibile.


Di solito preferirei la soluzione docker run -v menzionata in altre risposte. Ma la tua soluzione funziona anche se hai bisogno di certificati durante la creazione di Docker. Grazie!
bastian

10
Sarei cauto nel mettere i certificati in qualsiasi contenitore pubblico. Qualcun altro potrebbe estrarre il tuo contenitore ed estrarre i tuoi certificati privati.
skibum55

4
Anche se questo è un punto molto positivo, la soluzione sopra non rende nulla di pubblico. Questo ha lo scopo di aggiungere i tuoi certificati in un'immagine che viene creata localmente e quindi utilizzata privatamente. Si potrebbe quindi spingere l'immagine risultante in un repository pubblico, ma che sarebbe una cattiva idea, come lei ha detto.
shudgston

9
Da quando i certificati sono segreti?
techraf

4
Poiché il tuo server necessita di una chiave privata per abbinare il certificato che sta pubblicando.
John Rix

22

Come suggerito in un commento sopra, if the certificate store on the host is compatible with the guest, you can just mount it directly.

Su un host Debian (e contenitore), ho fatto con successo:

docker run -v /etc/ssl/certs:/etc/ssl/certs:ro ...

Quindi cosa fare quando si crea un'immagine Docker sul server di compilazione? : /
Ewoks

@Ewoks Potresti ospitare i tuoi certificati su alcuni DNS privati ​​e caricarli nei tuoi grafici helm e puoi automatizzare la creazione del volume sul tuo cluster.
Bassam Gamal

2

È possibile utilizzare il percorso relativo per montare il volume nel contenitore:

docker run -v `pwd`/certs:/container/path/to/certs ...

Nota il segno di spunta sul retro pwdche ti dà la directory di lavoro attuale. Si presume che tu abbia la certscartella nella directory corrente in cui docker runviene eseguito. È ottimo per lo sviluppo locale e mantieni la cartella dei certificati visibile nel tuo progetto.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.