Por qué los dominios necesitan Punycode
El DNS solo transporta letras ASCII, dígitos y guiones. Para permitir nombres como münchen.de o 日本語.jp, cada etiqueta no ASCII se codifica en una cadena ASCII que empieza por xn--. Los navegadores muestran la forma Unicode y resuelven la forma ASCII; los certificados, los archivos de zona y la mayoría de las API quieren la forma ASCII. La codificación es Punycode (RFC 3492), y las reglas sobre qué caracteres se permiten y cómo se normalizan son IDNA (RFC 5890–5895, UTS 46).
Cómo funciona Punycode
- Copia los caracteres ASCII de la etiqueta tal cual, seguidos de un guion si había alguno:
mnchen-. - Codifica las posiciones y los puntos de código de los caracteres no ASCII como una secuencia de dígitos en base 36 (a–z, 0–9) con un esquema de longitud variable que mantiene cortos los casos comunes:
3yadice «insertar ü tras el primer carácter». - Antepón
xn--:xn--mnchen-3ya.
El resultado no distingue mayúsculas y tiene como máximo 63 bytes por etiqueta, como cualquier etiqueta DNS.
Ataques homógrafos
Como las cirílicas а, е, о, р, с se ven como letras latinas, xn--80ak6aa92e.com se muestra como un convincente apple.com. Los navegadores ya muestran la forma xn-- cuando una etiqueta mezcla escrituras o contiene caracteres confundibles, y los registros restringen qué escrituras pueden combinarse. El conversor avisa por la misma razón cuando una etiqueta mezcla escrituras.
Dónde te lo encuentras
Certificados TLS (el SAN debe contener la forma xn--), registros SPF y DKIM, direcciones de correo (ü@example.de necesita SMTPUTF8 y es independiente de IDN), URL en registros y dig, que imprime la forma ASCII.
Preguntas
¿Qué significa xn--?
Es el prefijo ACE que marca una etiqueta codificada en Punycode. Toda etiqueta DNS que empieza por xn-- es un nombre internacionalizado en forma ASCII.
¿Uso la forma Unicode o la xn-- en el certificado?
La forma xn--, tanto en el CN (si se usa) como en el subjectAltName. Let’s Encrypt y otras CA aceptan la forma Unicode en la solicitud y la convierten.
¿Por qué mi conversor da otro resultado con mayúsculas?
IDNA pasa los nombres a minúsculas y NFC antes de codificar, de modo que MÜNCHEN.de y münchen.de producen la misma etiqueta xn--. Esta herramienta aplica la misma transformación.
¿Pueden internacionalizarse las direcciones de correo?
La parte del dominio usa Punycode como cualquier dominio. La parte local antes de la @ solo puede ser UTF-8 con SMTPUTF8 (RFC 6531), que no todos los servidores de correo admiten; para eso no hay Punycode.