Вопрос или проблема
Я запускаю свой собственный сервер ACME CA, который позволяет выдавать сертификаты для IP-адресов. Я установил корневой сертификат на все устройства в своей локальной сети. Допустим, я запускаю сервер по адресу https://ca.internal/acme
. Теперь я хотел бы выдать сертификат для внутреннего IP-адреса, скажем, 10.0.0.2
. Также предположим, что у меня установлен и хорошо работающий веб-сервер. Теперь я пытаюсь использовать команду sudo certbot certonly -n --standalone -d 10.0.0.2 --server https://ca.internal/acme
, но получаю ошибку, говорящую о том, что сертификаты Let’s Encrypt не поддерживают IP-адреса. Есть ли способ (возможно, редактируя конфигурационные файлы Certbot) решить эту проблему и разрешить выдачу сертификатов для IP-адреса? Я проверил документацию Certbot, но не нашел ничего полезного.
Если окажется, что то, что я спрашиваю, невозможно с Certbot, существуют ли другие клиенты ACME, которые поддерживают выдачу сертификата для IP-адреса с внутренним CA?
Вы можете попробовать uacme: https://github.com/ndilieto/uacme
Он поддерживает IP в соответствии с https://www.rfc-editor.org/rfc/rfc8738#section-3
Ответ или решение
Для получения сертификата для внутреннего IP-адреса с использованием вашего собственного сервера CA (Certificate Authority), который поддерживает ACME, вам нужно учитывать несколько моментов. Поскольку Certbot изначально предназначен для работы с сертификатами от Let’s Encrypt, он ограничен в возможности запрашивать сертификаты для IP-адресов, так как Let’s Encrypt не поддерживает это. Однако, если у вас есть собственный ACME-сервер, вы можете использовать другой ACME-клиент, который позволит это сделать.
Решение с использованием uacme
Одним из альтернативных клиентов ACME является uacme, который поддерживает возможность выдачи сертификатов для IP-адресов согласно стандарту RFC 8738. Вот пошаговая инструкция по его использованию:
-
Установка uacme
Сначала вам нужно загрузить и установить uacme в вашу среду. Например, вы можете клонировать репозиторий и собрать клиент:
git clone https://github.com/ndilieto/uacme.git cd uacme make
Убедитесь, что у вас установлен
make
и необходимые инструменты для сборки. -
Запрос сертификата для IP-адреса
После установки uacme, вы можете выдать сертификат для вашего внутреннего IP-адреса с помощью следующей команды:
sudo ./uacme -m your-email@example.com --server https://ca.internal/acme -d 10.0.0.2
Замените
your-email@example.com
на адрес вашей электронной почты. Команда автоматически создаст необходимые challenge’и и запросит сертификат у вашего CA. -
Проверка сертификата
После успешного выполнения команды сертификат будет сгенерирован и будет доступен в текущем каталоге. Вы можете проверить его с помощью команды:
openssl x509 -in your_cert.crt -text -noout
Здесь
your_cert.crt
— это имя файла сертификата, который был создан. -
Настройка вашего веб-сервера
Убедитесь, что ваш веб-сервер настроен на использование нового сертификата. Пример для Nginx:
server { listen 443 ssl; server_name 10.0.0.2; ssl_certificate /path/to/your_cert.crt; ssl_certificate_key /path/to/your_key.key; location / { # ваши настройки } }
-
Добавление корневого сертификата CA
Убедитесь, что корневой сертификат вашего CA установлен на всех устройствах в вашей локальной сети для того, чтобы они могли доверять выданным сертификатам.
Заключение
Используя uacme, вы сможете успешно генерировать сертификаты для внутренних IP-адресов с вашей собственный PKI. Если у вас возникнут какие-то сложности или потребуется дополнительная помощь, вы можете обратиться к документации проекта uacme или задать дополнительные вопросы.