我需要使用自定义主题(,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 2253或RFC 1779)。
但是默认情况下,OpenSSL默认不知道“ SERIALNUMBER”,实际上,您是将其添加到您自己的
new_oids
中。因此,除了打印OID本身外,OpenSSL不知道如何表示“ SERIALNUMBER”。但是,任何其他知道“ SERIALNUMBER”(IIRC Windows / IE都是)的软件都可以正确显示为“ SERIALNUMBER”的值。