Machine: Cara yang disarankan untuk menginstal sertifikat CA pada mesin buruh pelabuhan VM lokal

Dibuat pada 3 Sep 2015  ·  34Komentar  ·  Sumber: docker/machine

Umumnya, sertifikat CA root perusahaan diinstal oleh TI pada mesin dan server pengembang (Mereka tidak datang dengan OS). Saat menggunakan mesin buruh pelabuhan dengan VM lokal (virtualbox), apakah kita perlu menginstal sertifikat CA root perusahaan pada VM untuk berbicara dengan registri buruh pelabuhan yang dihosting di jaringan perusahaan?

Saya bertanya-tanya apa cara yang disarankan untuk menginstal sertifikat CA di VM lokal saya? Tampaknya menjadi awal dari jawaban di sini tetapi tidak ada yang meyakinkan/tepat.

Dan jika ada CA perusahaan perantara, bagaimana cara yang direkomendasikan? Bundel semua sertifikat?

areidentity

Komentar yang paling membantu

Ini membutuhkan banyak penggalian dan solusinya sangat sederhana (tetapi tidak jelas). Dan ada beberapa hal yang perlu diperhatikan. Jawabannya ada di sini - tetapi Anda harus membaca melewati bagian kode untuk pendekatan alternatif.

Pada dasarnya, salin versi pem (dikodekan Base64) dari rantai kepercayaan CA Anda ke /var/lib/boot2docker/certs/ . Anda tidak dapat menggunakan bundel ca. Skrip boot boot2docker akan secara otomatis mengambil file pem di sana dan menambahkannya ke konfigurasi ssl. Juga, ini adalah direktori khusus dan akan dipertahankan selama restart.

$ docker-machine ssh default 'sudo mkdir /var/lib/boot2docker/certs'
$ docker-machine scp corp-ca.pem default:
$ docker-machine ssh default 'sudo mv corp-ca.pem /var/lib/boot2docker/certs/'
$ docker-machine restart default 

