RFC 9460 Описывает запись ресурса DNS (RR) с именем HTTPS. Чтобы подчеркнуть, что именно эта запись DNS под названием HTTPS мы говорим, мы стараемся всегда называть ее https rr, используя оба слова рядом друг с другом.
Керл в настоящее время предлагает экспериментальный Поддержка HTTPS RR в GIT. Экспериментальный означает, что вам нужно явно включить его в сборку, чтобы он присутствовал.
cmake -DUSE_HTTPSRR=ON ...
или
configure --enable-httpsrr ...
Для чего нужен HTTPS RR?
Это поле DNS, которое предоставляет мета-дата обслуживания о целевом имени хоста. Во многих отношениях это альтернативная запись для SRV и URI, которые никогда не использовались для Интернета и HTTP. Это также как бы заменяет заголовки HST и ALT-SVC.
Вот некоторые данные, которые он предлагает:
I Config
Echs коротко Зашифрованный клиент привет и является установленной системой для шифрования поля SNI в рукопожатиях TLS. Как вы можете помнить, поле SNI является одной из последних оставшихся частей в подключении HTTPS, которое отправляется в ясном и, таким образом, раскрывает активным слушателям, с каким сайтом клиент намеревается общаться. ECH скрывает это, шифруя имя.
Чтобы ECH мог иметь возможность работать, клиент нуждается в информации, прежде чем фактически выполнять рукопожатие, и это поле предоставляет эти данные. Curl оснащена экспериментальной поддержкой ECH.
ECH был в работе в течение нескольких лет, но до сих пор не был опубликован в RFC.
Список ALPN
Список идентификаторов ALPN предоставляется. Эти идентификаторы в основном говорят клиенту, какие версии HTTP этот сервер хочет использовать (над HTTPS). Если этот список содержит http/1.1, и нас попросили сделать передачу http: //, он подразумевает, что клиент должен обновить на HTTPS. Таким образом, своего рода замена HSTS.
Я думаю, что ключевым идентификатором ALPN здесь является «H3», который сообщает клиенту, который этот сервер поддерживает HTTP/3, и мы можем попробовать это уже в первом полете. Предыдущий вариант правильно Обновление до HTTP/3 было бы ждать заголовка ответа ALT-SVC, который может дать указание последующей попытке подключения. Это затем значительно задерживает обновление, поскольку повторное использование к тому времени уже существующее соединение HTTP/2 или HTTP/1, как правило, предпочтительнее клиентов.
Цель
Сервис предлагается на другое имя хоста. Alt-SVC стиль. Он также может предоставить информацию о том, как получить доступ к этому сайту для различных «сервисов», чтобы соединения TCP/TLS продолжались в одну сторону и подключаются к Quic.
Порт
Он может сказать клиенту, что служба размещена на другом номере порта.
IP -адреса
Он может предоставить список адресов IPv4 и IPv6 для имени. Предположительно, чтобы использоваться в случае, если в то же время нет поля AAAA.
Получение записи DNS
Добавление поддержки HTTPS RR в существующий клиент TCP, такой как CURL, к сожалению, не так прямолинейно, как хотелось бы.
Основным препятствием является то, что регулярные разрешения HOSTNAME выполняются с помощью функции POSIX getaddrinfo () И эта функция не имеет знаний или поддержки HTTPS RR, и такая поддержка также не может быть добавлена в будущем. API на самом деле не допускает этого. Такие клиенты, как Curl, просто должны получить дополнительные записи, используя другие средства.
Как это делает кудря
Curl, или, скорее, Libcurl, имеет три разных способа исходного кода, чтобы разрешить имена хостов, из которых большинство сборки имеют два варианта:
- DOH (DNS-OVER-HTTPS)-CURL отправляет запросы DNS с использованием HTTPS на указанный сервер. Пользователи должны явно попросить об этом и указать на URL.
- Используя локальный резолвер. Построение Libcurl может затем использовать либо c-ares или getAddrinfo () для разрешения имен хоста, поскольку DOH или прокси и т. Д. Не используются.
Доми
Код DOH в Libcurl является собственной реализацией (он не использует каких -либо сторонних библиотек) и кода функций Libcurl как для отправки запросов HTTPS RR, так и для анализа ответов.
getaddrinfo
При использовании этого API для разрешения имени Libcurl по -прежнему нужно построить с c-ares а также для предоставления услуги по вопросам HTTPS RR. Затем Libcurl разрешает имя хоста «обычно» с GetAddrinfo () (обычно выпущенным в отдельной потоке Helper) и просит HTTPS RR с использованием C-ARE параллельно.
c-ares
Когда c-ares используется для разрешения имени, он также просит HTTPS RR одновременно. Это означает, что C-Ares просит записи AAAA и HTTPS.
Существующие недостатки
Мы еще не предлагаем опцию времени выполнения, чтобы отключить использование HTTPS-RR, поэтому, если вы создаете с помощью его включенного, его всегда будет предпринимать. Я думаю, что нам нужно предоставить такой вариант, когда записи HTTPS либо просто неправильно, либо пользователь хочет отлаживать, либо просто играть по -разному.
Curl также еще не обрабатывает все аспекты довольно сложного HTTPS RR. Мы решили медленно двигаться вперед и сосредоточить нашу реализацию на частях области ресурсов, которые, кажется, развернуты и в реальном использовании.
Развернуто
Есть сайты, использующие эти записи уже сегодня. CloudFlare, например, предоставляет его для многих размещенных сайтов. Если вы включите HTTPS-RR сегодня, есть много возможностей, чтобы попробовать это. Как для регулярного обслуживания, так и для переключения протоколов, а также для ECH.
Пожалуйста, продолжайте и включите его в сборку, попробуйте и расскажите, что работает, а что не работает. Мы хотели бы продвинуться вперед, и если мы получим подтверждение от пользователей, что это действительно работает, мы могли бы в ближайшее время перенести его из статуса эксперимента.
2025-03-31 07:48:00
1743410528
#Https #curl #daniel.haxx.se

