我需要使用自定义主题(,SERIALNUMBER = ...,)创建并签名(我是CA)证书。

到目前为止,我已经修改了openssl配置文件,因此可以在subject中包含自定义字段。

[ new_oids ]
SERIALNUMBER = 1.2.3.4.1333


问题是,在签署此类证书后,新字段会以该奇怪的数字格式显示-

C = FI
O = Maahanmuuttovirasto
1.2.3.4.1333 = 00REINIS00


我应该在哪里和我的openssl配置文件中进行哪些更改,以生成具有正常字段名称的证书?我如何告诉签名过程1.2.3.4.1333应该被编码为“ SERIALNUMBER”。

谢谢,
牛肉

最佳答案

实际上,这根本没有错误。存储在证书主题中的是一个DistinguishedName。 cf. 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。取决于应用程序将这些oid解释为有意义的东西,并且大多数应用程序都知道并使用字符串来表示许多常见的oid,例如“ C”,“ O”,“ OU”,“ CN”等。 (请参阅RFC 2253RFC 1779)。

但是默认情况下,OpenSSL默认不知道“ SERIALNUMBER”,实际上,您是将其添加到您自己的new_oids中。因此,除了打印OID本身外,OpenSSL不知道如何表示“ SERIALNUMBER”。但是,任何其他知道“ SERIALNUMBER”(IIRC Windows / IE都是)的软件都可以正确显示为“ SERIALNUMBER”的值。

09-26 20:51