我需要使用自定义主题(,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'。
谢谢你, 牛肉
答案 0 :(得分:4)
实际上根本没有错误。存储在证书主题中的内容是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& #34;," OU"," CN"等等(参见RFC 2253或RFC 1779)。
但是' SERIALNUMBER'默认情况下OpenSSL是未知的,事实上,您自己将其添加到new_oids
。因此,OpenSSL不知道如何表示' SERIALNUMBER'除了打印OID本身。但任何其他知道' SERIALNUMBER' (IIRC Windows / IE是)将正确显示为' SERIALNUMBER'。