Получение сертификата Let's Encrypt для Proxmox VE
Пошаговое получение и автоматическое обновление доверенного TLS-сертификата Let's Encrypt для веб-интерфейса Proxmox VE.
По умолчанию веб-интерфейс Proxmox VE использует собственный сертификат, которому браузер не доверяет. Из-за этого при открытии панели появляется предупреждение о небезопасном соединении.
Proxmox VE поддерживает получение сертификатов Let's Encrypt через встроенный ACME-клиент.
В этой инструкции рассматривается только выпуск доверенного TLS-сертификата для веб-интерфейса Proxmox VE и проверка его автоматического обновления.
Подходит для: Proxmox VE 8 и 9
Уровень сложности: средний
Время выполнения: около 20 минут
Требуемый доступ: административные права в Proxmox VE и управление DNS-зоной домена
Что будет настроено
После выполнения инструкции:
- узлу будет назначено корректное полное доменное имя;
- DNS-запись будет указывать на Proxmox VE;
- будет создана ACME-учётная запись;
- будет настроена проверка домена;
- будет выпущен сертификат Let's Encrypt;
- будет проверен сертификат веб-интерфейса;
- будет проверено автоматическое продление.
Что потребуется
Подготовьте:
- доменное имя;
- возможность изменять DNS-записи;
- корректный hostname узла;
- доступ к веб-интерфейсу и shell;
- внешний доступ к порту 80 для HTTP challenge либо API DNS-провайдера для DNS challenge;
- резервный доступ к консоли.
Пример доменного имени:
pve01.example.com
Используйте собственный домен.
Выбор способа проверки домена
Let's Encrypt должен подтвердить управление доменом.
В Proxmox VE можно использовать:
HTTP-01
DNS-01
HTTP-01
Let's Encrypt обращается к узлу по HTTP.
Требования:
- публичная DNS-запись;
- доступность узла из интернета;
- открытый TCP-порт 80;
- отсутствие блокировки challenge reverse proxy или firewall.
DNS-01
Proxmox создаёт специальную TXT-запись через API DNS-провайдера.
Преимущества:
- порт 80 не требуется;
- подходит для закрытого веб-интерфейса;
- позволяет выпускать сертификат, даже если узел доступен только через VPN;
- не требует публикации панели Proxmox в интернет.
Для административного интерфейса безопаснее использовать DNS-01, если DNS-провайдер поддерживается.
Проверка hostname
На узле:
hostnamectl
Покажите полное имя:
hostname -f
Ожидаемый результат:
pve01.example.com
Проверьте короткое имя:
hostname -s
Ожидаемый результат:
pve01
Проверка /etc/hostname
cat /etc/hostname
Обычно в файле хранится короткое имя:
pve01
Проверка /etc/hosts
cat /etc/hosts
Пример:
127.0.0.1 localhost
192.0.2.10 pve01.example.com pve01
Полное имя узла должно разрешаться в его management IP.
Проверьте:
getent hosts pve01.example.com
Проверка DNS
С узла:
dig +short pve01.example.com
Если dig отсутствует:
apt update
apt install -y dnsutils
Для публичного HTTP-01 DNS должен возвращать публичный IP, по которому Let's Encrypt сможет обратиться к узлу.
Для DNS-01 достаточно управления DNS-зоной.
Проверка обратного разрешения
getent hosts "$(hostname -f)"
Проверьте соответствие:
hostname -f
hostname -I
Ошибка hostname может повлиять не только на сертификат, но и на работу компонентов Proxmox VE.
Не переименовывайте кластерный узел без отдельного плана.
Проверка текущего сертификата
Через браузер откройте:
https://pve01.example.com:8006
Через CLI:
openssl s_client -connect pve01.example.com:8006 -servername pve01.example.com </dev/null 2>/dev/null |
openssl x509 -noout -subject -issuer -dates
Собственный сертификат обычно имеет issuer, связанный с локальной CA Proxmox.
Создание резервной копии сертификатов
Создайте каталог:
mkdir -p /root/proxmox-cert-backup
Скопируйте текущие сертификаты:
cp -a /etc/pve/local/pveproxy-ssl.pem /etc/pve/local/pveproxy-ssl.key /root/proxmox-cert-backup/ 2>/dev/null
Также сохраните:
cp -a /etc/pve/pve-root-ca.pem /etc/pve/local/pve-ssl.pem /etc/pve/local/pve-ssl.key /root/proxmox-cert-backup/ 2>/dev/null
Ограничьте права:
chmod 600 /root/proxmox-cert-backup/*
Создание ACME-учётной записи через веб-интерфейс
Откройте:
Datacenter → ACME
Перейдите на вкладку:
Accounts
Нажмите:
Add
Укажите:
Account Name: default
E-Mail: admin@example.com
Directory: Let's Encrypt V2
Примите условия использования.
Для первоначального теста можно выбрать staging directory, чтобы не попасть под rate limits.
Production и staging
Staging
Используется для проверки настройки.
Сертификат staging не будет считаться доверенным браузером.
Преимущества:
- менее строгие лимиты;
- безопасно для повторных тестов;
- удобно при отладке DNS plugin.
Production
Выдаёт реальный доверенный сертификат.
Переходите на production только после успешного теста.
Создание ACME-учётной записи через CLI
Показать ACME-конфигурацию:
pvenode acme account list
Создать учётную запись:
pvenode acme account register default admin@example.com
Команда запросит подтверждение условий сервиса.
Проверьте:
pvenode acme account list
Настройка HTTP-01
Для HTTP challenge откройте:
Node → System → Certificates
В разделе ACME выберите:
Add
Укажите домен:
pve01.example.com
Plugin:
Standalone
Standalone challenge временно использует порт 80.
Проверка порта 80
На узле:
ss -lntp |
grep ':80'
Если порт занят, определите процесс:
ss -lntp 'sport = :80'
Для HTTP-01 входящий TCP-порт 80 должен быть доступен Let's Encrypt.
Проверьте firewall:
pve-firewall status
Проверьте внешнюю доступность с другой сети:
curl -I http://pve01.example.com/
Ограничения HTTP-01
HTTP-01 не подойдёт, если:
- узел находится за NAT без port forwarding;
- порт 80 блокируется провайдером;
- панель доступна только в локальной сети;
- DNS указывает на reverse proxy;
- используется split DNS без публичной записи;
- firewall не разрешает внешний доступ.
В таких случаях используйте DNS-01.
Настройка DNS-01
Откройте:
Datacenter → ACME → Challenge Plugins
Нажмите:
Add
Выберите DNS-провайдера.
Укажите:
- Plugin ID;
- DNS API;
- API credentials;
- при необходимости DNS propagation delay.
Хранение API credentials
Используйте минимально необходимые права.
DNS API token должен разрешать изменение TXT-записей только нужной зоны, если провайдер поддерживает такие ограничения.
Не используйте:
- master password;
- полный account token;
- токен управления всеми доменами;
- открытый текст в документации;
- публикацию credentials в Git.
Пример структуры DNS plugin
Поля зависят от DNS-провайдера.
Обычно требуются:
API Token
Account ID
Zone ID
API User
API Key
Используйте названия, показанные интерфейсом выбранного plugin.
DNS propagation delay
После создания TXT-записи она должна распространиться по DNS.
Если проверка запускается слишком быстро, установите задержку.
Пример:
30–120 секунд
Конкретное значение зависит от DNS-провайдера и authoritative servers.
Проверка TXT-записи
Во время challenge запись имеет имя:
_acme-challenge.pve01.example.com
Проверить:
dig TXT _acme-challenge.pve01.example.com
Проверка через конкретный публичный resolver:
dig @1.1.1.1 TXT _acme-challenge.pve01.example.com
Добавление домена к узлу
Откройте:
Node → System → Certificates
В разделе ACME нажмите:
Add
Укажите:
Domain: pve01.example.com
Challenge Type: DNS
Plugin: DNS_PLUGIN_ID
Сохраните.
Проверка ACME-конфигурации через CLI
Покажите конфигурацию узла:
pvenode config get
Найдите ACME-параметры:
pvenode config get |
grep -i acme
Выпуск сертификата
В веб-интерфейсе:
Node → System → Certificates
Нажмите:
Order Certificates Now
Подтвердите операцию.
Следите за журналом задачи.
Ожидаемый результат:
TASK OK
Выпуск через CLI
pvenode acme cert order
Для принудительного запуска при необходимости используются параметры команды, доступные в текущей версии.
Проверьте справку:
pvenode acme cert order --help
Проверка установленного сертификата
В веб-интерфейсе должен появиться сертификат ACME.
Через CLI:
openssl s_client -connect pve01.example.com:8006 -servername pve01.example.com </dev/null 2>/dev/null |
openssl x509 -noout -subject -issuer -dates -ext subjectAltName
Проверьте:
- Subject;
- Issuer;
- Not Before;
- Not After;
- Subject Alternative Name.
Проверка файлов сертификата
ls -l /etc/pve/local/pveproxy-ssl.pem /etc/pve/local/pveproxy-ssl.key
Посмотреть срок:
openssl x509 -in /etc/pve/local/pveproxy-ssl.pem -noout -dates
Перезапуск pveproxy
Обычно Proxmox VE применяет сертификат автоматически.
При необходимости:
systemctl restart pveproxy
Проверьте:
systemctl status pveproxy --no-pager
Проверьте локально:
curl -kI https://127.0.0.1:8006/
Проверка в браузере
Откройте именно доменное имя:
https://pve01.example.com:8006
При открытии по IP:
https://192.0.2.10:8006
браузер продолжит показывать ошибку имени, потому что сертификат выпущен для DNS-имени.
Проверка цепочки доверия
openssl s_client -connect pve01.example.com:8006 -servername pve01.example.com -showcerts </dev/null
В конце проверьте:
Verify return code: 0 (ok)
Автоматическое продление
Proxmox VE автоматически проверяет ACME-сертификаты и продлевает их до истечения.
Проверьте ACME-задачи:
journalctl --since "30 days ago" |
grep -i acme
Проверьте службы:
systemctl status pvescheduler --no-pager
ACME-задачи интегрированы в инфраструктуру Proxmox VE.
Ручная проверка продления
Покажите срок сертификата:
openssl x509 -in /etc/pve/local/pveproxy-ssl.pem -noout -enddate
Запустите обновление через интерфейс либо используйте CLI согласно доступным командам:
pvenode acme cert renew --help
Не выполняйте частые production-запросы без необходимости из-за rate limits.
Проверка staging перед production
Безопасный порядок:
- Создать staging account.
- Настроить challenge.
- Выпустить тестовый сертификат.
- Проверить успешный challenge.
- Удалить тестовую конфигурацию при необходимости.
- Создать production account.
- Выпустить доверенный сертификат.
Rate limits Let's Encrypt
Частые неудачные или повторные production-запросы могут привести к временным ограничениям.
Для отладки используйте staging.
Не запускайте выпуск в цикле.
Reverse proxy перед Proxmox VE
Если веб-интерфейс опубликован через reverse proxy, сертификат может завершаться на proxy.
В этом случае возможны два отдельных TLS-соединения:
Клиент → Reverse Proxy
Reverse Proxy → Proxmox VE
Встроенный ACME Proxmox нужен для второго соединения только если proxy проверяет сертификат backend.
Настройка reverse proxy является отдельной темой.
Split DNS
Для закрытого административного интерфейса можно использовать:
- публичную DNS-зону для DNS-01;
- внутренний DNS, возвращающий private IP;
- сертификат на публично существующее DNS-имя;
- доступ только через VPN.
Let's Encrypt не требует, чтобы сам сервис был публично доступен при DNS-01.
Сертификат с несколькими именами
К сертификату можно добавить несколько DNS-имён, если каждое можно подтвердить.
Пример:
pve01.example.com
proxmox.example.com
Но для узла лучше использовать одно основное стабильное FQDN.
Удаление ACME-сертификата
В веб-интерфейсе:
Node → System → Certificates
Выберите ACME-сертификат.
Удаляйте его только при наличии рабочего резервного сертификата и консольного доступа.
Через CLI доступны команды управления сертификатами:
pvenode acme cert --help
Возврат стандартного сертификата
Если ACME-сертификат повреждён, Proxmox VE может пересоздать стандартные сертификаты.
Проверьте документацию своей версии и доступные команды:
pvecm updatecerts --help
Перед выполнением создайте резервную копию /etc/pve/local.
Не удаляйте файлы сертификатов вручную без плана восстановления.
Типичные проблемы
ACME не может подтвердить HTTP-01
Проверьте:
dig +short pve01.example.com
ss -lntp |
grep ':80'
Проверьте NAT, firewall и внешний доступ.
DNS-01 не видит TXT-запись
Проверьте:
dig @1.1.1.1 TXT _acme-challenge.pve01.example.com
Увеличьте propagation delay.
Проверьте права API token.
Ошибка invalid credentials
Пересоздайте DNS API token с минимально достаточными правами.
Проверьте формат полей plugin.
Сертификат выпущен, но браузер показывает старый
Перезапустите:
systemctl restart pveproxy
Очистите TLS-сессию браузера или откройте приватное окно.
Проверьте сертификат через openssl.
Браузер показывает name mismatch
Открывайте панель по FQDN, указанному в Subject Alternative Name.
Не используйте IP-адрес.
После смены hostname ACME перестал работать
Проверьте:
/etc/hostname;/etc/hosts;- DNS;
- имя узла в Proxmox;
- ACME domains;
- кластерную конфигурацию.
Переименование узла Proxmox VE требует отдельного плана.
Продление не выполняется
Проверьте:
- DNS credentials;
- доступ к Let's Encrypt;
- время узла;
pvescheduler;- журнал ACME;
- срок сертификата.
Безопасный порядок настройки
- Проверить FQDN.
- Проверить
/etc/hosts. - Проверить DNS.
- Создать резервную копию сертификатов.
- Выбрать HTTP-01 или DNS-01.
- Создать staging ACME account.
- Проверить challenge.
- Создать production account.
- Выпустить сертификат.
- Проверить его через
openssl. - Проверить вход по FQDN.
- Проверить автоматическое продление.
Быстрый набор команд
Проверить FQDN:
hostname -f
getent hosts "$(hostname -f)"
Проверить DNS:
dig +short pve01.example.com
Проверить текущий сертификат:
openssl s_client -connect pve01.example.com:8006 -servername pve01.example.com </dev/null 2>/dev/null |
openssl x509 -noout -subject -issuer -dates
Показать ACME accounts:
pvenode acme account list
Заказать сертификат:
pvenode acme cert order
Итог
После выполнения инструкции:
- проверены hostname и DNS;
- создана ACME-учётная запись;
- настроен HTTP-01 или DNS-01 challenge;
- выпущен сертификат Let's Encrypt;
- проверены имя, цепочка и срок действия;
- проверено применение сертификата в
pveproxy; - рассмотрено автоматическое продление.
Для административного интерфейса Proxmox VE предпочтительно использовать DNS-01 и ограничивать сетевой доступ к панели через VPN или management-сеть.