Warum Domains Punycode brauchen
DNS transportiert nur ASCII-Buchstaben, Ziffern und Bindestriche. Um Namen wie münchen.de oder 日本語.jp zu erlauben, wird jedes Nicht-ASCII-Label in eine ASCII-Zeichenkette kodiert, die mit xn-- beginnt. Browser zeigen die Unicode-Form und lösen die ASCII-Form auf; Zertifikate, Zonendateien und die meisten APIs wollen die ASCII-Form. Die Kodierung ist Punycode (RFC 3492), und die Regeln, welche Zeichen erlaubt sind und wie sie normalisiert werden, sind IDNA (RFC 5890–5895, UTS 46).
Wie Punycode funktioniert
- Die ASCII-Zeichen des Labels unverändert kopieren, gefolgt von einem Bindestrich, falls es welche gab:
mnchen-. - Positionen und Codepunkte der Nicht-ASCII-Zeichen als Folge von Basis-36-Ziffern (a–z, 0–9) in einem Schema variabler Länge kodieren, das häufige Fälle kurz hält:
3yasagt „ü nach dem ersten Zeichen einfügen“. - Mit
xn--voranstellen:xn--mnchen-3ya.
Das Ergebnis ignoriert Groß-/Kleinschreibung und ist höchstens 63 Byte pro Label lang, wie jedes DNS-Label.
Homograph-Angriffe
Weil die kyrillischen а, е, о, р, с wie lateinische Buchstaben aussehen, wird xn--80ak6aa92e.com als überzeugendes apple.com dargestellt. Browser zeigen inzwischen die xn--Form, wenn ein Label Schriften mischt oder verwechselbare Zeichen enthält, und Registries beschränken, welche Schriften kombiniert werden dürfen. Der Konverter warnt aus demselben Grund, wenn ein Label Schriften mischt.
Wo man ihm begegnet
TLS-Zertifikate (der SAN muss die xn--Form enthalten), SPF- und DKIM-Einträge, E-Mail-Adressen (ü@example.de braucht SMTPUTF8 und ist von IDN getrennt), URLs in Logs und dig, das die ASCII-Form ausgibt.
Fragen
Was bedeutet xn--?
Es ist das ACE-Präfix, das ein Punycode-kodiertes Label kennzeichnet. Jedes DNS-Label, das mit xn-- beginnt, ist ein internationalisierter Name in ASCII-Form.
Verwende ich im Zertifikat die Unicode- oder die xn--Form?
Die xn--Form, sowohl im CN (falls verwendet) als auch im subjectAltName. Let’s Encrypt und andere CAs akzeptieren die Unicode-Form im Antrag und wandeln sie um.
Warum liefert mein Konverter bei Großbuchstaben ein anderes Ergebnis?
IDNA bildet Namen vor dem Kodieren auf Kleinbuchstaben und NFC ab, sodass MÜNCHEN.de und münchen.de dasselbe xn--Label ergeben. Dieses Tool wendet dieselbe Abbildung an.
Können E-Mail-Adressen internationalisiert werden?
Der Domain-Teil nutzt Punycode wie jede Domain. Der lokale Teil vor dem @ kann nur mit SMTPUTF8 (RFC 6531) UTF-8 sein, was nicht alle Mailserver unterstützen; dafür gibt es kein Punycode.