Удаленное управление 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 можно видеть кто что делал. Там же можно видеть попылки подключения, которые завершились неудачно.

Код

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