Ini harus lebih sederhana jadi saya mendukung (#1799). Selanjutnya, kita harus dapat menentukan direktori yang penuh dengan file pem sehingga menambahkan beberapa sertifikat (seperti dalam keseluruhan rantai kepercayaan) menjadi mudah.

Semua 34 komentar

Saya juga ingin tahu ini. Saya telah mengikuti prosedur (https://docs.docker.com/articles/https/) untuk membuat CA dan sertifikat baru. Saya telah mencoba meletakkan file /var/lib/boot2docker dan /var/lib/boot2docker/tls tetapi mengalami masalah dengan skrip start /etc/init.d/docker yang menimpa sertifikat yang saya buat.

Saya telah melihat ini sedikit lebih banyak dan sepertinya mesin buruh pelabuhan akan menimpa apa pun di Host .docker/machines/machine/default dengan sertifikat yang dihasilkannya. Itu juga menggantikan file di boot2docker vm di /var/lib/boot2docker. Dimungkinkan untuk masuk dan mengganti file di vm dan memperbarui /var/lib/boot2docker/profile tetapi ini juga diganti saat startup (tidak yakin dengan apa, tetapi mungkin dengan 'docker-machine env default').

@oobles Anda harus dapat menggunakan opsi --tls-ca-cert , --tls-cert dan --tls-key untuk menentukan sertifikat yang ada.

Saat menggunakan docker-machine --tls-ca-cert=my_company_ca.pem create --driver virtualbox vm , perintah gagal menjadi:

Error creating machine: error generating server cert: crypto/tls: private key does not match public key

Intinya di sini (dan saya kira di sebagian besar perusahaan) adalah saya tidak dapat memberikan opsi --tls-ca-key karena saya tidak mengelola CA perusahaan, jadi saya tidak tahu kunci pribadi.

Apa yang kulewatkan di sini ? Apakah opsi itu hanya berguna bagi orang yang mengelola CA mereka sendiri, menandatangani sertifikat mereka sendiri?

Saya hanya ingin klien buruh pelabuhan saya (pada VM saya) ke docker login ke registri perusahaan kami yang menunjukkan sertifikat yang ditandatangani oleh CA perusahaan.

Ada bantuan?

Masalah yang sama di sini ada perbaikan?

+1. Masalah yang sama di organisasi kami.

Cara saya mengatasi situasi ini adalah:
Di Server Registri:

  1. buat sertifikat yang ditandatangani sendiri sebagai status dalam dokumentasi buruh pelabuhan.
  2. buat file .pem yang menggabungkan file kunci dan sertifikat

Di Mesin Docker:

  1. salin melalui scp file pem ke [email protected] Anda :/home/docker
  2. melalui ssh [email protected] (password: tcuser) pindahkan file pem ke: /var/lib/boot2docker/certs/
  3. Mulai ulang mesin Docker

Pembuatan wadah saya mencapai unable to find valid certification saat mengunduh dari koneksi https. Perusahaan saya menggunakan sertifikat root ZScaler CA perantara & juga menggunakan file PAC untuk mengkonfigurasi proxy secara otomatis.

+1 ini. Jika dimungkinkan untuk menggunakan kembali CA (sertifikat dan kunci) yang ada dan sertifikat klien (sertifikat dan kunci), itu benar-benar mungkin untuk menggunakan kembali infrastruktur TLS yang ada saat menerapkan sertifikat ke mesin buruh pelabuhan dengan mesin buruh pelabuhan, misalnya

  • --tls-server-cert
  • --tls-server-key
docker-machine create -d ... \
  --tls-ca-cert cacert.pem \
  --tls-ca-key cacert.key \
  --tls-client-cert local_user.pem \
  --tls-client-key local_user.key \
  --tls-server-cert server.pem \
  --tls-server-key server.key

Error creating machine: Error running provisioning: error generating server cert: crypto/tls: failed to parse private key masuk untuk saya karena cacert.key dilindungi kata sandi.

+1

👍 , karena ini adalah penghalang utama bagi kami. Organisasi TI perusahaan kami menempatkan sertifikat HTTPS khusus pada semua permintaan dari dalam firewall perusahaan kami ke internet publik, jadi kami bahkan tidak dapat menghubungi hub buruh pelabuhan untuk wadah tanpa dapat mengonfigurasi sertifikat ini dengan benar.

Apakah ada yang menemukan solusi untuk ini belum? TI perusahaan kami melakukan MitM untuk mengganti semua sertifikat HTTPS.

Ketika saya mencoba...
docker-machine --tls-ca-cert root.cer create --driver virtualbox default itu melempar kesalahan berikut

Error creating machine: Error running provisioning: error generating server cert: crypto/tls: private key does not match public key

Saya akhirnya melewatkan sertifikat tls pada waktu pembuatan mesin. Sekali membuat
mesin:

docker-machine scp certfile default: ca.crt
default ssh mesin buruh pelabuhan
sudo mv ~/ca.crt /etc/docker/certs.d/docker.io/ca.crt

Maka itu harus bekerja. Anda mungkin harus mkdir subdirektori sebelum mv
memerintah. Gantikan docker.io untuk host registri internal jika perlu.

Pada hari Kamis, 11 Agustus 2016, Andy Ruestow [email protected] menulis:

Apakah ada yang menemukan solusi untuk ini belum? TI perusahaan kami melakukan MitM untuk
ganti semua sertifikat HTTPS.

Ketika saya mencoba...
docker-machine --tls-ca-cert root.cer buat --driver virtualbox default
itu melempar kesalahan berikut:

Kesalahan saat membuat mesin: Kesalahan menjalankan penyediaan: menghasilkan kesalahan
sertifikat server: crypto/tls: kunci pribadi tidak cocok dengan kunci publik


Anda menerima ini karena Anda berkomentar.
Balas email ini secara langsung, lihat di GitHub
https://github.com/docker/machine/issues/1799#issuecomment -239175647,
atau matikan utasnya
https://github.com/notifications/unsubscribe-auth/AAJD9p1tfX97V_OW4DgJkzxP86URi-C5ks5qezAsgaJpZM4F3GTM
.

+ 1 GE menggunakan Zscaler dan melakukan pemrosesan sertifikat MitM dan buruh pelabuhan tidak dapat digunakan dari semua mesin pengembang kami saat ini.

+1, mencoba menyelesaikan ini sekarang juga.

+1, juga mencoba menyelesaikan ini di lingkungan perusahaan

+1 juga lingkungan perusahaan, proxy melakukan mangling sertifikat MitM. Butuh cara untuk menginstal sertifikat.

Ini membutuhkan banyak penggalian dan solusinya sangat sederhana (tetapi tidak jelas). Dan ada beberapa hal yang perlu diperhatikan. Jawabannya ada di sini - tetapi Anda harus membaca melewati bagian kode untuk pendekatan alternatif.

Pada dasarnya, salin versi pem (dikodekan Base64) dari rantai kepercayaan CA Anda ke /var/lib/boot2docker/certs/ . Anda tidak dapat menggunakan bundel ca. Skrip boot boot2docker akan secara otomatis mengambil file pem di sana dan menambahkannya ke konfigurasi ssl. Juga, ini adalah direktori khusus dan akan dipertahankan selama restart.

$ docker-machine ssh default 'sudo mkdir /var/lib/boot2docker/certs'
$ docker-machine scp corp-ca.pem default:
$ docker-machine ssh default 'sudo mv corp-ca.pem /var/lib/boot2docker/certs/'
$ docker-machine restart default 

Ini harus lebih sederhana jadi saya mendukung (#1799). Selanjutnya, kita harus dapat menentukan direktori yang penuh dengan file pem sehingga menambahkan beberapa sertifikat (seperti dalam keseluruhan rantai kepercayaan) menjadi mudah.

@rpomeroy terima kasih banyak, saya melakukan semua hal yang sama tetapi tidak tahu bahwa VM restart diperlukan dan karena itu menyalin sertifikat di semua tempat untuk membuatnya berfungsi

Perbaikan apa pun untuk Docker untuk Windows

@rpomeroy Terima kasih, Apakah mengimpor ca root perusahaan di mesin buruh pelabuhan kami cukup untuk membuat registri kami dapat diakses? Atau apakah kita juga perlu memasukkan barang ke /etc/docker/certs.d/hostname/

Seperti yang disebutkan sebelumnya di utas, distro Linux di bawah boot2docker pada dasarnya tidak dapat diubah sehingga memasukkan barang ke /etc/docker/certs tidak akan bertahan. Hanya var/lib/boot2docker/certs yang bisa berubah dan persisten. Perhatikan bahwa semua info ini mungkin perlu diverifikasi ulang dengan versi boot2docker yang lebih baru.

Saya menjalankan Windows 7 + VirtualBox (v5.2.6) + Docker Toolbox (Boot2Docker versi 18.02.-ce) dan memiliki masalah yang sama.
Misalnya, ketika mencoba menjalankan wadah saya mendapatkan kesalahan berikut:
buruh pelabuhan menjalankan ubuntu /bin/echo 'Halo dunia'
Tidak dapat menemukan gambar ' ubuntu: terbaru ' secara lokal
C:\Program Files\Docker Toolboxdocker.exe: Respons kesalahan dari daemon: Dapatkan https://registry-1.docker.io/v2/ : x509: sertifikat yang ditandatangani oleh otoritas yang tidak dikenal.
Lihat 'C:\Program Files\Docker Toolboxdocker.exe jalankan --help'.

Solusi berikut bekerja untuk saya:

  1. Masuk ke VM buruh pelabuhan default
  2. Unduh sertifikat root Perusahaan Anda
  3. Buat direktori baru:
    sudo mkdir /var/lib/boot2docker/certs
  4. Salin sertifikat root Perusahaan Anda ke folder yang baru dibuat:
    sudo cp Root-Ca1.crt Root-Ca2.crt /var/lib/boot2docker/certs
  5. Mulai ulang VM default
    Sekarang menarik gambar :)

@kvvoronina saya menghadapi masalah yang sama dengan Anda. alih-alih saya menjalankan kotak alat buruh pelabuhan di win 8.1
saya mencoba menggunakan langkah Anda. tetapi saya menggunakan koneksi langsung (artinya saya tidak dapat memberikan sertifikat root perusahaan apa pun pada langkah 2 & 4). bagaimana memecahkan ini? Terima kasih

Halo,

terima kasih hantu itu berhasil dan saya dapat menarik gambar saya sekarang.
Tetapi saya tidak dapat membuat gambar dari contoh ini: https://docs.docker.com/get-started/part2/#build -the-app
dapatkan kesalahan ini:
Step 4/7 : RUN pip install --trusted-host pypi.python.org -r requirements.txt ---> Running in b700eb53b7b2 Collecting Flask (from -r requirements.txt (line 1)) Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLError(1, u'[SSL: CERTIFICATE_VERIFY_FAI LED] certificate verify failed (_ssl.c:726)'),)': /simple/flask/
Apakah Anda memiliki masalah untuk itu?

Ubel, saya mengalami masalah yang sama, saya punya gambar untuk ditarik, tetapi saya tidak bisa membuat gambar menggunakan buruh pelabuhan untuk memulai walk-through. Apakah Anda mampu mengatasi masalah tersebut?

@cmenjivar : Tidak, saya masih memiliki masalah yang sama...

@Ubel : Saya menemukan solusi, di Dockerfile Anda, tambahkan saja semua 3 host python yang dihosting, bukan hanya satu ...

RUN pip install --trusted-host pypi.python.org --trusted-host files.pythonhosted.org --trusted-host pypi.org -r requirements.txt

@cmenjivar : terima kasih atas bantuan Anda. itu bekerja untuk saya juga.

Sekarang saya perlu mencoba hal yang sama dengan url paket nuget

Bisakah seseorang memperbarui ini untuk host windows dan wadah windows?

Untuk apa nilainya, @rpomeroy memiliki jawaban yang benar...

Keluarkan perintah berikut di "Terminal Quickstart Docker" jika Anda menggunakan windows, untuk memastikan Anda memiliki lingkungan yang sesuai. "$" adalah promptnya, jangan tempel bagian itu. Anda mungkin ingin mengeluarkan cd ~/Downloads untuk masuk ke folder Unduhan Anda sebelum menjalankan perintah di bawah ini. Anda dapat mengulangi dua langkah tengah (corp-ca.pem) untuk setiap Otoritas Sertifikat yang perlu Anda tambahkan (perantara atau lainnya), cukup beri mereka nama yang berbeda. Anda juga dapat menggunakan wildcard, misalnya: corp-*.pem jika Anda memiliki corp-ca-root.pem, corp-ca-intermediate.pem dan corp-issuing-ca.pem.

disalin dari @rpomeroy di atas:

$ docker-machine ssh default 'sudo mkdir /var/lib/boot2docker/certs'
$ docker-machine scp corp-ca.pem default:
$ docker-machine ssh default 'sudo mv corp-ca.pem /var/lib/boot2docker/certs/'
$ docker-machine restart default 

Orang-orang yang mencoba menggunakan --tls-cert, --tls-key dan --tls-ca-cert menggunakan opsi yang salah. Itu untuk otentikasi antara klien buruh pelabuhan dan server.

Satu-satunya poin yang ingin saya sampaikan adalah bahwa sistem file di /etc sebenarnya tidak "tidak dapat diubah", mereka sebenarnya "ephemeral" (tmpfs), artinya mereka akan hilang untuk setiap reboot. Informasi di /var/lib/boot2docker/certs akan diisi ulang ke tempat yang benar di /etc/docker/certs...

Bagaimanapun, alangkah baiknya jika mesin buruh pelabuhan secara otomatis mempercayai sertifikat apa pun yang dipercaya oleh sistem host.

Bagi mereka yang mungkin meninggalkan solusi ini dengan berpikir itu hanya akan berfungsi untuk pengaturan boot2docker dan bukan pengaturan Docker untuk Windows (Hyper-V), ini ( solusi @rpomeroy ) juga tampaknya berfungsi dengan sempurna. Saya pasti telah membaca utas ini setengah lusin kali dan mengabaikannya karena tidak spesifik untuk lingkungan Docker untuk Windows.

Solusi @rpomeroy berfungsi untuk boot2docker dan Docker untuk Windows.

Saya mengunggah sertifikat .cer perusahaan saya di dalam direktori /etc/pki/ca-trust/source/anchors dari wadah buruh pelabuhan saya dan memasukkan perintah di bawah ini.

aktifkan pembaruan-ca-trust
update-ca-trust

Setelah melakukan langkah-langkah di atas saya bisa mendapatkan output yang diperlukan dari curl

Cuma nyindir..

Sepertinya menambahkan kedua tunggangan ini pada wadah Anda tampaknya berfungsi dengan sebagian besar konfigurasi:

    volumes:
      - /etc/ssl/certs:/etc/ssl/certs
      - /usr/share/ca-certificates:/usr/share/ca-certificates

Windows adalah cerita lain.. Saya akan menghindari menggunakan host Windows Docker jika memungkinkan.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat