Machine: Рекомендуемый способ установки сертификата ЦС на локальном докере виртуальной машины

Созданный на 3 сент. 2015  ·  34Комментарии  ·  Источник: docker/machine

Обычно корневой сертификат CA компании устанавливается ИТ-отделом на машины и серверы разработчиков (они не поставляются с ОС). При использовании докер-машины с локальными виртуальными машинами (виртуальным боксом) нужно ли нам устанавливать корневой сертификат ЦС компании на виртуальную машину, чтобы общаться с реестром докеров, размещенным в сети компании?

Мне интересно, как рекомендуется установить сертификат CA на мою локальную виртуальную машину? Кажется, начало ответа здесь , но ничего убедительного / собственно.

И если есть промежуточные центры сертификации компании, какой способ рекомендуется? Объединить все сертификаты?

areidentity

Самый полезный комментарий

Это потребовало много времени, и решение было поразительно простым (но не очевидным). И есть пара вещей, на которые стоит обратить внимание. Ответ был здесь, но вы должны прочитать раздел кода, чтобы перейти к альтернативному подходу.

По сути, скопируйте 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, поэтому добавление нескольких сертификатов (как и в целых цепочках доверия) будет простым.

Все 34 Комментарий

Я тоже хотел бы это знать. Я выполнил процедуру (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. Та же проблема в нашей организации.

Я работаю над ситуацией следующим образом:
На сервере реестра:

  1. создать самоподписанные сертификаты как состояние в документации докера.
  2. создать файл .pem, объединяющий ключ и файл сертификата

На машине Docker:

  1. скопируйте через scp файл pem на свой [email protected] : / home / docker
  2. через ssh [email protected] (пароль: tcuser) переместите файл pem в: / var / lib / boot2docker / certs /
  3. Перезагрузите машину Docker

Мои сборки контейнеров достигают unable to find valid certification при загрузке через https-соединение. Моя компания использует промежуточный корневой сертификат ZScaler CA, а также использует файл PAC для автоматической настройки прокси.

+1 по этому поводу. Если бы было возможно повторно использовать существующий ЦС (сертификат и ключ) и сертификаты клиента (сертификат и ключ), действительно должна была быть возможность повторно использовать существующую инфраструктуру TLS при развертывании сертификатов в движке докеров с помощью докер-машины, например

  • --tls-сервер-сертификат
  • --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'.

У меня сработало следующее решение:

  1. Войдите в виртуальную машину Docker по умолчанию
  2. Загрузите корневые сертификаты вашей компании
  3. Создайте новый каталог:
    sudo mkdir / var / lib / boot2docker / сертификаты
  4. Скопируйте корневые сертификаты вашей компании во вновь созданную папку:
    sudo cp Root-Ca1.crt Root-Ca2.crt / var / lib / boot2docker / certs
  5. Перезагрузить виртуальную машину по умолчанию
    Теперь тянет изображение :)

@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.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги