bitlvl
RU

Конвертер Punycode / IDN

Введите домен с не-ASCII буквами, чтобы получить форму, которую реально использует DNS, или вставьте имя xn--, чтобы увидеть, что оно означает. Каждая метка показана отдельно.

Результаты и сообщения этого инструмента выводятся на английском языке.

Зачем доменам нужен Punycode

DNS передаёт только буквы, цифры и дефисы в ASCII. Чтобы допустить имена вроде münchen.de или 日本語.jp, каждая не-ASCII метка кодируется в ASCII-строку, начинающуюся с xn--. Браузеры показывают Unicode-форму и резолвят ASCII-форму; сертификаты, файлы зон и большинство API требуют ASCII-форму. Кодирование — это Punycode (RFC 3492), а правила о том, какие символы допустимы и как они нормализуются, — IDNA (RFC 5890–5895, UTS 46).

Как работает Punycode

  1. Скопируйте ASCII-символы метки как есть, добавив дефис, если они были: mnchen-.
  2. Закодируйте позиции и кодовые точки не-ASCII символов как последовательность цифр в системе с основанием 36 (a–z, 0–9) по схеме переменной длины, которая оставляет частые случаи короткими: 3ya означает «вставить ü после первого символа».
  3. Добавьте префикс xn--: xn--mnchen-3ya.

Результат нечувствителен к регистру и занимает не более 63 байт на метку, как любая метка DNS.

Омографические атаки

Поскольку кириллические а, е, о, р, с выглядят как латинские буквы, xn--80ak6aa92e.com отображается как убедительный apple.com. Браузеры теперь показывают форму xn--, когда метка смешивает письменности или использует схожие символы, а регистратуры ограничивают, какие письменности можно комбинировать. Конвертер по той же причине предупреждает, когда метка смешивает письменности.

Где вы с ним столкнётесь

TLS-сертификаты (SAN должен содержать форму xn--), записи SPF и DKIM, адреса электронной почты (ü@example.de требует SMTPUTF8 и не имеет отношения к IDN), URL в логах и dig, который печатает ASCII-форму.

Вопросы

Что означает xn--?

Это ACE-префикс, помечающий метку, закодированную в Punycode. Любая метка DNS, начинающаяся с xn--, — это интернационализированное имя в ASCII-форме.

В сертификате использовать Unicode-форму или xn--?

Форму xn--, и в CN (если используется), и в subjectAltName. Let’s Encrypt и другие CA принимают Unicode-форму в запросе и конвертируют её.

Почему мой конвертер даёт другой результат для верхнего регистра?

IDNA приводит имена к нижнему регистру и NFC перед кодированием, поэтому MÜNCHEN.de и münchen.de дают одну и ту же метку xn--. Этот инструмент применяет то же отображение.

Можно ли интернационализировать адреса электронной почты?

Доменная часть использует Punycode, как любой домен. Локальная часть до @ может быть в UTF-8 только с SMTPUTF8 (RFC 6531), который поддерживают не все почтовые серверы; Punycode для неё не существует.