Я надеюсь использовать Let's Encrypt для нескольких доменов и поддоменов, а также для моей компании. Вместо покупки долговременного сертификата wild card, установленного на каждой машине, цель состоит в том, чтобы использовать краткосрочные и конкретные сертификаты. Это сделано для того, чтобы предотвратить нашу уязвимость, если одна машина будет взломана.
К сожалению, на некоторых серверах не может быть прерывания обслуживания (иначе говоря, нет возможности HTTP-запроса acme). Итак, последний вариант - это вызов DNS. Для этого требуется токен API для нашего DNS-провайдера, в данном случае Cloudflare.
Однако, если я помещаю глобальный токен API на компьютер и он будет скомпрометирован, это даст злоумышленнику полный доступ к нашему DNS для всего домена. Это именно то, что я хочу смягчить, не используя шаблонный сертификат.
Cloudflare позволяет создавать токены с меньшими привилегиями, однако они не могут быть более детализированными, чем для каждого домена корневого уровня. Опять же, по существу тот же доступ / проблема, что и сертификат с подстановочным знаком.
Кто-нибудь придумал решение этого вопроса?
Подход, который я использовал в прошлом для этого требования, и который я верить благословлен документацией Let's Encrypt, заключается в том, чтобы CNAME _acme-challenge
поддомен для имен, которые вы хотите подтвердить для имен в одной или нескольких других зонах, которые имеют разные конфигурации управления доступом.
Например, если вы хотите разрешить какой-либо службе генерировать сертификаты только для bobservice.example.com
, вы можете создать отдельную зону для другого домена, например bobservice.example
, а затем CNAME _acme-challenge.bobservice.com
к _acme-challenge.bobservice.example
. Затем токен вызова помещается в запись TXT на _acme-challenge.bobservice.example
, LE следует за CNAME, и имя проверяется.
Конечно, другой вариант - полностью отказаться от использования Cloudflare, потому что в их сервисе отсутствуют полезные функции, такие как учетные данные с ограниченным объемом, а также крошечная проблема, заключающаяся в том, что они предоставляют услуги нечистоплотности Интернета.
К сожалению, на некоторых серверах не может быть прерывания обслуживания (иначе говоря, нет возможности HTTP-запроса acme). Итак, последний вариант - это вызов DNS.
Есть еще один вариант для вашего сценария: плагин webroot. Это позволяет вам сообщить клиенту Let's Encrypt путь к корневому веб-серверу, и он поместит туда файлы запроса HTTP. Такой подход никак не влияет на работу вашего веб-сервера и не вызывает простоев.
Мое решение - создать службу, которая живет во внутренней сети, достаточно заблокирована и содержит глобальный ключ API. Эта служба будет использовать этот ключ для создания / обновления сертификатов для различных поддоменов. Серверы, которые полагаются на сертификаты поддоменов, будут иметь токен для каждого домена, который они могут выдать этой внутренней службе для получения нового или обновленного сертификата.