实际上这并不是错误。存储在证书主题中的是一个DistinguishedName,详见RFC 5280。
TBSCertificate ::= SEQUENCE {
version [0] Version DEFAULT v1,
serialNumber CertificateSerialNumber,
signature AlgorithmIdentifier,
issuer Name,
validity Validity,
subject Name,
subjectPublicKeyInfo SubjectPublicKeyInfo,
issuerUniqueID [1] IMPLICIT UniqueIdentifier OPTIONAL,
subjectUniqueID [2] IMPLICIT UniqueIdentifier OPTIONAL,
extensions [3] Extensions OPTIONAL
所以主题是一个名称
,这被定义为
Name ::= CHOICE { -- only one possibility for now --
rdnSequence RDNSequence }
RDNSequence ::= SEQUENCE OF RelativeDistinguishedName
RelativeDistinguishedName ::= SET SIZE (1..MAX) OF AttributeTypeAndValue
AttributeTypeAndValue ::= SEQUENCE {
type AttributeType,
value AttributeValue }
AttributeType ::= OBJECT IDENTIFIER
AttributeValue ::= ANY -- DEFINED BY AttributeType
因此,正如您所看到的,主题由一系列RelativeDistingsuishedNames组成,每个RDN都表示一个oid加上分配的值的对。这意味着在您的证书中将不会存储'SERIALNUMBER',而只有oid 1.2.3.4.1333的值。应用程序可以将这些oid解释为某些有意义的内容,并且大多数应用程序都知道并将使用字符串表示一些常见的oid,例如“C”、“O”、“OU”、“CN”等(参见
RFC 2253或
RFC 1779)。
但是,默认情况下OpenSSL不知道'SERIALNUMBER',实际上,您自己正在向new_oids添加它。因此,OpenSSL不知道如何表示'SERIALNUMBER',除了打印OID本身。但是,任何其他已知'SERIALNUMBER'的软件(我记得Windows/IE是)都将正确显示其作为'SERIALNUMBER'的值。