Руководство по установке и настройке 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