Machine: Forma recomendada de instalar el certificado CA en la máquina acoplable VM local

Creado en 3 sept. 2015  ·  34Comentarios  ·  Fuente: docker/machine

Por lo general, el departamento de TI instala el certificado de CA raíz de la empresa en las máquinas y servidores de los desarrolladores (no vienen con el sistema operativo). Cuando se utiliza una máquina acoplable con máquinas virtuales locales (caja virtual), ¿necesitamos instalar el certificado de CA raíz de la empresa en la máquina virtual para hablar con un registro acoplable alojado en la red de la empresa?

Me pregunto cuál es la forma recomendada de instalar el certificado CA en mi máquina virtual local. Parece ser el comienzo de la respuesta aquí, pero nada convincente / adecuado.

Y si hay CA de empresas intermedias, ¿cuál es la forma recomendada? ¿Agrupar todos los certificados?

areidentity

Comentario más útil

Esto requirió mucha investigación y la solución es vergonzosamente simple (pero no obvia). Y hay un par de cosas a tener en cuenta. La respuesta estaba aquí , pero debe leer más allá de la sección de código para el enfoque alternativo.

Básicamente, copie las versiones pem (codificadas en Base64) de su cadena de confianza de CA en /var/lib/boot2docker/certs/ . No puedes usar paquetes de ca. El script de arranque boot2docker recogerá automáticamente los archivos pem allí y los agregará a la configuración ssl. Además, este es un directorio especial y se conservará durante los reinicios.

$ 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 

