Не совсем так.
Раньше ты покупаешь домен, приносишь “чек на покупку” и тебе выписывают за деньги сертификат. (сейчас это тоже работает для корпоратов)
LetsEncrypt должен подтвердить права владения доменом, т.е. должен быть куплен публичный домен, на который выписывается сервтификат (поле CN), потвердить владение доменом можно несколькими способами, но по сути, они сводятся к 2м
- DNS challenge - это когда ты добавляешь txt или cname запись, тем самым подтверждаешь, что являешься админом домена
- http/tls challenge - это когда ты загружаешь файлик на сервер, который можно скачать, причем, я почитал про tls challenge, там вроде как обычный http, просто с самоподписанным сертификатом
Т.е. а любом случае должен быть домен (скоро ожидается выпуск сертификатов для IP адресов, но подозреваю, что публичных, а не локальных) и для этого домена LE выпускает и подписывает своей подписью сертификат, а подпись эта (сертификат), в свою очередь либо подписывается более крутым удостоверящим центом (как было изначально), либо на уровне договоренностей копируется на все клиентские системы.
Соответственно, цепочка доверия выглядит так:
Корневой СA (крутой), который зашит в операционную систему или браузер-> какой-то менее крутой УЦ → LE → сертификат вашего домена
-
В этой цепочке Google доверяет нескольким корневым CA и зашивает его подпись в
Google Chrome, корневые тесно работают с УЦ нижнего уровня, но все равно это физическое доверие (лицо к лицу так сказать, договора, ключи и т.д., раньше банки заставляли для банк-клиентов печатать запрос на подпись сертификата на бумаге, ставить печать ООО и подпись директора и с этой бумажкой и паспортом идти в офис банка, там эти данные проверяли и подписывали сертификат клиента) -
И тут где-то в цепочке есть LE, но сейчас, повторюсь, они стали настолько крутыми, что уже работают с Google без посредников
-
И дальше на самом последнем этапе доверия есть пользователь certbot, который купил домен и хочет выпустить LE сертификат для него, сходить ножками в офис LE он не может, поэтому LE говорит
вот тебе этот файл с рандомным содержимым, положи его на сервер и мы сходим по адресу http://domain.com/.well-known/acme-challenge/YOUR_CHALLENGE_TOKEN и скачаем этот файл, если они одинаковые, то мы тебе верим
Или
Вот тебе TXT запись, зайди в админку управления доменом и добавь там эту запись, а мы сходим в публичный DNS сервер и запросим у эти данные, если совпало, то мы тебе верим
Собственно, поэтому, LE выпускает сертификаты на 90 дней, а со следующего года собирается сокращать время действия сертификата. Как раз для того, чтобы постоянно проверять “прописку клиента” (закончился срок регистрации домена и я не могу подтвердить его владение) и исключать утечку сертификата (если злоумышленник скачает приватный ключ с сервера, то сможет его пользовать до окончания срока действия, это как требования периодической смены пароля)
Резюме
Как мы видим, в данной схеме в любом случае должен быть публичный домен, к которому имеет доступ LE, он может не резолвится в случае DNS challenge, но SOA, NS, TXT/CNAME записи должны быть
Что можно сделать
1. Поднять свой УЦ
- Выпускаем корневой сертификат
- Выпускаем сертификаты для сервисов на внутренние доменные адреса или IP
- Подписываем CA эти сертификаты
- Всем клиентам добавляем корневой CA в качестве доверенного
В этом случае у насработает принцип доверия как с LE сертификатами, только мы должны принудительно добавить в доверенные наш УЦ
Вот пример в ubuntu
$ ls -la /usr/local/share/ca-certificates/
total 20
drwxr-xr-x 2 root root 4096 июн 24 2024 .
drwxr-xr-x 16 root root 4096 авг 12 22:01 ..
-rw-r--r-- 1 root root 1310 окт 16 2023 bcs-root.crt
-rw-r--r-- 1 root root 2088 июн 24 2024 russian_trusted_root_ca_pem.crt
-rw-r--r-- 1 root root 2616 июн 24 2024 russian_trusted_sub_ca_pem.crt
Тут мы видим, что у меня добавлен один корпоративный сертификат и 2 сертификата минцифры, которыми, например, подписывается сбербанк онлайн
Вот инструкция по PKI от OpenBao, я подумываю настроить в хомлабе
Тут получение, выпуск и отзыв сертификатов производится при помощи соответствющих инструментов
Это корпоративный стандарт, т.к. вместо подтверждения владением доменом, используются креды сервиса, а в корпоративной среде вообще может быть какой-нить jabber сервер без 80 порта, а кому-угодня править DNS записи тоже давать не стоит. Тут же мы говорим: пользователю AAA можно выпускать сертификаты для дометов AAA.domain.com и BBB.domain.com
2. Поднять свой LE сервер
По сути, тут у нас все как с пунктом 1. но вместо PKIшки готовой мы берем certbot и пишем свой letsencrypt сервер + придумываем challenge
В этом случае, мы сможем быстро подключить сервисы, которые умеют работать с LE, но нам надо будет писать с нуля свой LE под свою инфраструктуру