Certbot: Выдача сертификата для внутреннего IP-адреса с использованием собственной PKI?

Вопрос или проблема

Я запускаю свой собственный сервер 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. Вот пошаговая инструкция по его использованию:

  1. Установка uacme

    Сначала вам нужно загрузить и установить uacme в вашу среду. Например, вы можете клонировать репозиторий и собрать клиент:

    git clone https://github.com/ndilieto/uacme.git
    cd uacme
    make

    Убедитесь, что у вас установлен make и необходимые инструменты для сборки.

  2. Запрос сертификата для 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.

  3. Проверка сертификата

    После успешного выполнения команды сертификат будет сгенерирован и будет доступен в текущем каталоге. Вы можете проверить его с помощью команды:

    openssl x509 -in your_cert.crt -text -noout

    Здесь your_cert.crt — это имя файла сертификата, который был создан.

  4. Настройка вашего веб-сервера

    Убедитесь, что ваш веб-сервер настроен на использование нового сертификата. Пример для 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 / {
           # ваши настройки
       }
    }
  5. Добавление корневого сертификата CA

    Убедитесь, что корневой сертификат вашего CA установлен на всех устройствах в вашей локальной сети для того, чтобы они могли доверять выданным сертификатам.

Заключение

Используя uacme, вы сможете успешно генерировать сертификаты для внутренних IP-адресов с вашей собственный PKI. Если у вас возникнут какие-то сложности или потребуется дополнительная помощь, вы можете обратиться к документации проекта uacme или задать дополнительные вопросы.

Оцените материал
Добавить комментарий

Капча загружается...