Данный проект помогает реализовать TLS подключение к Docker Remote API с аутентификацией по сертификату с проверкой отзыва клиентского сертификата. Операционной системой на сервере является Windows Server 1803+.
Для нужд удаленного управления Docker'ом, Docker умеет предоставлять веб-API. Это API может как вовсе не требовать аутентификации (что крайне не рекомендуется), так и использовать аутентификация по сертификату. Проблема заключается в том, что родная аутентификация по сертификату не предусматривает проверку отзыва сертификата. А это может стать проблемой.
Для сборки образа нам потребуется публичный сертификат центра сертификации (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
можно видеть кто что делал. Там же можно видеть попылки подключения, которые завершились неудачно.