Perché i domini hanno bisogno di Punycode
Il DNS trasporta solo lettere, cifre e trattini in ASCII. Per ammettere nomi come münchen.de o 日本語.jp, ogni etichetta non ASCII viene codificata in una stringa ASCII che inizia con xn--. I browser mostrano la forma Unicode e risolvono quella ASCII; certificati, file di zona e la maggior parte delle API vogliono la forma ASCII. La codifica è Punycode (RFC 3492), e le regole su quali caratteri sono ammessi e come vengono normalizzati sono IDNA (RFC 5890–5895, UTS 46).
Come funziona Punycode
- Copia i caratteri ASCII dell’etichetta così come sono, seguiti da un trattino se ce n’era qualcuno:
mnchen-. - Codifica le posizioni e i code point dei caratteri non ASCII come una sequenza di cifre in base 36 (a–z, 0–9) con uno schema a lunghezza variabile che tiene corti i casi comuni:
3yadice «inserisci ü dopo il primo carattere». - Aggiungi il prefisso
xn--:xn--mnchen-3ya.
Il risultato non distingue maiuscole e minuscole ed è al massimo 63 byte per etichetta, come qualsiasi etichetta DNS.
Attacchi omografi
Poiché le cirilliche а, е, о, р, с sembrano lettere latine, xn--80ak6aa92e.com viene mostrato come un convincente apple.com. I browser ora mostrano la forma xn-- quando un’etichetta mescola script o usa caratteri confondibili, e i registri limitano quali script possono essere combinati. Il convertitore avvisa quando un’etichetta mescola script per lo stesso motivo.
Dove lo incontrerai
Certificati TLS (il SAN deve contenere la forma xn--), record SPF e DKIM, indirizzi email (ü@example.de richiede SMTPUTF8 ed è una cosa diversa dagli IDN), URL nei log, e dig, che stampa la forma ASCII.
Domande
Cosa significa xn--?
È il prefisso ACE che contrassegna un’etichetta codificata in Punycode. Qualsiasi etichetta DNS che inizia con xn-- è un nome internazionalizzato in forma ASCII.
In un certificato uso la forma Unicode o quella xn--?
La forma xn--, sia nel CN (se usato) sia nel subjectAltName. Let’s Encrypt e le altre CA accettano la forma Unicode nella richiesta e la convertono.
Perché il mio convertitore dà un risultato diverso con le maiuscole?
IDNA mappa i nomi in minuscolo e NFC prima della codifica, quindi MÜNCHEN.de e münchen.de danno la stessa etichetta xn--. Questo strumento applica la stessa mappatura.
Gli indirizzi email possono essere internazionalizzati?
La parte del dominio usa Punycode come qualsiasi dominio. La parte locale prima della @ può essere UTF-8 solo con SMTPUTF8 (RFC 6531), che non tutti i server di posta supportano; per essa non esiste Punycode.