5

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

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

[ 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”。

谢谢你,牛肉

4

1 回答 1

5

这实际上根本没有错误。存储在证书主题中的是 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 --  }

所以主题是 a 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”的值。

于 2011-07-09T17:53:12.563 回答