Обычно корневой сертификат CA компании устанавливается ИТ-отделом на машины и серверы разработчиков (они не поставляются с ОС). При использовании докер-машины с локальными виртуальными машинами (виртуальным боксом) нужно ли нам устанавливать корневой сертификат ЦС компании на виртуальную машину, чтобы общаться с реестром докеров, размещенным в сети компании?
Мне интересно, как рекомендуется установить сертификат CA на мою локальную виртуальную машину? Кажется, начало ответа здесь , но ничего убедительного / собственно.
И если есть промежуточные центры сертификации компании, какой способ рекомендуется? Объединить все сертификаты?
Я тоже хотел бы это знать. Я выполнил процедуру (https://docs.docker.com/articles/https/), чтобы создать новый центр сертификации и сертификаты. Я попытался разместить файлы / var / lib / boot2docker и / var / lib / boot2docker / tls, но у меня возникли проблемы с запуском скрипта /etc/init.d/docker, перезаписывающего созданный мной сертификат.
Я изучил это немного подробнее, и похоже, что docker-machine перезапишет что-либо в хосте .docker / machines / machine / default с сертификатами, которые он генерирует. Он также заменяет файлы в vm boot2docker в / var / lib / boot2docker. Можно войти в систему и заменить файлы в виртуальной машине и обновить / var / lib / boot2docker / profile, но это также заменяется при запуске (не уверен, что именно, но, возможно, «docker-machine env default»).
@oobles, вы должны иметь возможность использовать параметры --tls-ca-cert
, --tls-cert
и --tls-key
для указания существующих сертификатов.
При использовании docker-machine --tls-ca-cert=my_company_ca.pem create --driver virtualbox vm
команда не выполняет:
Error creating machine: error generating server cert: crypto/tls: private key does not match public key
Дело здесь (и я полагаю, что в большинстве компаний) я не могу предоставить вариант --tls-ca-key
потому что я не управляю центром сертификации компании, поэтому я не знаю закрытый ключ.
Что мне здесь не хватает? Эти варианты полезны только для людей, управляющих собственным центром сертификации и подписывающих собственные сертификаты?
Я просто хочу, чтобы мой докер-клиент (на моей виртуальной машине) внес docker login
в реестр нашей компании, который показывает сертификат, подписанный центром сертификации компании.
Любая помощь ?
Та же проблема, здесь какие-то улучшения?
+1. Та же проблема в нашей организации.
Я работаю над ситуацией следующим образом:
На сервере реестра:
На машине Docker:
Мои сборки контейнеров достигают unable to find valid certification
при загрузке через https-соединение. Моя компания использует промежуточный корневой сертификат ZScaler CA, а также использует файл PAC для автоматической настройки прокси.
+1 по этому поводу. Если бы было возможно повторно использовать существующий ЦС (сертификат и ключ) и сертификаты клиента (сертификат и ключ), действительно должна была быть возможность повторно использовать существующую инфраструктуру TLS при развертывании сертификатов в движке докеров с помощью докер-машины, например
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
подействует на меня, потому что cacert.key
защищен паролем.
+1
👍, так как это для нас главный блокиратор. Наша корпоративная ИТ-организация помещает настраиваемый сертификат HTTPS на все запросы, идущие изнутри корпоративного брандмауэра в общедоступный Интернет, поэтому мы даже не можем связаться с концентратором докеров для контейнеров, не имея возможности правильно настроить эти сертификаты.
Кто-нибудь еще нашел решение этого? Наш корпоративный ИТ-отдел выполняет MitM для замены всех сертификатов HTTPS.
Когда я попробовал ...
docker-machine --tls-ca-cert root.cer create --driver virtualbox default
выдает следующую ошибку
Error creating machine: Error running provisioning: error generating server cert: crypto/tls: private key does not match public key
В итоге я пропустил сертификат tls во время создания машины. После создания
машина:
docker-machine scp certfile по умолчанию: ca.crt
докер-машина ssh по умолчанию
sudo mv ~ / ca.crt /etc/docker/certs.d/docker.io/ca.crt
Тогда это должно сработать. Возможно, вам придется mkdir подкаталоги перед mv
команда. При необходимости замените docker.io на хост внутреннего реестра.
В четверг, 11 августа 2016 г., Энди Рэстоу [email protected] написал:
Кто-нибудь еще нашел решение этого? Наши корпоративные ИТ-службы делают MitM, чтобы
заменить все сертификаты HTTPS.Когда я попробовал ...
docker-machine --tls-ca-cert root.cer create --driver virtualbox по умолчанию
это вызывает следующую ошибкуОшибка при создании компьютера: Ошибка при запуске: создание ошибки
сертификат сервера: crypto / tls: закрытый ключ не соответствует открытому ключу-
Вы получили это, потому что прокомментировали.
Ответьте на это письмо напрямую, просмотрите его на GitHub
https://github.com/docker/machine/issues/1799#issuecomment -239175647,
или отключить поток
https://github.com/notifications/unsubscribe-auth/AAJD9p1tfX97V_OW4DgJkzxP86URi-C5ks5qezAsgaJpZM4F3GTM
.
+ 1 GE использует Zscaler и выполняет корректировку сертификатов MitM, а докер сейчас нельзя использовать на всех наших машинах для разработчиков.
+1, пытаюсь решить эту проблему прямо сейчас.
+1, тоже пытаясь решить эту проблему в корпоративной среде
+1 также корпоративная среда, прокси-сервер занимается искажением сертификатов MitM. Нужен способ установки сертификатов.
Это потребовало много времени, и решение было поразительно простым (но не очевидным). И есть пара вещей, на которые стоит обратить внимание. Ответ был здесь, но вы должны прочитать раздел кода, чтобы перейти к альтернативному подходу.
По сути, скопируйте pem (закодированные в Base64) версии вашей цепочки доверия CA в /var/lib/boot2docker/certs/
. Вы не можете использовать пакеты ca. Загрузочный скрипт boot2docker автоматически подберет там pem-файлы и добавит их в конфигурацию ssl. Кроме того, это особый каталог, который будет сохраняться после перезапуска.
$ 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
Это должно быть проще, поэтому я поддерживаю (# 1799). Кроме того, мы должны иметь возможность указать каталог, полный файлов pem, поэтому добавление нескольких сертификатов (как и в целых цепочках доверия) будет простым.
@rpomeroy большое спасибо, я делал все то же самое, но не знал, что перезапуск виртуальной машины был необходим, и из-за этого копировал сертификат повсюду, чтобы он работал
Любое исправление для Docker для Windows
@rpomeroy Спасибо, достаточно ли импорта корневого CA компании в нашу докер-машину, чтобы сделать наш реестр доступным? Или нам также нужно поместить что-то в /etc/docker/certs.d/hostname/
Как упоминалось ранее в потоке, дистрибутив Linux под boot2docker в основном неизменяем, поэтому размещение чего-либо в / etc / docker / certs не выживет. Только var / lib / boot2docker / certs является изменяемым и постоянным. Обратите внимание, что всю эту информацию может потребоваться повторная проверка с более новыми версиями boot2docker.
Я использую Windows 7 + VirtualBox (v5.2.6) + Docker Toolbox (Boot2Docker версии 18.02.-ce), и у меня была такая же проблема.
Например, при попытке запустить контейнер я получаю следующую ошибку:
docker run ubuntu / bin / echo 'Hello world'
Не удалось найти изображение ubuntu: latest локально
C: \ Program Files \ Docker Toolboxdocker.exe: ответ об ошибке от демона: получить https://registry-1.docker.io/v2/ : x509: сертификат, подписанный неизвестным органом.
См. 'C: \ Program Files \ Docker Toolboxdocker.exe run --help'.
У меня сработало следующее решение:
@kvvoronina Я столкнулся с той же проблемой, что и вы. вместо этого я запускаю панель инструментов докера на win 8.1
Я пытаюсь использовать твои шаги. но я использую прямое соединение (означает, что я не могу предоставить корневые сертификаты компании на шагах 2 и 4). как это решить? Благодарность
Привет,
спасибо, призрак, это работа, и теперь я могу вытащить свое изображение.
Но я не могу создать образ этого примера: https://docs.docker.com/get-started/part2/#build -the-app
введите эту ошибку:
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/
У вас есть проблемы с этим?
Ubel, у меня та же проблема, мне нужно вытащить образы, но я не могу создавать образы с помощью докера, начните просмотр. Удалось ли вам решить проблему?
@cmenjivar : Нет, у меня все та же проблема ...
@Ubel : Я нашел решение в вашем Dockerfile, просто добавьте все 3 хоста python вместо одного ...
RUN pip install --trusted-host pypi.python.org --trusted-host files.pythonhosted.org --trusted-host pypi.org -r requirements.txt
@cmenjivar : спасибо за вашу помощь. у меня тоже работает.
Теперь мне нужно попробовать то же самое с URL-адресом пакета nuget
Может ли кто-нибудь обновить это для хоста Windows и контейнера Windows?
Что бы это ни стоило, у @rpomeroy есть правильный ответ ...
Выполните следующие команды в «Терминале быстрого запуска Docker», если вы работаете в Windows, чтобы убедиться, что у вас есть подходящая среда. «$» - это приглашение, не вставляйте эту часть. Вы можете отправить cd ~/Downloads
чтобы перейти в папку "Загрузки", прежде чем запускать приведенные ниже команды. Вы можете повторить два средних шага (corp-ca.pem) для каждого центра сертификации, который вам нужно добавить (промежуточного или другого), просто дайте им другое имя. Вы также можете использовать подстановочный знак, например: corp-*.pem
если у вас есть corp-ca-root.pem, corp-ca-intermediate.pem и corp-Issing-ca.pem.
скопировано из @rpomeroy выше:
$ 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
Люди, которые пытаются использовать --tls-cert, --tls-key и --tls-ca-cert, используют неправильные параметры. Это для аутентификации между докером-клиентом и сервером.
Единственное, что я хотел бы отметить, это то, что файловые системы в / etc на самом деле не являются «неизменяемыми», они на самом деле «эфемерны» (tmpfs), то есть они удаляются при каждой перезагрузке. Информация в / var / lib / boot2docker / certs будет повторно заполнена в нужное место в / etc / docker / certs ...
В любом случае, было бы хорошо, если бы докер-машина автоматически доверяла любым сертификатам, которым доверяет хост-система.
Для тех, кто, возможно, оставил это решение, думая, что оно будет работать только для установки boot2docker, а не для установки Docker для Windows (Hyper-V), это ( решение @rpomeroy ) также работает отлично. Я, должно быть, прочитал эту ветку полдюжины раз и отклонил ее, потому что она не относилась к среде Docker для Windows.
Решение @rpomeroy работает как для boot2docker, так и для Docker для Windows.
Я загрузил сертификаты .cer моей компании в каталог / etc / pki / ca-trust / source / anchors моего контейнера докеров и ввел следующие команды.
update-ca-trust включить
update-ca-trust
После выполнения вышеуказанных шагов я смог получить требуемый результат от curl
Просто вмешиваюсь ..
Похоже, что добавление обоих этих креплений к вашему контейнеру работает с большинством конфигураций:
volumes:
- /etc/ssl/certs:/etc/ssl/certs
- /usr/share/ca-certificates:/usr/share/ca-certificates
Другое дело Windows… Я бы по возможности избегал использования хоста Windows Docker.
Самый полезный комментарий
Это потребовало много времени, и решение было поразительно простым (но не очевидным). И есть пара вещей, на которые стоит обратить внимание. Ответ был здесь, но вы должны прочитать раздел кода, чтобы перейти к альтернативному подходу.
По сути, скопируйте pem (закодированные в Base64) версии вашей цепочки доверия CA в
/var/lib/boot2docker/certs/
. Вы не можете использовать пакеты ca. Загрузочный скрипт boot2docker автоматически подберет там pem-файлы и добавит их в конфигурацию ssl. Кроме того, это особый каталог, который будет сохраняться после перезапуска.Это должно быть проще, поэтому я поддерживаю (# 1799). Кроме того, мы должны иметь возможность указать каталог, полный файлов pem, поэтому добавление нескольких сертификатов (как и в целых цепочках доверия) будет простым.