OpenSSL генерирует и подписывает сертификат с пользовательскими полями - PullRequest
4 голосов
/ 28 июня 2011

Мне нужно создать и подписать (я 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».

Спасибо, Говядина

1 Ответ

4 голосов
/ 09 июля 2011

Это на самом деле не ошибка вообще.То, что хранится в теме сертификата, является 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.Приложения должны интерпретировать эти oids как нечто осмысленное, и существует ряд распространенных oids, которые большинство приложений знают и будут представлять с использованием строки, таких как «C», «O», «OU», «CN» и т. Д.(ср. RFC 2253 или RFC 1779 ).

Но 'SERIALNUMBER' неизвестен OpenSSL по умолчанию, фактически вы добавляете его в new_oids самостоятельно.В связи с этим OpenSSL не знает, как представлять «SERIALNUMBER», кроме как путем печати самого OID.Но любое другое программное обеспечение, которое знает о «SERIALNUMBER» (IIRC Windows / IE is), будет правильно отображать его как значение «SERIALNUMBER».

...