Esto debería ser más simple, así que lo apoyo (# 1799). Además, deberíamos poder especificar un directorio lleno de archivos pem, por lo que agregar varios certificados (como en las cadenas de confianza completas) es fácil.

Todos 34 comentarios

También me gustaría saber esto. Seguí el procedimiento (https://docs.docker.com/articles/https/) para crear una nueva CA y certificados. He intentado poner los archivos / var / lib / boot2docker y / var / lib / boot2docker / tls pero tengo problemas con el script de inicio /etc/init.d/docker que sobrescribe el certificado que he generado.

He investigado esto un poco más y parece que docker-machine sobrescribirá cualquier cosa en el host .docker / machines / machine / default con los certificados que genera. También reemplaza archivos en boot2docker vm en / var / lib / boot2docker. Es posible iniciar sesión y reemplazar archivos en la máquina virtual y actualizar / var / lib / boot2docker / profile, pero esto también se reemplaza en el inicio (no estoy seguro por qué, pero posiblemente por 'docker-machine env default').

@oobles debería poder usar las opciones --tls-ca-cert , --tls-cert y --tls-key para especificar certificados existentes.

Cuando se usa docker-machine --tls-ca-cert=my_company_ca.pem create --driver virtualbox vm , el comando falla en:

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

El punto aquí (y supongo que en la mayoría de las empresas) es que no puedo dar la opción --tls-ca-key porque no administro la CA de la empresa, por lo que no conozco la clave privada.

Que me estoy perdiendo aqui ? ¿Son esas opciones solo útiles para las personas que administran su propia CA y firman sus propios certificados?

Solo quiero que mi cliente de Docker (en mi VM) esté docker login en el registro de nuestra empresa, que muestra un certificado firmado por la empresa CA.

Alguna ayuda ?

¿El mismo problema aquí alguna mejora?

+1. Mismo problema en nuestra organización.

La forma en que soluciono la situación fue:
En el servidor de registro:

  1. cree los certificados autofirmados como se indica en la documentación de la ventana acoplable.
  2. crear un archivo .pem concatenando la clave y el archivo cert

En la máquina Docker:

  1. copie a través de scp el archivo pem a su [email protected] : / home / docker
  2. a través de ssh [email protected] (contraseña: tcuser) mueva el archivo pem a: / var / lib / boot2docker / certs /
  3. Reiniciar la máquina Docker

Las compilaciones de mis contenedores llegan a unable to find valid certification al descargar desde la conexión https. Mi empresa utiliza un certificado raíz ZScaler CA intermedio y también utiliza un archivo PAC para configurar automáticamente el proxy.

+1 en esto. Si fuera posible reutilizar la CA existente (certificado y clave) y los certificados de cliente (certificado y clave), realmente debería ser posible reutilizar la infraestructura TLS existente al implementar certificados en el motor de la ventana acoplable con la máquina acoplable, p. Ej.

  • --tls-servidor-cert
  • --tls-clave-servidor
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 entra en juego porque cacert.key está protegido con contraseña.

+1

👍, ya que este es un gran bloqueador para nosotros. Nuestra organización de TI empresarial coloca un certificado HTTPS personalizado en todas las solicitudes que van desde el interior de nuestro firewall corporativo a la Internet pública, por lo que ni siquiera podemos ponernos en contacto con Docker Hub para los contenedores sin poder configurar estos certificados correctamente.

¿Alguien ha encontrado una solución a esto todavía? Nuestra TI empresarial hace un MitM para reemplazar todos los certificados HTTPS.

Cuando lo intenté ...
docker-machine --tls-ca-cert root.cer create --driver virtualbox default arroja el siguiente error

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

Terminé saltándome el certificado tls en el momento de la creación de la máquina. Una vez creado
la máquina:

docker-machine scp certfile predeterminado: ca.crt
docker-machine ssh predeterminado
sudo mv ~ / ca.crt /etc/docker/certs.d/docker.io/ca.crt

Entonces debería funcionar. Puede que tenga que mkdir los subdirectorios antes del mv
mando. Sustituya docker.io por un host de registro interno si es necesario.

El jueves 11 de agosto de 2016, Andy Ruestow [email protected] escribió:

¿Alguien ha encontrado una solución a esto todavía? Nuestra TI empresarial hace un MitM para
reemplace todos los certificados HTTPS.

Cuando lo intenté ...
docker-machine --tls-ca-cert root.cer create --driver virtualbox predeterminado
arroja el siguiente error

Error al crear la máquina: Error al ejecutar el aprovisionamiento: error al generar
certificado del servidor: crypto / tls: la clave privada no coincide con la clave pública

-
Estás recibiendo esto porque comentaste.
Responda a este correo electrónico directamente, véalo en GitHub
https://github.com/docker/machine/issues/1799#issuecomment -239175647,
o silenciar el hilo
https://github.com/notifications/unsubscribe-auth/AAJD9p1tfX97V_OW4DgJkzxP86URi-C5ks5qezAsgaJpZM4F3GTM
.

+ 1 GE está usando Zscaler y está realizando la gestión de certificados MitM y la ventana acoplable no se puede usar en todas nuestras máquinas de desarrollo en este momento.

+1, tratando de resolver esto ahora mismo.

+1, también tratando de resolver esto en un entorno corporativo

+1 también entorno corporativo, el proxy realiza la manipulación de certificados MitM. Necesita una forma de instalar certificados.

Esto requirió mucha investigación y la solución es vergonzosamente simple (pero no obvia). Y hay un par de cosas a tener en cuenta. La respuesta estaba aquí , pero debe leer más allá de la sección de código para el enfoque alternativo.

Básicamente, copie las versiones pem (codificadas en Base64) de su cadena de confianza de CA en /var/lib/boot2docker/certs/ . No puedes usar paquetes de ca. El script de arranque boot2docker recogerá automáticamente los archivos pem allí y los agregará a la configuración ssl. Además, este es un directorio especial y se conservará durante los reinicios.

$ 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 

Esto debería ser más simple, así que lo apoyo (# 1799). Además, deberíamos poder especificar un directorio lleno de archivos pem, por lo que agregar varios certificados (como en las cadenas de confianza completas) es fácil.

@rpomeroy muchas gracias, estaba haciendo todo lo mismo pero no sabía que era necesario reiniciar la máquina virtual y debido a eso estaba copiando el certificado por todas partes para que funcionara

Cualquier solución para Docker para Windows

@rpomeroy Gracias. ¿Importar la raíz ca de la empresa en nuestra máquina acoplable es suficiente para que nuestro registro sea accesible? ¿O también necesitamos poner cosas en /etc/docker/certs.d/hostname/

Como se mencionó anteriormente en el hilo, la distribución de Linux debajo de boot2docker es básicamente inmutable, por lo que poner cosas en / etc / docker / certs no sobrevivirá. Solo var / lib / boot2docker / certs es mutable y persistente. Tenga en cuenta que es posible que deba volver a verificar toda esta información con versiones más recientes de boot2docker.

Estoy ejecutando Windows 7 + VirtualBox (v5.2.6) + Docker Toolbox (Boot2Docker versión 18.02.-ce) y tuve el mismo problema.
Por ejemplo, cuando intento ejecutar un contenedor, aparece el siguiente error:
Docker ejecuta ubuntu / bin / echo 'Hola mundo'
No se puede encontrar la imagen ' ubuntu: último ' localmente
C: \ Archivos de programa \ Docker Toolboxdocker.exe: Respuesta de error del demonio: Obtenga https://registry-1.docker.io/v2/ : x509: certificado firmado por una autoridad desconocida.
Consulte 'C: \ Archivos de programa \ Docker Toolboxdocker.exe ejecutar --help'.

La siguiente solución funcionó para mí:

  1. Inicie sesión en la máquina virtual docker predeterminada
  2. Descargue los certificados raíz de su empresa
  3. Crea un nuevo directorio:
    sudo mkdir / var / lib / boot2docker / certs
  4. Copie los certificados raíz de su empresa en la carpeta recién creada:
    sudo cp Root-Ca1.crt Root-Ca2.crt / var / lib / boot2docker / certs
  5. Reiniciar la VM predeterminada
    Ahora está tirando de la imagen :)

@kvvoronina Estoy enfrentando el mismo problema contigo. en su lugar, ejecuto la caja de herramientas de Docker en win 8.1
Estoy tratando de seguir tus pasos. pero estoy usando una conexión directa (significa que no puedo proporcionar ningún certificado raíz de la empresa en los pasos 2 y 4). como solucionar esto Gracias

Hola,

gracias fantasma, es un trabajo y puedo sacar mi imagen ahora.
Pero no puedo crear la imagen de este ejemplo: https://docs.docker.com/get-started/part2/#build -the-app
obtengo este error:
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/
¿Tiene algún problema con eso?

Ubel, tengo el mismo problema, tengo imágenes para extraer, pero no puedo crear imágenes con la ventana acoplable para comenzar el recorrido. ¿Pudiste superar el problema?

@cmenjivar : No, sigo teniendo el mismo problema ...

@Ubel : Encontré una solución, en su Dockerfile, solo agregue los 3 hosts de Python alojados, en lugar de solo uno ...

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

@cmenjivar : gracias por tu ayuda. también está funcionando para mí.

Ahora necesito probar las mismas cosas con la URL del paquete nuget

¿Alguien podría actualizar esto para el host de Windows y el contenedor de Windows?

Por lo que vale, @rpomeroy tiene la respuesta correcta ...

Emita los siguientes comandos en la "Terminal de inicio rápido de Docker" si está en Windows, para asegurarse de que tiene el entorno adecuado. El "$" es el mensaje, no pegue esa parte. Es posible que desee emitir un cd ~/Downloads para acceder a su carpeta de Descargas antes de ejecutar los siguientes comandos. Puede repetir los dos pasos intermedios (corp-ca.pem) para cada Autoridad de certificación que necesite agregar (intermedia o de otro tipo), simplemente asígneles un nombre diferente. También puede usar un comodín, por ejemplo: corp-*.pem si tenía corp-ca-root.pem, corp-ca-interval.pem y corp-issuing-ca.pem.

copiado de @rpomeroy arriba:

$ 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 

Las personas que intentan usar --tls-cert, --tls-key y --tls-ca-cert están usando opciones incorrectas. Son para la autenticación entre el cliente y el servidor de Docker.

El único punto que me gustaría hacer es que los sistemas de archivos en / etc no son "inmutables" en realidad, son en realidad "efímeros" (tmpfs), lo que significa que desaparecerán con cada reinicio. La información en / var / lib / boot2docker / certs se volverá a llenar en el lugar correcto en / etc / docker / certs ...

De todos modos, sería bueno si la máquina acoplable confiara automáticamente en cualquier certificado en el que confía el sistema host.

Para aquellos que tal vez dejaron esta solución pensando que solo funcionaría para la configuración de boot2docker y no para la configuración de Docker para Windows (Hyper-V), esta (la solución de @rpomeroy ) también parece funcionar perfectamente. Debo haber leído este hilo media docena de veces y descartarlo porque no era específico del entorno de Docker para Windows.

solución @rpomeroy 's funciona tanto para boot2docker y acoplable para Windows.

Cargué los certificados .cer de mi empresa dentro del directorio / etc / pki / ca-trust / source / anchors de mi contenedor docker e ingresé los siguientes comandos.

update-ca-trust habilitar
actualizar-ca-confianza

Después de realizar los pasos anteriores, pude obtener la salida requerida de curl

Solo repicando ...

Parece que agregar estos dos soportes en su contenedor parece funcionar con la mayoría de las configuraciones:

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

Windows es otra historia. Si es posible, evitaría usar un host de Windows Docker.

¿Fue útil esta página
0 / 5 - 0 calificaciones