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 с помощью предыдущих попыток.
Получите набор корпоративных корневых сертификатов, которые должны быть установлены в вашем корпоративно настроенном браузере. В Chrome вы можете перейти в "Настройки", нажать "Показать дополнительные настройки" и прокрутить вниз до HTTPS/SSL, где вы можете выбрать "Управление сертификатами". Моя организация поместила их в доверенные корневые центры сертификации и назвала их в честь организации. Экспортируйте каждый (у меня их два), по одному за раз, выбирая формат DER.
Как только вы сохранили их в известном месте, вы захотите преобразовать их в формат PEM. Самым простым способом, который я нашел для этого, было выполнение команды openssl.exe[1] из терминала быстрого запуска Docker.
openssl x509 -inform der -in certificate.cer -out certificate.pem
Получив файлы.pem, вы захотите скопировать их в папку, к которой у вашего компьютера Docker есть доступ. Я сделал каталог в c:\Users\my.username\certs и скопировал их туда.
Этот шаг не может быть строго необходимым, но это то, что я сделал, и это работает. Вы захотите скопировать эти сертификаты в раздел 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/
Теперь пришло время написать скрипт 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
Перезагрузите компьютер либо с помощью команды перезагрузки изнутри компьютера, либо с помощью команды docker-machine с терминала Docker:
docker-machine restart default
Теперь вы должны быть в состоянии запустить "Привет-мир" и другие. Надеюсь, это поможет.
источники
[1] https://serverfault.com/questions/254627/how-to-convert-a-cer-file-in-pem
Способ сделать это С помощью 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.