37

在 X509 证书的 DN 的通用名称字段中,如 OID“2.5.4.3”的 ASN.1 表示法中定义的那样,允许的值是多少?

我知道限制最多为 64 个字符,但是否允许所有字符?数字?
例如,是否.允许?根据 ASN 定义,IP 地址 (xxxx) 是否是有效序列?
是否允许使用域名?

4

4 回答 4

60

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

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 证书的系统上),因此您可能希望使用有意义或至少不太可怕的字符串对于人类,您可以尝试避免使用非拉丁文字。

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

于 2011-02-28T13:25:22.357 回答
7

如果您的主要问题是知道您是否可以(或应该)将 IP 地址放入主题 DN 的公用名中,答案是否定的。

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

谈到 HTTPS,RFC 2818对 IP 地址做了以下说明:

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

这意味着 CN 根本不应该用于 IP 地址,并且 SAN 条目类型必须是 IP 地址,而不是 DNS。(某些浏览器不会完全实现这一点,因此它们可能更宽容。Java 默认主机名验证器将是严格的。)

证书身份验证的最佳实践现在也在RFC 6125中定义,但它认为IP 地址超出了范围(值得阅读本节以了解反对在那里使用 IP 地址的论点)。如果您浏览有关其他协议的 RFC 摘录,一些关于 IP 地址的限制(例如 LDAP)有类似的限制。

于 2012-07-29T16:05:09.793 回答
6

虽然上面的答案涵盖了您通常会在那里找到的内容,但不要忘记因为这是 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-----
于 2014-05-24T17:02:03.563 回答
6

X.509 证书的“公用名”属性中允许使用哪些字符串?

我无法真正回答里面有什么,但我可以告诉你里面没有什么:服务器名称,如主机名(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 中。IETF 在使用 RFC 5280 发布期间更加宽容,但在 RFC 6125 的第 6.4.4 节下的验证期间要求它。

于 2015-02-11T21:51:34.883 回答