在X509证书的DN的公用名字段中,如OID“2.5.4.3”的ASN.1表示法中所定义,允许的值是什么?
我知道限制最多为64个字符,但是所有字符都允许吗?数字?
例如。允许.
? IP地址(x.x.x.x)是否符合ASN定义的有效序列?
是否允许域名?
答案 0 :(得分:52)
可分辨名称中的公共名称属性编码为:
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名称是HTTPS服务器证书的常见做法:请参阅RFC 2818(服务器证书包含服务器名称,客户端与URL中的服务器名称匹配;通常,主题Alt Name扩展名是首选,但客户端更广泛地支持通用名称。
答案 1 :(得分:6)
如果你的主要问题是要知道你是否可以(或应该)在主题DN的公共名称中放置一个IP地址,答案是否定的。
这与X.509格式无关,而是与说明如何解释其内容的规范无关。
对于HTTPS,RFC 2818说明了以下有关IP地址的信息:
在某些情况下,URI被指定为IP地址而不是a 主机名。在这种情况下,
iPAddress
subjectAltName
必须是 出现在证书中,并且必须与URI中的IP完全匹配。
这意味着CN根本不应该用于IP地址,并且SAN条目类型必须是IP地址,而不是DNS。 (有些浏览器不会完全实现它,所以它们可能更宽容.Java默认主机名验证器将是严格的。)
证书身份验证的最佳做法现在也在RFC 6125中定义,但它考虑IP addresses out of scope(有关在此处使用IP地址的论据,请阅读本节)。 如果您浏览excerpts of RFCs regarding other protocols,则有些人会对IP地址(例如LDAP)有类似的限制。
答案 2 :(得分:5)
虽然上面的答案涵盖了你通常会在那里找到的内容,但不要忘记,因为这是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/emailAddress=test@example.com/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-----
答案 3 :(得分:4)
X.509证书中“common name”属性允许使用哪些字符串?
我无法回答那里发生的事情,但我可以告诉你不的内容:服务器名称,如主机名(www.example.com),内部名称(如www)和IP地址(如127.0.0.1或100.100.100.100)。
IETF和CA /浏览器论坛不推荐在公用名(CN)中放置DNS名称或服务器名称。虽然已被弃用,但目前尚未被禁止。 CA / B很重要,因为浏览器遵循的是 - 浏览器不跟随IETF。
IETF弃用了RFC 6125第2.3节中的做法,而CA / B则弃用了基准要求第9.1.1节中的做法。
所有服务器名称都在主题备用名称(SAN)中。 CA / B基准要求,第9.2.1节要求在SAN中放置服务器名称。在使用RFC 5280发布时,IETF更宽容,但在RFC 6125第6.4.4节的验证期间需要它。