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

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

Company's CA
    |__
        Company's 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?

3 ответа

Решение

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

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

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

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

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

  4. Этот шаг не может быть строго необходимым, но это то, что я сделал, и это работает. Вы захотите скопировать эти сертификаты в раздел boot2docker, который является постоянным. Я подключаюсь к моей машине по умолчанию, и это то, что вам нужно сделать для шага 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. Теперь пришло время написать скрипт 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 certs/certificate.pem /etc/docker/certs.d
    
  6. Перезагрузите компьютер либо с помощью команды перезагрузки изнутри компьютера, либо с помощью команды docker-machine с терминала Docker:

    docker-machine restart default
    

Теперь вы должны быть в состоянии запустить "Привет-мир" и другие. Надеюсь, это поможет.


источники

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

[2] https://github.com/boot2docker/boot2docker/issues/347

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

Скопируйте файл в ВМ, где ОС хранит 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

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

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

Другие вопросы по тегам