tl; dr:
Код должен иметь дело с именами хостов длиной до 255 байт; администраторы должны поддерживать длину имени хоста (без учета домена) в пределах 19 байтов, а длину имени домена (без учета имен хостов) в пределах 23 байтов.
- Имена хостов могут быть длиной до 255 байтов (некоторые системы могут ограничивать их до 64).
- Hostnames used in DNS can be as long as 253 bytes
as a fully qualified domain name (FQDN=
host.example.com
), in which case:
- The first DNS label (removing
.
and anything after it from the hostname)
can only be up to 63 bytes
- Ограничение в 253 байта применяется ко всему всему FQDN, даже если для имени хоста Unix используется только первая метка.
- Имена хостов, используемые в адресах электронной почты, не должны превышать 245 байтов (для традиционного ограничения имени пользователя в 8 символов) или 221 байтов (современная максимальная длина имени пользователя 32) в качестве полностью определенного домена. название
- Имена хостов, используемые для серверных сертификатов TLS / SSL, не должны превышать 64 байтов как полное доменное имя.
- Имена хостов, используемые для адресов электронной почты в сертификатах, сгенерированных OpenSSL, не должны превышать 31 байта (для традиционного ограничения имени пользователя в 8 символов) в качестве полного имени домена (имена пользователей длиннее 8 уменьшают этот предел)
- Если в имени хоста есть символы, отличные от ASCII, вычтите 4 для каждой метки домена, отличного от ASCII (часть между символами
.
) из всех вышеуказанных ограничений, и вычтите дополнительные 1-2 байта (не включая UTF -8 накладных расходов на кодирование (еще 1-2 байта на символ) для каждого символа, отличного от ASCII.
Длинная версия:
Как говорит @Michael, имена хостов POSIX обычно ограничены 255 байтами, и, как указывает @zrvan, DNS ограничивает длину каждой метки в RFC 1035, однако на самом деле этот предел равен 63 (оба в RFC 1035, раздел 2.3.1 и как указано в RFC 2181 раздел 11).
Существуют и другие ограничения, которые вступают в игру, когда вы используете имена хостов, которые будут использоваться в DNS, в качестве имен хостов в сертификатах SSL или адресах электронной почты.
Во-первых, ограничение длины полного доменного имени (FQDN) составляет 255 октетов, если оно представлено в протоколе DNS как
"серия меток, ... оканчивающихся меткой нулевой длины. ... Метка состоит из октета длины, за которым следует это количество октетов, представляющих само имя" - Блог MSDN" The Old New Thing " (цитируется RFC 1035 с полезной иллюстрацией)
С этими префиксами длины (включая префикс для конечной нулевой длины метки) фактический предел для полного доменного имени составляет 253 байта.
Если ваше имя хоста также будет использоваться в качестве DNS-имени для сервера, для которого вам нужен сертификат TLS / SSL, существует гораздо более короткий предел, который повлияет на вас. Приложение A.1 RFC 5280 и его предшественники RFC 3280 и 2459 определяют Верхние границы для разных полей сертификата X.509; предел ub-common-name-length
для поля Common Name, которое для сертификатов сервера является полным доменным именем сервера, составляет 64 байта.
Если вы используете OpenSSL для создания сертификата SSL с полем адреса электронной почты длиной более 40 байт, вы увидите эту ошибку:
строка слишком длинная, она должна быть менее 40 байт
Если имя хоста будет использоваться в адресах электронной почты для сертификатов, сгенерированных OpenSSL, @
и имя пользователя также должны уместиться в пределах 40 байтов («меньше» в ошибке действительно должно быть «не больше чем»), что для максимальная длина имени пользователя 8 байтов, подразумевает максимальную длину FQDN имени хоста 31 байта. Если максимальная длина имени пользователя превышает 8 байтов, максимальная длина имени хоста соответственно уменьшается - современный лимит Linux 32 даст максимальная длина полного доменного имени 7, что непрактично даже для служб сокращения URL-адресов, таких как bit.ly.
Выбор OpenSSL 40 в качестве ограничения длины для адреса электронной почты Альтернативное имя субъекта X.509 могло быть выбрано для совместимости с кратчайшим возможным синтаксисом альтернативного имени, E.163-4 (для телефонных номеров), и это вероятно, что реализации TLS / SSL (возможно, даже включая OpenSSL) поддерживают использование сертификатов с более длинными адресами электронной почты. Существует отдельная верхняя граница (ub-emailaddress-length
) 128 байтов в RFC 3280, увеличенная до 255 байтов в RFC 5280; это на самом деле для другого, устаревшего встраивания адресов электронной почты в сертификаты X.509, но было бы неудивительно, если бы многие реализации использовали эту верхнюю границу и для rfc822Address e-mail IA5Strings.
Хотя OpenSSL может увеличить этот лимит в будущем, для этого нет проблем в OpenSSL Request Tracker, и вряд ли это будет изменено.
Даже если вы не используете TLS / SSL, максимальная длина адреса электронной почты 254 подразумевает максимальную длину FQDN имени хоста. из 245 байт для традиционного ограничения имени пользователя в 8 байт; или 221 байт для современного ограничения максимальной длины имени пользователя 32.
Взяв минимум всех этих максимумов и медианную длину домена .com 2012 г., равную 11 (по совпадению, точная длина of example.com), и максимальная длина имени хоста первой метки составляет 19 байт для 40-байтового адреса электронной почты, такого как [email protected]
.
Если все ваши адреса электронной почты сопоставлены с именем домена верхнего уровня с записями MX и перезаписью адреса MTA, при более разумном ограничении длины имени пользователя / псевдонима, равном 16, вы получите максимальную длину имени домена 23 strong> байтов для 40-байтового адреса электронной почты, например [email protected]
.
Наконец, имена хостов, отличные от ASCII, требуют кодировки IDN (интернационализированное доменное имя) для использования с DNS; это включает в себя кодирование с 4-символьным префиксом xn--
для каждой метки домена с символами, отличными от ASCII, и расширение на 1-2 байта для каждого символа, отличного от ASCII (в дополнение к большему размеру, полученному в результате кодирования UTF-8). Если ваше имя хоста содержит символы, отличные от ASCII, вам необходимо соответственно уменьшить все указанные выше ограничения.
person
Alex Dupuy
schedule
07.03.2015