security - X.509 证书的 "common name"属性中允许使用哪些字符串?

标签 security x509 asn.1

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

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

最佳答案

可分辨名称中的通用名称属性编码为:

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代码点(对于超过 0xFFFF 的代码点使用 UTF-16 和 bmpString); UTF-8 是首选编码(至少标准是这么说的)。

就 X.509 而言(参见 RFC 5280 ),DN 元素的内容除了相等比较之外是不相关的;这意味着您可以输入任何您想要的字符序列,只要您始终如一地这样做即可。 RFC 5280 要求对 UTF-8 编码的名称元素进行不区分大小写的比较,这在 Unicode 的一般上下文中并不容易:请参阅第 7.1 节,其中链接到 RFC 45183454 。此外,“通用名称”经常向用户显示(至少在使用具有显示器和物理用户的 X.509 证书的系统上),因此您可能希望使用有意义或至少不太可怕的字符串对于人类,您可以尝试避免使用非拉丁脚本。

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

关于security - X.509 证书的 "common name"属性中允许使用哪些字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5136198/

相关文章:

apache - 如何避免浏览器在发送响应后呈现恶意内容

php - 只是检查 : abstain vote from Symfony AbstractVoter isGranted

sql - 如何确认 SQL 注入(inject)

go - ASN.1 Unmarshalling using go structs 给出标签不匹配错误

security - 使用 SSL 的基本身份验证是否足够安全?

php - 在 PHP、linux openssl 或其他任何工具上验证 x509 签名文本

C++:从 x509v3 证书中检索主题替代名称

c - X.509v3 ASN.1至C数据结构

gsm - TCAP GSM 消息的 ASN.1 解码

security - ASN.1 如何编码对象标识符?