Это на самом деле не ошибка вообще.То, что хранится в теме сертификата, является 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,
-- If present, version MUST be v2 or v3
subjectUniqueID [2] IMPLICIT UniqueIdentifier OPTIONAL,
-- If present, version MUST be v2 or v3
extensions [3] Extensions OPTIONAL
-- If present, version MUST be v3 -- }
Таким образом, субъект является Name
, это определяется как
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, что каждыйпредставляют пару oid плюс присвоенное значение.Это означает, что нигде в вашем сертификате не будет храниться «SERIALNUMBER», а только значение oid, 1.2.3.4.1333.Приложения должны интерпретировать эти oids как нечто осмысленное, и существует ряд распространенных oids, которые большинство приложений знают и будут представлять с использованием строки, таких как «C», «O», «OU», «CN» и т. Д.(ср. RFC 2253 или RFC 1779 ).
Но 'SERIALNUMBER' неизвестен OpenSSL по умолчанию, фактически вы добавляете его в new_oids
самостоятельно.В связи с этим OpenSSL не знает, как представлять «SERIALNUMBER», кроме как путем печати самого OID.Но любое другое программное обеспечение, которое знает о «SERIALNUMBER» (IIRC Windows / IE is), будет правильно отображать его как значение «SERIALNUMBER».