certyfikaty ssl docker container

88

Czy istnieje elegancki sposób dodawania certyfikatów ssl do obrazów pochodzących z Docker Pull?

Szukam prostego i powtarzalnego sposobu dodania pliku do / etc / ssl / certs i uruchomienia update-ca-Certificates. (Powinno to obejmować obrazy ubuntu i debian).

Używam Dockera na CoreOS, a maszyna Coreos ufa potrzebnym certyfikatom ssl, ale kontenery docker oczywiście mają tylko domyślne.

Próbowałem użyć, docker run --entrypoint=/bin/bashaby następnie dodać certyfikat i uruchomić update-ca-certificates, ale wydaje się, że to na stałe zastępuje punkt wejścia.

Zastanawiam się też teraz, czy byłoby bardziej elegancko zamontować /etc/ssl/certsna kontenerze z kopii maszyny hosta? W ten sposób niejawnie pozwoliłoby to kontenerom ufać tym samym rzeczom, co host.

Pracuję z irytującym proxy, które rezygnuje ze wszystkiego :(. Co powoduje zerwanie SSL i sprawia, że ​​obsługa kontenerów jest trochę dziwna.

Beau Trepp
źródło
3
Czy myślałeś o utworzeniu pliku Dockerfile, który używałby twojego obrazu, dodawałby plik i uruchamiał update-ca-Certificates? czy nie tego szukasz?
Céline Aussourd
Zrobiłem to dla niektórych obrazów. To nie jest złe rozwiązanie. Wymaga jednak tworzenia na wszystkich obrazach własnych.
Beau Trepp,

Odpowiedzi:

75

Zainstaluj certyfikaty w kontenerze Docker przy użyciu -v:

docker run -v /host/path/to/certs:/container/path/to/certs -d IMAGE_ID "update-ca-certificates"
cdrev
źródło
5
To całkiem fajne. Jeśli kontener używa tego samego stylu ssl_certs, nie potrzebowałbyś nawet wiersza update-ca-Certificates, host już by to zrobił :).
Beau Trepp
2
a jeśli budujemy w chmurze?
Ewoks
27

Próbuję zrobić coś podobnego do tego. Jak wspomniano powyżej, myślę, że chciałbyś zbudować nowy obraz z niestandardowym plikiem Dockerfile (używając obrazu, który pobrałeś jako obraz podstawowy) ADD, a następnie certyfikat RUN update-ca-certificates. W ten sposób będziesz mieć spójny stan za każdym razem, gdy uruchomisz kontener z tego nowego obrazu.

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

Powiedzmy, że docker buildprzeciwko temu plikowi Dockerfile utworzono IMAGE_ID. Następnego dnia docker run -d [any other options] IMAGE_IDkontener uruchomiony przez to polecenie będzie zawierał informacje o Twoim certyfikacie. Prosty i powtarzalny.

shudgston
źródło
Zwykle wolałbym rozwiązanie docker run -v wymienione w innych odpowiedziach. Ale Twoje rozwiązanie działa również, jeśli potrzebujesz certyfikatów podczas kompilacji platformy Docker. Dzięki!
Bastian,
10
Byłbym ostrożny w umieszczaniu certyfikatów w jakimkolwiek publicznym pojemniku. Ktoś inny mógłby wyciągnąć twój kontener i wydobyć twoje prywatne certyfikaty.
skibum55
4
Chociaż jest to bardzo dobra uwaga, powyższe rozwiązanie nie upublicznia niczego. Ma to na celu dodanie własnych certyfikatów do obrazu, który jest tworzony lokalnie, a następnie używany prywatnie. Państwo mogłoby następnie przesunąć wynikowy obraz do publicznego repozytorium, ale byłby to zły pomysł, jak pan powiedział.
shudgston
9
Od kiedy certyfikaty są tajne?
techraf
4
Ponieważ twój serwer potrzebuje klucza prywatnego, aby dopasować certyfikat, który publikuje.
John Rix
22

Jak zasugerowano w powyższym komentarzu , jeśli magazyn certyfikatów na hoście jest kompatybilny z gościem, możesz go po prostu zamontować bezpośrednio.

Na hoście (i kontenerze) Debiana pomyślnie wykonałem:

docker run -v /etc/ssl/certs:/etc/ssl/certs:ro ...
Jonathon Reinhart
źródło
Co więc zrobić podczas budowania obrazu Dockera na serwerze kompilacji? : /
Ewoks
@Ewoks Możesz hostować swoje certyfikaty na jakimś prywatnym serwerze DNS i ładować je do wykresów helm, a także zautomatyzować tworzenie wolumenu w klastrze.
Bassam Gamal
2

Możesz użyć ścieżki względnej, aby zamontować wolumin do kontenera:

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

Zwróć uwagę na tylny haczyk, pwdktóry daje obecny katalog roboczy. Zakłada się, że masz certsfolder w bieżącym katalogu, w którym docker runjest wykonywany. Świetnie nadaje się do lokalnego rozwoju i utrzymuje folder certs widoczny dla twojego projektu.

alltej
źródło