2011-02-27 241 views
29

通用名称 X509证书的DN字段,如OID为“2.5.4.3”的ASN.1表示法中所定义的,允许的值是什么?X.509证书中“公用名称”属性允许使用哪些字符串?

我知道限制是多达64个字符,但都是允许的字符?数字?
例如是否允许.?每个ASN定义的IP地址(x.x.x.x)是否有效?
是否允许使用域名?

+2

该标准允许通用名称中的任何字符串。字符串的含义取决于其解释。 – 2011-02-28 03:14:04

+1

@GregS:所以如果是这样的话,为什么这是一个评论,而不是一个答案? – Cratylus 2011-02-28 08:17:13

+0

@GregS:你在回答哪个标准?因为我对在ASN表示法中声明的类型感兴趣 – Cratylus 2011-02-28 08:19:45

回答

46

的专有名称的通用名称属性编码为:

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 45183454。此外,“常用名”通常会显示给用户(至少在使用X.509证书的系统上有显示器和实际用户),所以您可能希望使用一个有意义或至少不太可怕的字符串对于一个人来说,你可以尝试避免非拉丁脚本。

将HTTPS服务器证书的常用做法是在“公用名称”属性中添加DNS名称:请参阅RFC 2818(服务器证书包含服务器名称,客户端与URL中的服务器名称匹配;通常,主题替代名称扩展名首选,但通用名称得到了客户端的广泛支持)。

+0

非常全面和很好的参考答案。 – 2011-05-25 17:05:56

+0

这回答了我长久以来一直在问的问题,而且根本没有找到答案。对RFC的引用特别有用。 – 2012-04-24 22:22:06

+0

任何人都可以使用通用名称以外的DNS名称提供指向网站的链接吗? (因此网站名称必须在SAN中) – 2017-10-06 14:40:10

6

如果您的主要问题是要知道您是否可以(或应该)在主题DN的通用名称中输入IP地址,则答案为否。

这与X.509格式无关,而是与说明如何解释他们阅读的规格有关。

当涉及到HTTPS,RFC 2818说以下有关IP地址:

在某些情况下,URI被指定为IP地址,而不是一个 主机名。在这种情况下,iPAddresssubjectAltName必须在证书中出现 ,并且必须与URI中的IP完全匹配。

这意味着CN不应该用于IP地址,并且SAN条目类型必须是IP地址,而不是DNS。 (有些浏览器,将无法完全实现这一点,所以他们可能会更宽容。Java的默认主机名验证将以严格的。)证书身份认证

最佳做法现在也在RFC 6125定义,但它认为IP addresses out of scope (有必要阅读本部分中有关使用IP地址的论点)。 如果您通过excerpts of RFCs regarding other protocols,有些IP地址有类似的限制(例如LDAP)。

+0

DNS对SAN扩展有效。 – TravisThomas 2017-03-29 20:10:30

+0

@TravisThomas确实(在'dNSName'扩展名中)。只是为了澄清,我正在专门处理有关IP地址问题的部分内容(因为其他答案已经存在)。 – Bruno 2017-03-30 08:34:41

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/[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----- 
+0

由于证书错误,无法加载到该站点的链接。 – 2017-10-06 14:51:24

3

什么字符串中的“通用名”的X.509证书属性被允许?

我真的不能回答在那里发生的事情,但我可以告诉你什么呢进去:服务器名称,如主机名(www.example.com),内部名称(如www)和IP地址(如127.0.0.1或100.100.100.100)。

在通用名称(CN)中放置DNS名称或服务器名称已由IETF和CA /浏览器论坛弃用。尽管已弃用,但目前并未禁止。 CA/B很重要,因为这是浏览器遵循的 - 浏览器按照IETF做的而不是

IETF弃用了RFC 6125第2.3节的做法,而CA/B弃用了基准要求第9.1.1节中的做法。

所有的服务器名称都在主题备用名称(SAN)中。将服务器名称放入SAN是CA/B基准要求第9.2.1节要求的。 IETF在发布RFC 5280时更为宽容,但在RFC 6125第6.4.4节的验证过程中要求它。

+0

真棒回答!你能分享一个链接到任何没有在CN的DNS名称的网站吗? – 2017-10-06 14:49:25

+1

@JeffPuckett - 尝试Crypto ++网站(http://www.cryptopp.com)。 CN被完全省略。不过,我认为这是一种侥幸。我询问了*“Crypto ++”*的通用名称,但我认为处理发布的软件会过滤名称,因为某些脚本可能会将plus'es解释为正则表达式。 Derp ... – jww 2017-10-06 15:07:14

+0

谢谢你,太棒了!如果您碰巧遇到有价值或DNS名称以外的任何内容,请再次ping我。 – 2017-10-06 15:10:08