Docker en Windows (Boot2Docker) - certificado firmado por error de autoridad desconocida


Estoy ejecutando Docker en Windows (boot2docker + Oracle Virtual Box). En mi entorno corporativo modifican los certificados para que las CA sean las CA AUTO firmadas de la empresa. Así, la cadena termina así:

Company's CA
    |__
        Company's Intermediate CA
            |__
               Docker Certificate

Cuando intento ejecutar cualquier comando, como:

docker run hello-world

Obtengo este error:

Get https://index.docker.io/v1/repositories/library/hello-world/images: x509: certificate signed by unknown authority

He encontrado varias respuestas a este problema, pero siempre para entornos Linux. ¿Cómo puedo solucionar este problema en Windows?

Author: codependent, 2015-07-03

3 answers

Este problema general me ha estado plagando durante un par de meses. Lo noté por primera vez al intentar obtener una máquina virtual local para obtener paquetes de Python, así que ya tenía la idea de que los certificados serían un problema. Lo resolví para mis máquinas virtuales, pero hasta hoy no había sido capaz de encontrar una solución para Docker. El truco es agregar los certificados al almacén de certificados de Docker y hacer que persistan. Esto se logra mediante el uso de un bootlocal.sh script que se ejecuta cada vez que se inicia la máquina.

Asumo que si ya has encontrado las respuestas para Linux, ya conoces los primeros pasos. Los documentaré aquí por el bien de ser minuciosos, porque otros pueden no haber llegado tan lejos. Comience con #3 a continuación si ya ha hecho #1 y #2 a través de intentos anteriores.

  1. Obtenga el conjunto de certificados raíz corporativos, que deben instalarse en su navegador configurado para la empresa. En Chrome, puede ir a Configuración, hacer clic en Mostrar configuración avanzada y desplazarse hacia abajo a HTTPS / SSL, donde puede elegir Administrar certificados. Mi organización los ha puesto en Autoridades de Cerftificación Raíz de Confianza y los ha nombrado como la organización. Exporte cada uno (tengo dos), uno a la vez, asegurándose de elegir el formato DER.

  2. Una vez que los haya guardado en una ubicación conocida, querrá convertirlos al formato PEM. La forma más fácil que encontré para hacer esto fue ejecutar el openssl.exe [1] comando desde el Terminal de Inicio rápido de Docker.

    openssl x509 -inform der -in certificate.cer -out certificate.pem
    
  3. Una vez que tengas el.archivos pem, usted querrá copiarlos en una ubicación a la que su máquina Docker tiene acceso. Hice un directorio en c:\Users\my.nombre de usuario \ certs y los copió allí.

  4. Este paso puede no ser estrictamente necesario, pero es lo que hice, y funciona. Querrá copiar esos certificados en su partición boot2docker, que es persistente. Me estoy conectando a mi máquina predeterminada, que es algo que tendrá que hacer para el paso 5.

    MINGW64:$ docker-machine ssh default
    
    docker@default:~$ sudo -s
    root@default:/home/docker# mkdir /var/lib/boot2docker/certs
    root@default:/home/docker# cp /c/Users/my.username/certs/*.pem /var/lib/boot2docker/certs/
    
  5. Ahora es el momento de escribir un bootlocal.sh script, que copiará los certificados a la ubicación adecuada cada vez que se inicie el sistema.[2] Si aún no lo ha hecho, abra una conexión SSH a la máquina, según el paso 4.

    touch /var/lib/boot2docker/bootlocal.sh && chmod +x /var/lib/boot2docker/bootlocal.sh
    vi /var/lib/boot2docker/bootlocal.sh
    

    Inserte lo siguiente y guarde el archivo:

    #!/bin/sh
    
    mkdir -p /etc/docker/certs.d && cp certs/certificate.pem /etc/docker/certs.d
    
  6. Reinicie la máquina, ya sea usando el comando reboot desde dentro de la máquina, o usando el comando docker-machine desde la Docker terminal:

    docker-machine restart default
    

Ahora debería ser capaz de ejecutar 'hello-world' y otros. Espero que esto ayude.


Fuentes

[1] https://serverfault.com/questions/254627/how-to-convert-a-cer-file-in-pem

[2] https://github.com/boot2docker/boot2docker/issues/347#issuecomment-189112043

 52
Author: Aaron Helton,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-04-13 12:13:44

Una manera de hacerlo Con Firefox, ve a url: https://auth.docker.io/token?scope=repository%3Alibrary%2Fhello-world%3Apull&service=registry.docker.io, haga clic en ver detalles del certificado y extráigalo como crt.

Copie el archivo en la máquina virtual donde el sistema operativo almacena el crt:

CentOS

etc/pki/ca-trust/source/anchors/
# Then run
update-ca-trust force-enable
update-ca-trust extract

Ubuntu

/usr/share/ca-certificates
#Then run
sudo dpkg-reconfigure ca-certificates

Reboot docker, y debería funcionar

 1
Author: Andreas Mattisson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-08-10 13:43:16

Para exportar el certificado, puede elegir el formato de archivo como " Base-64 codificado x.509(.CER) " y finalmente cambie el nombre de la extensión del certificado como .pem .

 0
Author: QiJie Zhang,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-27 07:49:37