我正在做一个项目,我们使用通用名称作为证书的基本标识符。但是,导入没有公用名的证书会失败。
使用数字证书的默认方式是什么?我们应该选择哪个标识符才能导入它们?
我正在做一个项目,我们使用通用名称作为证书的基本标识符。但是,导入没有公用名的证书会失败。
使用数字证书的默认方式是什么?我们应该选择哪个标识符才能导入它们?
就X.509而言,通用名称不是强制性的。但是,许多系统将 CN 用于显示目的,例如 Windows 中的大多数“证书管理器”GUI。因此,如果只是为了简化系统管理员任务,建议在证书中包含相当精确的 CN。
如果您想从应用程序中查明特定证书,那么要使用的良好标识符是“指纹”,它实际上是证书的哈希值。只要哈希函数是抗冲突的(Microsoft 使用 SHA-1,它在这方面仍然非常强大),没有两个不同的证书会显示相同的指纹。
引用特定证书的“标准 X.509”方法是使用对issuerDN + serial number。只有这两个值的组合(据说)是唯一的;单独的序列号不会削减它。请注意,我说的是发行人的名称,而不是主题的;这是整个 DN,而不仅仅是它的 CN 部分。issuerDN
此外,如果证书还包含Issuer Alt Name
具有完整 DN 的扩展名,则允许证书为空。这意味着正确使用发行者+序列对可能有些复杂。指纹更容易。
在 HTTPS 协议的情况下,一些客户端应用程序也可以使用Common Name来验证服务器的身份。RFC 2818对服务器的身份进行了如下说明:
如果存在 dNSName 类型的 subjectAltName 扩展,则必须将其用作身份。否则,必须使用证书主题字段中的(最具体的)通用名称字段。尽管使用通用名称是现有的做法,但它已被弃用,并且鼓励证书颁发机构使用 dNSName 代替。
这意味着,在 HTTPS 协议的情况下,服务器应该使用subjectAltName作为标识符的主要来源,并支持Common Name以实现向后兼容性。