Удаленное управление Docker с аутентификацией по сертификату и проверкой отзыва клиентского сертификата

Windows Server Docker TLS

Введение

Данный проект помогает реализовать TLS подключение к Docker Remote API с аутентификацией по сертификату с проверкой отзыва клиентского сертификата. Операционной системой на сервере является Windows Server 1803+.

Удаленное управление Docker

Для нужд удаленного управления Docker'ом, Docker умеет предоставлять веб-API. Это API может как вовсе не требовать аутентификации (что крайне не рекомендуется), так и использовать аутентификация по сертификату. Проблема заключается в том, что родная аутентификация по сертификату не предусматривает проверку отзыва сертификата. А это может стать проблемой.

Сборка Docker образа

Для сборки образа нам потребуется публичный сертификат центра сертификации (ca.cer), который будет выдавать сертификаты пользователям. Этот сертификат будет установлен в доверенные корневые центры сертификации контейнера, в котором будет запущен наш прокси. Установка его необходима для процедуры проверки сертификата.

Я не заморачивался написанием такого Docker-файла, который сам бы собирал приложение. Поэтому его надо собрать самостоятельно. Из папки с dockerfile запускаем:

dotnet publish -c Release -o ..\publish .\DockerTLS\DockerTLS.csproj

Сейчас у нас должны быть: Dockerfile, publish, ca.cer. Собираем образ:

docker build -t vitaliyorg.azurecr.io/docker/proxy:1809 .
docker push vitaliyorg.azurecr.io/docker/proxy:1809

Разумеется, имя образа может быть любое.

Запуск

Для запуска контейнера нам понадобятся сертификат сервера certificate.pfx и файл с паролем password.txt. Все содержимое файла считается паролем. Поэтому лишних переводов строк быть не должно. Пусть все это добро находится в папке: c:\data на сервере, где установлен Docker.

На этом же сервере запускаем:

docker run --name docker-proxy -d -v "c:/data:c:/data" -v \\.\pipe\docker_engine:\\.\pipe\docker_engine --restart always -p 2376:2376 vitaliyorg.azurecr.io/docker/proxy:1809

Логирование

С помощью docker logs можно видеть кто что делал. Там же можно видеть попылки подключения, которые завершились неудачно.

Код

Все необходимое можно скачать здесь

Оставить комментарий могут только зарегистрированные пользователи.

Войдите на сайт или зарегистрируйтесь, чтобы оставить комментарий.

Для регистрации можно использовать Microsoft Account, Azure Active Directory, Google, Facebook и Twitter.