Какие строки допустимы в атрибуте "common name" в сертификате X.509?
В поле общего имени DN сертификата X509, как определено в нотации ASN.1 для OID "2.5.4.3", каковы допустимые значения?
Я знаю, что ограничение составляет до 64 символов, но допустимы ли все символы? Цифры?
Например. допустимы .
? Является ли IP-адрес (x.x.x.x) действительной последовательностью для определения ASN?
Разрешено ли доменное имя?
Ответы
Ответ 1
Общий атрибут имени в Distinguished Name кодируется как:
X520CommonName ::= CHOICE {
teletexString TeletexString (SIZE (1..ub-common-name)),
printableString PrintableString (SIZE (1..ub-common-name)),
universalString UniversalString (SIZE (1..ub-common-name)),
utf8String UTF8String (SIZE (1..ub-common-name)),
bmpString BMPString (SIZE (1..ub-common-name)) }
где ub-common-name
равно 64. Последние три кодирования позволяют использовать все Unicode коды (используя UTF-16 для кода точки за пределами 0xFFFF с bmpString
); UTF-8 является предпочтительным кодированием (по крайней мере, как утверждают стандарты).
Что касается X.509 (см. RFC 5280), содержимое элементов DN не имеет значения, кроме сравнений с равенством; что означает, что вы можете поместить любую последовательность символов, которые вы хотите, до тех пор, пока вы делаете это последовательно. RFC 5280 требует нечувствительности к регистру для кодированных элементов UTF-8, и это нелегко в общем контексте Unicode: см. Раздел 7.1, который ссылается на RFC 4518 и 3454. Кроме того, "общее имя" часто отображается пользователю (по крайней мере, в системах, использующих сертификаты X.509, которые имеют дисплей и физический пользователь), поэтому вы, вероятно, захотите использовать строку, которая имеет смысл или, по крайней мере, не слишком страшно для человека, и вы можете попытаться избежать нелатинских скриптов.
Включение имени DNS в атрибут "common name" является распространенной практикой для сертификатов сервера HTTPS: см. RFC 2818 (сертификаты сервера содержат имя сервера, которое клиент сопоставляет с именем сервера в URL-адресе, обычно для него предпочтительным является расширение имени темы Alt, но общее имя несколько более широко поддерживается клиентами).
Ответ 2
Если ваша основная проблема заключается в том, чтобы узнать, можете ли вы (или должны) поместить IP-адрес в имя общего имени субъекта, ответ не будет.
Это не относится к формату X.509, а относится к спецификациям, которые говорят, как интерпретировать то, что они читают.
Когда дело доходит до HTTPS, RFC 2818 говорит следующее о IP-адресах:
В некоторых случаях URI указывается как IP-адрес, а не Имя хоста. В этом случае iPAddress
subjectAltName
должен быть присутствовать в сертификате и точно соответствовать IP в URI.
Это означает, что CN не должен использоваться вообще для IP-адреса и что тип записи SAN должен быть по IP-адресу, а не DNS. (Некоторые браузеры не будут реализовывать это полностью, поэтому они могут быть более терпимыми. Верификатор имени хоста Java по умолчанию будет строгим.)
Рекомендации по проверке подлинности сертификата теперь также определены в RFC 6125, но он считает IP-адреса вне сферы видимости (стоит прочитать этот раздел для аргументов против использования IP-адресов там).
Если вы переходите к отрывкам RFC относительно других протоколов, некоторые из них имеют аналогичные ограничения в отношении IP-адресов (например, LDAP).
Ответ 3
В то время как приведенные выше ответы охватывают то, что вы обычно найдете там, не забывайте, что, поскольку это X.509, вы можете на самом деле положить что угодно. В приведенном ниже сертификате используется 0.9.2342.19200300.100.1.5, который является "любимым напитком" (см. http://www.alvestrand.no/objectid/0.9.2342.19200300.100.1.5.html). Openssl понимает это, поэтому общее имя отображается как CN=example.com/[email protected]/favouriteDrink=tequila. Есть много других полей, которые можно поместить в общее имя сертификата.
Вы можете использовать openssl x509 -text, чтобы убедиться, что сертификат отображается, как я описал.
-----BEGIN CERTIFICATE-----
MIIDOzCCAiOgAwIBAgIBCzANBgkqhkiG9w0BAQUFADCBqzEmMCQGA1UEAxMdV2Vz
dHBvaW50IENlcnRpZmljYXRlIFRlc3QgQ0ExEzARBgNVBAgTCkxhbmNhc2hpcmUx
CzAJBgNVBAYTAlVLMR0wGwYJKoZIhvcNAQkBFg5jYUBleGFtcGxlLmNvbTFAMD4G
A1UEChM3V2VzdHBvaW50IENlcnRpZmljYXRlIFRlc3QgUm9vdCBDZXJ0aWZpY2F0
aW9uIEF1dGhvcml0eTAeFw0xMTA3MzEyMTAxMTdaFw0yMTA3MjgyMTAxMTdaMFAx
FDASBgNVBAMTC2V4YW1wbGUuY29tMR8wHQYJKoZIhvcNAQkBFhB0ZXN0QGV4YW1w
bGUuY29tMRcwFQYKCZImiZPyLGQBBRMHdGVxdWlsYTCBnzANBgkqhkiG9w0BAQEF
AAOBjQAwgYkCgYEAuCqI3aNbSkRpA9VuGOmeVQ010Oaawsz4tcW2FQChJDOv6PuT
ucy5IijvaVewotDjnuVzPpBVW5EmC8Qapradomhb6FtFPyH/hGSnhLtht3Ln6stJ
ZkAjvr/wjWDy+3Gy/P5r5weUNWVm2AaQgk2xumx49EIXyzwOEHAhqTE7iEECAwEA
AaNIMEYwCQYDVR0TBAIwADA5BggrBgEFBQcBAQQtMCswKQYIKwYBBQUHMAGGHWh0
dHA6Ly9vY3NwLmV4YW1wbGUuY29tOjg4ODgvMA0GCSqGSIb3DQEBBQUAA4IBAQBL
oz035PphO4yUx7FJVaZjxLgTM4wLrcn2ONGm015/ECO+1Uxj3hWb6/EIDDKV/4e8
x0HDF69zyawYLD1th5tBcZLkV/Dat/Tzkt3boLOCGo2I1P+yjqxlb7BZCk7PEs3+
zjWF2hMcXtAwOIrsRuvXp4eTGwigKLAt/H02US/fa2dXFbOnz91V7oH8ZvynIl/n
hpELPzVWX/pBnHEGA9Bi0jviCKuvQisfaJ8XCiA73qH6CkSoZ2fClnrs+pJNj8i6
vtcMx8htn7FsyB3puVww86JSQ+VDKlQkFbPVla/4Aavzwz8djjVYEWwSgm+tw3jB
zUP/k5Aln5cXNo50KOip
-----END CERTIFICATE-----
Ответ 4
Какие строки допустимы в атрибуте "common name" в сертификате X.509?
Я не могу ответить на то, что там происходит, но я могу сказать вам, что там не происходит: имена серверов, такие как имена хостов (www.example.com), внутренние имена (например, www) и IP-адреса (например, 127.0.0.1 или 100.100.100.100).
Размещение имени DNS или имени сервера в Common Name (CN) устарело как на IETF, так и на CA/Browser Forums. Хотя он не рекомендуется, он в настоящее время не запрещен. CA/B важен, потому что, что браузеры следуют - браузеры не следуют IETF.
IETF отказался от практики в RFC 6125, раздел 2.3, в то время как CA/B устарел от практики в базовых требованиях, раздел 9.1.1.
Все имена серверов входят в альтернативное имя объекта (SAN). Размещение имен серверов в SAN требуется в соответствии с базовыми требованиями CA/B, раздел 9.2.1. IETF более прощает во время выпуска RFC 5280, но требует его во время проверки в соответствии с разделом 6.4.4 RFC 6125.