Я только что начал использовать Let's Encrypt. http-01-challenge достаточно прост:
- Заставить веб-сервер отвечать наhttp://example.com
- Попросите Let's Encrypt предоставить вам файл-вызов
- Предоставьте файл unterhttp://example.com/.well-known/acme-challenge
- Получите TLS-сертификат для example.com
Работает как по волшебству. Но как они удостоверяются, что я действительно владелец example.com, используя незащищенное http-соединение?
Разве не может какой-нибудь администратор в моем центре обработки данных (или у моего интернет-провайдера) просто запросить сертификат и перехватить http-запросы, которые отправляет Let's Enrypt, чтобы проверить подлинность сервера?
решение1
Действительно, нет непогрешимой защиты от атаки типа «человек посередине» для HTTP-01 challenge.
Тот, кто может перехватить трафик между узлами проверки Let's Encrypt и вашим сервером, МОЖЕТ пройти проверку и получить выданный сертификат. Если они могут провернуть трюк с BGP, они не обязательно могут оказаться в середине в обычном смысле.
Это относится к HTTP-01 challenge, а для неподписанных доменов также и к DNS-01 challenge.
Стоит отметить, что эта проблема свойственна не только Lets Encrypt: проверка, проводимая традиционными центрами сертификации для сертификатов DV, обычно имеет ту же проблему; обычно они предлагают варианты проверки HTTP, DNS и электронной почты, все из которых подвержены атаке MITM.
ЧтоДавайте зашифруемимеетсделано для смягчения проблемы, заключается в запуске каждой проверки с нескольких тестовых узлов в разных центрах обработки данных, требуя, чтобы все результаты тестов совпадали для выдачи сертификата. (Что, как я подозреваю, делает их менее восприимчивыми к такому типу злоупотреблений, чем большинство традиционных центров сертификации.)
Это, по крайней мере, уменьшает круг тех, кто может находиться «посередине», поскольку большие части «посередине» будут отличаться с точки зрения разных тестовых узлов.
Речь идет о поведении по умолчанию автоматической проверки домена компанией Let's Encrypt (и центрами сертификации в целом), однако владельцу домена предоставлены некоторые дополнительные возможности контроля в связи с требованием, чтобы публичные центры сертификации проверяли CAA
записи.
Чтобы фактически взять под контроль, владелец домена может предпринять следующие шаги:
- DNSSEC-подпись зоны, гарантирующая, что
CAA
данные не будут подделаны
(также защищает сам вызов в случае DNS-01) - Добавьте одну или несколько
CAA
записей для ограничения выдачи сертификатов
(в частности,CAA
записи, которые не только содержат название центра сертификации, которому разрешено выдавать сертификаты, но и указывают, какой учетной записи в этом центре сертификации это разрешено)
С CAA
записью, выглядящей примерно так:
example.com. IN CAA 0 issue "letsencrypt.org; accounturi=https://acme-v02.api.letsencrypt.org/acme/acct/12346789"
Проблема значительно упрощается, поскольку самозванец изначально не может просто так инициировать вызов.
Обратите особое внимание на accounturi
параметр в CAA
данных, это то, что делает политику специфичной для учетной записи владельца домена с указанным CA.
Запись CAA
, которая указывает только CA, но не учетную запись, хотя и является допустимой, будет иметь ограниченную пользу, поскольку такая политика все равно позволяет любому другому клиенту этого CA запрашивать выдачу сертификатов.
решение2
Обоснование использования httpпри получении HTTP-01 вызов в спецификации:
Поскольку многие веб-серверы выделяют виртуальный хост HTTPS по умолчанию определенному пользователю-арендатору с низкими привилегиями скрытным и неинтуитивным способом, задачу необходимо выполнить по протоколу HTTP, а не HTTPS.
Эта задача отличается от сообщений протокола ACME. Спецификация предписывает https. ACME также имеетчестностьиповторитьзащиты на подписанных сообщениях. Даже если трафик был перехвачен, его компрометация может быть более серьезной, чем просто незашифрованный вызов. Конечно, в этом есть некоторый риск, но какова альтернатива лучшей процедуре проверки домена?
Более полный подход к мониторингу неавторизованных сертификатов может включать прозрачность сертификатов. Поиск или настройка оповещений в журналах CT для ваших имен. Выдача CA, серийный номер и дата должны быть знакомы.