Обновляя мою домашнюю инфраструктуру, чтобы учиться, а также быть более безопасным, я не смог выяснить, как лучше всего получить сертификаты и установить их на моих серверах, которые включают:
fw.example.com
nas.example.com:80
▷ nas.example.com:443
nas.example.com:8443
nas.example.com:7443
home.example.com:8123
На этом фоне:
Следует ли мне запускать программное обеспечение протокола ACME (Certbot, acme.sh или аналогичный) на каждом сервере через Cron, чтобы выпуск Let's Encrypt и продление сертификата (ов)? Или мне следует сделать это на одном сервере и настроить копирование полученных открытого и закрытого ключей на другие?
Один сертификат с Альтернативное имя субъектаs (SAN) для самого домена (example.com) И по одному для каждого поддомена (fw.example.com, nas.example.com и home.example.com) ИЛИ подстановочный знак (* .example.com, который ограничивает метод аутентификации ). Или каждый сервер должен получать свой сертификат?
На данный момент, помимо брандмауэра, только Home Assistant будет иметь внешний вид. Таким образом, это очевидный кандидат для процесса выпуска / обновления (учитывая, что моим регистратором является Google Domains, который не поддерживает DNS-O1, поэтому мне нужен HTTP-сервер для HTTP-01, если я не буду обновлять вручную каждые три месяца).
В будущем я хотел бы по порядку внедрить OpenVPN на брандмауэре. Насколько я понимаю, сертификаты для этого должны / должны быть созданы в частном порядке.
Дальнейшие исследования предлагают прокси высокой доступности для внутренних веб-сайтов. Имеет смысл, поскольку уменьшает место, где требуется текущий сертификат. Но не будет ли программное обеспечение, для которого требуется https: (например, Unifi Controller), жаловаться, поскольку оно не будет знать, что к нему осуществляется безопасный доступ, поскольку это обрабатывается прокси-сервером HA. Мысли по этому поводу?
Во-первых, немного о том, как работает Let's Encrypt и Certbot:
Certbot уже автоматизирует запросы сертификатов, создание и установку на веб-серверах. Таким образом, вы устанавливаете Certbot на веб-сервер с выходом в Интернет, и он запрашивает сертификат у Let's Encrypt, изменяет конфигурацию веб-сервера для использования указанного сертификата и обрабатывает продление сертификата в будущем. Так что нет необходимости автоматизировать эту часть.
Однако необходимо будет автоматизировать копирование сертификата для каждой службы, которая нуждается в нем внутри.
Надеюсь, это ответит на ваш первый вопрос.
Во-вторых, SAN - это имена служб, которые будут использовать сертификат. Так что обычно у вас может быть веб-сервер, который обслуживает множество различных API, сайтов и сервисов. Вместо того, чтобы настраивать отдельные сертификаты для каждого сайта, вы просто объединяете их все в один сертификат, используя несколько сетей SAN, и вам нужно обрабатывать обновление только одного сертификата.
Единственная техническая причина не использовать сертификат multi-SAN на нескольких серверах, о которой я могу думать, заключается в том, что вы распространяете закрытый ключ из сертификата на несколько серверов, что означает, что вы больше раскрываете закрытый ключ, и если один сервер будет скомпрометирован, все ваши серверы будут скомпрометированы.
В бизнес-среде вы пытаетесь избежать этого, используя один сертификат на сервер, но опять же, сертификат с подстановочными знаками, используемый на нескольких серверах, ничем не отличается, и он используется часто. Обычно использование подстановочных знаков - это способ сэкономить деньги, поскольку сертификаты могут быть довольно дорогими, но в вашем случае это не имеет особого значения, поскольку LE бесплатен.
В вашем случае я бы просто перечислил все разные имена в одном сертификате, чтобы Certbot обрабатывал запрос и обновление этого сертификата, а затем использовал бы некоторый код для копирования сертификата везде, где он вам нужен.
Другой вариант - использовать веб-сервер с NGINX в качестве обратного прокси-сервера и выполнять там все шифрование HTTPS, таким образом, сертификат нужен только серверу NGINX, и вам не нужно открывать свой внутренний сервер для Интернета. Это немного безопаснее, но вам придется обслуживать еще один сервер.
Наконец, к счастью, OpenVPN использует собственные сертификаты, поэтому вам не нужно беспокоиться о получении внешних сертификатов от центра сертификации. Единственный совет, который я могу вам дать, - это убедиться, что внутренний ЦС, используемый OpenVPN, имеет длительный срок действия (10 лет), и что ваши клиентские сертификаты тоже (> 1 года).