在 X509 证书的 DN 的通用名称字段中,如 OID“2.5.4.3”的 ASN.1 表示法中定义的那样,允许的值是多少?
我知道限制最多为 64 个字符,但是否允许所有字符?数字?
例如,是否.
允许?根据 ASN 定义,IP 地址 (xxxx) 是否是有效序列?
是否允许使用域名?
专有名称中的通用名称属性编码为:
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 中的服务器名称匹配;通常,主题替代名称扩展是首选,但通用名称在某种程度上受到客户更广泛的支持)。
如果您的主要问题是知道您是否可以(或应该)将 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)有类似的限制。
虽然上面的答案涵盖了您通常会在那里找到的内容,但不要忘记因为这是 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-----
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 节下的验证期间要求它。