Руководство по установке и настройке Cert Warden
Cert Warden — это централизованный клиент ACME (Automated Certificate Management Environment), предназначенный для упрощения управления SSL/TLS-сертификатами. Это open-source решение, которое предоставляет API для автоматизации получения, обновления и распространения сертификатов между различными системами и сервисами. Cert Warden разработан для упрощения работы с сертификатами в инфраструктурах, где требуется управление большим количеством сертификатов для разных доменов или устройств.
Зачем нужен Cert Warden?
Заголовок раздела «Зачем нужен Cert Warden?»Cert Warden решает задачу автоматизации управления сертификатами в сложных инфраструктурах, таких как кластеры Kubernetes, веб-приложения или IoT-устройства. Вот основные причины, зачем он может быть полезен:
- Автоматизация процессов:
- Cert Warden автоматизирует получение, обновление и распространение SSL/TLS-сертификатов, что исключает необходимость ручного управления, которое может быть трудоемким и подверженным ошибкам.
- Поддерживает автоматическое продление сертификатов до истечения их срока действия, что минимизирует риски простоя из-за просроченных сертификатов.
- Централизованное управление:
- Вместо того чтобы настраивать отдельные клиенты ACME на каждом сервере, Cert Warden позволяет управлять всеми сертификатами из одного места. Это особенно удобно в крупных инфраструктурах с множеством серверов или доменов.
- Безопасность:
- Cert Warden использует API-ключи для аутентификации клиентов, обеспечивая безопасный доступ к сертификатам.
- Поддерживает работу с доверенными центрами сертификации, такими как Let’s Encrypt, что гарантирует использование валидных и признанных сертификатов.
Установка и настройка Cert Warden
Заголовок раздела «Установка и настройка Cert Warden»-
Cоздаем директорию для Cert Warden и создаем
docker-compose.yml
Окно терминала mkdir /opt/certwarden && cd /opt/certwarden && nano docker-compose.ymlВставляем следующее содержимое:
docker-compose.yml services:certwarden:container_name: certwardenimage: ghcr.io/gregtwallace/certwarden:latestrestart: unless-stoppedports:- '127.0.0.1:4050:4050'volumes:- ./certwarden-data:/app/datanetworks:- remnawave-networklogging:driver: 'json-file'options:max-size: '30m'max-file: '5'networks:remnawave-network:name: remnawave-networkdriver: bridgeexternal: true -
Запускаем Cert Warden
Окно терминала cd /opt/certwarden && docker compose up -d && docker compose logs -f -
Добавляем Cert Warden в
nginx.conf
панели RemnawaveОкно терминала cd /opt/remnawave && nano nginx.confДобавляем секцию upstream:
nginx.conf upstream certwarden {server 127.0.0.1:4050;}Добавляем секцию server:
nginx.conf server {listen 443 ssl;server_name certwarden.yourdomain.com; # Не забудьте добавить запись DNS в Cloudflarehttp2 on;ssl_certificate "/etc/nginx/ssl/yourdomain.com/fullchain.pem";ssl_certificate_key "/etc/nginx/ssl/yourdomain.com/privkey.pem";ssl_trusted_certificate "/etc/nginx/ssl/yourdomain.com/fullchain.pem";location / {proxy_pass http://certwarden;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;}} -
Перезапускаем nginx:
Окно терминала cd /opt/remnawave && docker compose down remnawave-nginx && docker compose up -d remnawave-nginx -
Открываем браузер и переходим по ссылке
Окно терминала https://certwarden.yourdomain.com -
Войдём в систему, используя логин admin и пароль password
-
Попадём на главную страницу
-
Переходим в раздел
Settings
и меняем наш текущий пароль
Настройка Provider
Заголовок раздела «Настройка Provider»-
Переходим в раздел
Providers
-
Нажимаем на
New Provider
-
Выбираем
DNS-01 Cloudflare
-
В поле
Domains
вводим домен, для которого будем получать wildcard-сертификаты -
В поле
API Access Method
выбираемAPI Token
. Инструкцию по созданию токена с правамиZone:Edit
можно найти в официальной документации Cloudflare -
Нажимаем на кнопку Submit
Настройка Private Key
Заголовок раздела «Настройка Private Key»-
Переходим в раздел
Private Keys
-
Нажимаем на
New Key
-
В Name вводим название ключа (например,
ACME
) -
Key Generation Algorithm указываем
ECDSA P-384
(рекомендуемый алгоритм для высокой безопасности и совместимости) -
Ставим галочку на Disable API Key
-
Нажимаем на кнопку Submit
-
Выскочит новое окно c нашим Private Key, так же нажимаем на кнопку Submit
Настройка ACME Accounts
Заголовок раздела «Настройка ACME Accounts»-
Переходим в раздел
ACME Accounts
-
Нажимаем на
New Account
-
В поле
Name
вводим название нашего домена или своё другое название -
В поле
Contact E-mail Address
указываем email, на который будут приходить уведомления -
В поле
ACME Server
выбираемLet’s Encrypt
-
В поле
Private Key
выбираем свой ранее созданный ключ -
Ставим галочку на Accept ACME Server`s Terms of Service
-
Нажимаем на кнопку Submit
-
Откроется окно с данными аккаунта
-
Нажимаем на кнопку REGISTER и Account Status должен стать Valid
-
Нажимаем на кнопку Submit
Настройка Certificates
Заголовок раздела «Настройка Certificates»-
Переходим в раздел
Certificates
-
Нажимаем на
New Certificate
-
В поле
Name
вводим название нашего домена или своё другое название -
В поле
ACME Account
выбираем ранее созданный аккаунт -
В поле
Subject (and Common Name)
вводим домен 2 уровня, напримерexample.com
-
Нажимаем на кнопку
ADD
и в поле Alternate Name 1 вводим уже wildcard домен*.example.com
-
Нажимаем на кнопку Submit
-
Внизу появится окно ACME Orders
-
Нажимаем на кнопку
PLACE NEW ORDER
-
Теперь ожидаем, пока сертификат будет получен, отслеживать состояние можно в разделе
ACME Queue
, как только домен там пропадет, значит сертификат получен -
Переходим в раздел
Dashboard
и видим, что сертификат получен и сколько дней осталось до окончания срока действия
Certwarden Client
Заголовок раздела «Certwarden Client»Cert Warden Client — это Docker-контейнер или приложение, которое взаимодействует с сервером Cert Warden для автоматического получения и обновления сертификатов. Он предназначен для упрощения управления сертификатами на клиентских устройствах. Основные функции клиента включают:
- Автоматическое получение сертификатов: Клиент делает GET-запросы к API Cert Warden, используя API-ключи, для получения ключей и сертификатов.
- Обновление сертификатов: Клиент следит за обновлениями сертификатов и автоматически загружает новые версии.
- Перезапуск Docker-контейнеров: Если сертификаты обновлены, клиент может перезапустить указанные Docker-контейнеры, чтобы они подхватили новые сертификаты.
Установка и настройка Certwarden Client на сервере панели Remnawave
Заголовок раздела «Установка и настройка Certwarden Client на сервере панели Remnawave»-
Создаем директорию для Cert Warden Client
Окно терминала mkdir -p /opt/certwardenclient/certs && cd /opt/certwardenclient && nano docker-compose.ymlВставляем следующее содержимое:
docker-compose.yml services:certwardenclient:image: ghcr.io/gregtwallace/certwarden-client:latestcontainer_name: certwardenclientrestart: unless-stoppedports:- '127.0.0.1:5055:5055'volumes:- /var/run/docker.sock:/var/run/docker.sock- /opt/certwardenclient/certs:/opt/certwarden/certsenvironment:TZ: "Europe/Moscow"CW_CLIENT_FILE_UPDATE_TIME_START: "02:00"CW_CLIENT_FILE_UPDATE_TIME_END: "03:00"CW_CLIENT_FILE_UPDATE_DAYS_OF_WEEK: "Mon Tue Wed Thu Fri Sat Sun"CW_CLIENT_RESTART_DOCKER_CONTAINER0: "remnawave-nginx"CW_CLIENT_AES_KEY_BASE64: "pLZEc_QvSka8syfQtuTfArblalMKU6C6Ke1uIji0E5g"CW_CLIENT_SERVER_ADDRESS: "https://certwarden.example.com"CW_CLIENT_KEY_NAME: "example.com"CW_CLIENT_KEY_APIKEY: "0UkmZEZK7oieQ6hmz9Fta2obMMZRjAuo"CW_CLIENT_CERT_NAME: "example.com"CW_CLIENT_CERT_APIKEY: "MkYMf7eXO8aB9xiNKqwvNVcDGKJ0Dg6v"CW_CLIENT_CERT_PATH: "/opt/certwarden/certs"CW_CLIENT_KEY_PEM_FILENAME: "privkey.pem"CW_CLIENT_CERTCHAIN_PEM_FILENAME: "fullchain.pem"networks:- remnawave-networklogging:driver: 'json-file'options:max-size: '30m'max-file: '5'networks:remnawave-network:name: remnawave-networkdriver: bridgeexternal: true -
CW_CLIENT_AES_KEY_BASE64
- указываем ключ, сгенерированный в разделеCertificates
—>Post Processing
—>Client AES Key
. Нажмите кнопкуGENERATE
, чтобы получить ключ -
CW_CLIENT_SERVER_ADDRESS
- указываем адрес сервера Cert Warden (например,https://certwarden.example.com
). -
CW_CLIENT_KEY_NAME
- указываем название ключа, созданного в разделеPrivate Keys
. -
CW_CLIENT_KEY_APIKEY
- указываем API-ключ, созданный в разделеPrivate Keys
. -
CW_CLIENT_CERT_NAME
- указываем название сертификата, созданного в разделеCertificates
. -
CW_CLIENT_CERT_APIKEY
- указываем API-ключ, созданный в разделеCertificates
. -
Запускаем Cert Warden Client
Окно терминала cd /opt/certwardenclient && docker compose up -d && docker compose logs -f -
В папке
/opt/certwardenclient/certs
должны появиться файлыfullchain.pem
иprivkey.pem
-
Теперь мы можем их смонтировать в наш docker-compose.yml в секцию
remnawave-nginx
Окно терминала cd /opt/remnawave && nano docker-compose.ymlДобавляем в volumes, не забудьте указать ваш домен:
docker-compose.yml volumes:- /opt/certwardenclient/certs/fullchain.pem:/etc/nginx/ssl/yourdomain.com/fullchain.pem- /opt/certwardenclient/certs/privkey.pem:/etc/nginx/ssl/yourdomain.com/privkey.pem -
Перезапускаем nginx
Окно терминала cd /opt/remnawave && docker compose down remnawave-nginx && docker compose up -d remnawave-nginx
Установка и настройка Certwarden Client на сервере ноды Remnawave
Заголовок раздела «Установка и настройка Certwarden Client на сервере ноды Remnawave»-
Создаем директорию для Cert Warden Client
Окно терминала mkdir -p /opt/certwardenclient/certs && cd /opt/certwardenclient && nano docker-compose.ymlВставляем следующее содержимое:
docker-compose.yml services:certwardenclient:image: ghcr.io/gregtwallace/certwarden-client:latestcontainer_name: certwardenclientrestart: unless-stoppedports:- '127.0.0.1:5055:5055'volumes:- /var/run/docker.sock:/var/run/docker.sock- /opt/certwardenclient/certs:/opt/certwarden/certsenvironment:TZ: "Europe/Moscow"CW_CLIENT_FILE_UPDATE_TIME_START: "02:00"CW_CLIENT_FILE_UPDATE_TIME_END: "03:00"CW_CLIENT_FILE_UPDATE_DAYS_OF_WEEK: "Mon Tue Wed Thu Fri Sat Sun"CW_CLIENT_RESTART_DOCKER_CONTAINER0: "remnawave-nginx"CW_CLIENT_AES_KEY_BASE64: "pLZEc_QvSka8syfQtuTfArblalMKU6C6Ke1uIji0E5g"CW_CLIENT_SERVER_ADDRESS: "https://certwarden.example.com"CW_CLIENT_KEY_NAME: "example.com"CW_CLIENT_KEY_APIKEY: "0UkmZEZK7oieQ6hmz9Fta2obMMZRjAuo"CW_CLIENT_CERT_NAME: "example.com"CW_CLIENT_CERT_APIKEY: "MkYMf7eXO8aB9xiNKqwvNVcDGKJ0Dg6v"CW_CLIENT_CERT_PATH: "/opt/certwarden/certs"CW_CLIENT_KEY_PEM_FILENAME: "privkey.pem"CW_CLIENT_CERTCHAIN_PEM_FILENAME: "fullchain.pem"logging:driver: 'json-file'options:max-size: '30m'max-file: '5' -
CW_CLIENT_AES_KEY_BASE64
- указываем ключ, сгенерированный в разделеCertificates
—>Post Processing
—>Client AES Key
. Нажмите кнопкуGENERATE
, чтобы получить ключ -
CW_CLIENT_SERVER_ADDRESS
- указываем адрес сервера Cert Warden (например,https://certwarden.example.com
). -
CW_CLIENT_KEY_NAME
- указываем название ключа, созданного в разделеPrivate Keys
. -
CW_CLIENT_KEY_APIKEY
- указываем API-ключ, созданный в разделеPrivate Keys
. -
CW_CLIENT_CERT_NAME
- указываем название сертификата, созданного в разделеCertificates
. -
CW_CLIENT_CERT_APIKEY
- указываем API-ключ, созданный в разделеCertificates
. -
Запускаем Cert Warden Client
Окно терминала cd /opt/certwardenclient && docker compose up -d && docker compose logs -f -
В папке
/opt/certwardenclient/certs
должны появиться файлыfullchain.pem
иprivkey.pem
-
Теперь мы можем их смонтировать в наш docker-compose.yml в секцию
remnawave-nginx
Окно терминала cd /opt/remnawave && nano docker-compose.ymlДобавляем в volumes, не забудьте указать ваш домен:
docker-compose.yml volumes:- /opt/certwardenclient/certs/fullchain.pem:/etc/nginx/ssl/yourdomain.com/fullchain.pem- /opt/certwardenclient/certs/privkey.pem:/etc/nginx/ssl/yourdomain.com/privkey.pem -
Перезапускаем nginx
Окно терминала cd /opt/remnawave && docker compose down remnawave-nginx && docker compose up -d remnawave-nginx
Закрываем доступ к Certwarden с помощью Netbird
Заголовок раздела «Закрываем доступ к Certwarden с помощью Netbird»-
Добавляем сервер Cert Warden в Netbird, как его установить можно посмотреть здесь
-
В панели управления Cloudflare для вашего домена certwarden.yourdomain.com указываем IP-адрес сервера Cert Warden в сети Netbird
-
Теперь, чтобы попасть на страницу Cert Warden, нужно будет подключатся на своем компьютере к вашей сети через приложение Netbird