Докер в Windows (Boot2Docker) - сертификат, подписанный неизвестной ошибкой

Я запускаю Docker в Windows (boot2docker + Oracle Virtual Box). В моей корпоративной среде они изменяют сертификаты, так что центры сертификации являются самоподписанными ЦС компании. Таким образом, цепочка заканчивается следующим образом:

Company CA
    |__
        Company Intermediate CA
            |__
               Docker Certificate

Когда я пытаюсь выполнить любую команду, например:

docker run hello-world

Я получаю эту ошибку:

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

Я нашел несколько ответов на эту проблему, но всегда в среде Linux. Как я могу обойти эту проблему в Windows?

Ответы

Ответ 1

Этот общий вопрос беспокоил меня на пару месяцев. Я впервые заметил это, пытаясь получить локальную виртуальную машину для извлечения пакетов Python, поэтому у меня уже было представление о том, что сертификаты будут проблемой. Я решил это для своих виртуальных машин, но до сегодняшнего дня не смог найти решение для Docker. Хитрость заключается в том, чтобы добавить сертификаты в хранилище сертификатов Docker и сохранить их. Это достигается с помощью скрипта bootlocal.sh который выполняется каждый раз при запуске машины.

Я предполагаю, что если вы уже нашли ответы на Linux, вы уже знаете первые шаги. Я буду документировать их здесь ради того, чтобы быть основательным, потому что другие, возможно, не достигли этого. Начните с № 3 ниже, если вы уже сделали # 1 и # 2 с помощью предыдущих попыток.

  1. Получите набор корпоративных корневых сертификатов, которые должны быть установлены в вашем браузере, настроенном корпорацией. В Chrome вы можете перейти в "Настройки", "Показать дополнительные настройки" и прокрутить страницу до HTTPS/SSL, где вы можете выбрать "Управление сертификатами". Моя организация разместила их в доверенных корневых центрах сертификации и назвала их после организации. Экспортируйте каждый (у меня два), по одному за раз. Вы можете выбрать формат DER и сделать шаг № 2 ниже, чтобы преобразовать в PEM, или вы можете выбрать Base-64, закодированный x.509 (.CER), и просто переименовать расширение в .pem и пропустить шаг # 2.

  2. После того, как вы сохранили их в известном месте, вы захотите преобразовать их в формат PEM, если вы не сохраните их как duch. Самый простой способ, который я нашел для этого, - запустить команду openssl.exe [1] из терминала быстрого запуска Docker.

    openssl x509 -inform der -in certificate.cer -out certificate.pem
    
  3. После того, как у вас есть файлы.pem, вы захотите скопировать их в место, к которому имеет доступ ваш компьютер докеров. Как правило, для MS Windows у вас будет /c/Users хост-машины, автоматически устанавливаемой внутри вашей док-машины. Я создал каталог в каталоге c:\Users\my.username\certs и скопировал их там.

  4. Этот шаг не может быть строго необходим, но это то, что я сделал, и он работает. Вы захотите скопировать эти сертификаты в свой раздел boot2docker, который является постоянным. Я подключаюсь к своей машине по умолчанию, что вам нужно сделать для шага 5.

    MINGW64:$ docker-machine ssh default
    
    [email protected]:~$ sudo -s
    [email protected]:/home/docker# mkdir /var/lib/boot2docker/certs
    [email protected]:/home/docker# cp /c/Users/my.username/certs/*.pem /var/lib/boot2docker/certs/
    
  5. Теперь пришло время написать сценарий bootlocal.sh, который будет копировать сертификаты в нужное место при каждом запуске системы. [2] Если вы еще этого не сделали, откройте SSH-соединение с аппаратом на шаг 4.

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

    Вставьте следующее и сохраните файл:

    #!/bin/sh
    
    mkdir -p /etc/docker/certs.d && cp /var/lib/boot2docker/certs/*.pem /etc/docker/certs.d
    
  6. Перезагрузите компьютер либо с помощью команды перезагрузки из машины, либо с помощью команды docker-machine с терминала Docker:

    docker-machine restart default
    

Теперь вы сможете запустить "hello-world" и другие. Надеюсь, это поможет.


источники

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

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

Ответ 2

Способ сделать это С Firefox перейдите по ссылке: https://auth.docker.io/token?scope=repository%3Alibrary%2Fhello-world%3Apull&service=registry.docker.io, щелкните сведения о просмотре сертификата и извлеките его как crt.

Скопируйте файл на виртуальную машину, где os хранит 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

Перезагрузите докер, и он должен работать

Ответ 3

Для экспорта сертификата вы можете выбрать формат файла как " Base-64 encoded x.509 (.CER) " и, наконец, переименовать расширение сертификата как .pem.