ТЛ; др
Код должен работать с именами хостов длиной до 255 байт;
администраторы должны хранить длину имени хоста (исключая домен) в пределах 19 байт,
и длина доменного имени (исключая имена хостов) в пределах 23 байтов.
- Имена хостов могут быть длиной до 255 байт (некоторые системы могут ограничивать их до 64)
- Имена хостов, используемые в DNS, могут быть длиной до 253 байт.
как полное доменное имя (FQDN =
host.example.com
), и в этом случае:
- Первая метка DNS (удаление
.
и чего-либо после него из имени хоста)
может быть только до 63 байтов
- Ограничение в 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 "Старое новое" (цитирование 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 байтов подразумевает максимальную длину полного доменного имени имени хоста 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 IA5Strings.
Хотя OpenSSL мог быувеличьте этот лимит в будущем, для этого нет проблемы в OpenSSL Request Tracker , и вряд ли он будет изменен.
Даже если вы не используете TLS / SSL, максимальная длина адреса электронной почты 254 подразумевает максимальную длину полного доменного имени имени хоста 245 байт для традиционного8-байтовый лимит имени пользователя;или 221 байт для современного максимального предела длины имени пользователя 32.
Принимая минимум всех этих максимумов и среднюю длину домена .com 2012 11 (по совпадениюточная длина example.com), и вы получите максимальную длину имени первого ярлыка хоста 19 байт для 40-байтового адреса электронной почты, например useruser@REALLY-GETTING-LONG.example.com
.
Если все ваши электронныеадреса электронной почты сопоставляются с именем домена верхнего уровня с записями MX и переписыванием адресов MTA, при условии более разумного ограничения длины имени пользователя / псевдонима, равного 16, максимальная длина имени домена составляет 23 байт для40-байтовый адрес электронной почты, такой как useruseruseruser@NOT-SO-LONG.EXAMPLE.COM
.
Наконец, для имен хостов, не относящихся к ASCII, требуется кодировка IDN (интернационализированное доменное имя) для использования с DNS;это включает кодирование с 4-символьным префиксом xn--
для каждой метки домена с не-ASCII-символами и расширение на 1-2 байта для каждого не-ASCII-символа (в дополнение к большему размеру, полученному в результате кодирования UTF-8),Если ваше имя хоста содержит символы не ASCII, вам необходимо соответствующим образом уменьшить все вышеперечисленные ограничения.