【问题标题】:OpenSSL generate and sign certificate with custom subject fieldsOpenSSL 使用自定义主题字段生成和签署证书
【发布时间】:2011-06-28 07:34:54
【问题描述】:

我需要使用自定义主题 (, 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”。

谢谢你, 牛肉

【问题讨论】:

  • AFAIK,证书 *never* 存储字段名称(“SERIALNUMBER”),仅存储 oid(1.2.3.4.1333)。
  • 那我的电脑怎么知道,某个数字意味着 SERIALNUMBER(这是非标准字段,我不明白)。
  • 好的!你是对的!谢谢你!我想知道如何找到这些值。我发现 2.5.4.5 用于序列号。现在必须寻找“G”。
  • 你可以在这里找到列表 alvestrand.no/objectid/top.html ,例如 2.5.4.5 是 alvestrand.no/objectid/2.5.4.5.html 。另一个目录位于oid-info.com/get/2.5.4.5
  • 我遇到的瑞典系统是x509 serialNumber 主题DN字段用于存储社会安全号码。我能够生成客户端测试证书请求: openssl genrsa -out client.key 1024 && openssl req -new -key client.key -out client.csr -subj "/serialNumber=1234567890"

标签: certificate openssl pki x509 asn.1


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-04
    • 1970-01-01
    相关资源
    最近更新 更多