使用OpenSSL生成和签名自定义主题字段的证书

5

我需要创建并签署(我是CA)带有自定义主题(, SERIALNUMBER=...)的证书。

目前,我已经修改了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”。

谢谢, Beef


1
据我所知,证书中从不存储字段名称("SERIALNUMBER"),只存储 OID(1.2.3.4.1333)。 - J-16 SDiZ
那么我的电脑怎么知道某个数字表示的是 SERIALNUMBER(据我所知,这是一个非标准字段)呢? - 0xDEAD BEEF
好的!你是对的!谢谢!我想知道如何找到这些值。我已经发现2.5.4.5代表序列号。现在要找“G”。 - 0xDEAD BEEF
3
您可以在这里找到列表:http://www.alvestrand.no/objectid/top.html,例如2.5.4.5是http://www.alvestrand.no/objectid/2.5.4.5.html。另一个目录位于http://www.oid-info.com/get/2.5.4.5。 - J-16 SDiZ
我遇到了一个瑞典系统,其中x509序列号主题DN字段被用来存储社会安全号码。我能够使用以下命令生成客户端测试证书请求:openssl genrsa -out client.key 1024 && openssl req -new -key client.key -out client.csr -subj "/serialNumber=1234567890"。 - Mikko Ohtamaa
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 --  }

所以主题是一个名称,这被定义为

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 2253RFC 1779)。
但是,默认情况下OpenSSL不知道'SERIALNUMBER',实际上,您自己正在向new_oids添加它。因此,OpenSSL不知道如何表示'SERIALNUMBER',除了打印OID本身。但是,任何其他已知'SERIALNUMBER'的软件(我记得Windows/IE是)都将正确显示其作为'SERIALNUMBER'的值。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接