OpenSSL копирование расширений из запроса в сертификат

Здравствуйте.

Пытаюсь создать сертификат в соответствии с требованиями Приказа Федеральной службы безопасности Российской Федерации от 27.12.2011 г. № 795 "Об утверждении Требований к форме квалифицированного сертификата ключа проверки электронной подписи" средствами OpenSSL.

Для этого в файле openssl.cnf задаю секцию расширений

req_extensions = v3_req

в секции v3_req добавляю "Политики сертификата" и "Средство электронной подписи владельца"

certificatePolicies = 1.2.643.100.113.1, 1.2.643.100.113.2
1.2.643.100.111 = ASN1:UTF8String:OpenSSL 1.0.2g

формирую запрос на сертификат

openssl req -new -key private.pem -out request.pem

Если просмотреть сформированный запрос при помощи команды

openssl asn1parse -in request.pem

то видно, что необходимые расширения присутствуют в запросе

    0:d=0  hl=4 l= 443 cons: SEQUENCE
    4:d=1  hl=4 l= 360 cons: SEQUENCE
    8:d=2  hl=2 l=   1 prim: INTEGER           :00
   11:d=2  hl=3 l= 159 cons: SEQUENCE
   14:d=3  hl=2 l=  11 cons: SET
   16:d=4  hl=2 l=   9 cons: SEQUENCE
   18:d=5  hl=2 l=   3 prim: OBJECT            :countryName
   23:d=5  hl=2 l=   2 prim: PRINTABLESTRING   :RU
   27:d=3  hl=2 l=  15 cons: SET
   29:d=4  hl=2 l=  13 cons: SEQUENCE
   31:d=5  hl=2 l=   3 prim: OBJECT            :stateOrProvinceName
   36:d=5  hl=2 l=   6 prim: UTF8STRING        :Moscow
   44:d=3  hl=2 l=  15 cons: SET
   46:d=4  hl=2 l=  13 cons: SEQUENCE
   48:d=5  hl=2 l=   3 prim: OBJECT            :localityName
   53:d=5  hl=2 l=   6 prim: UTF8STRING        :Moscow
   61:d=3  hl=2 l=  33 cons: SET
   63:d=4  hl=2 l=  31 cons: SEQUENCE
   65:d=5  hl=2 l=   3 prim: OBJECT            :organizationName
   70:d=5  hl=2 l=  24 prim: UTF8STRING        :Internet Widgits Pty Ltd
   96:d=3  hl=2 l=  32 cons: SET
   98:d=4  hl=2 l=  30 cons: SEQUENCE
  100:d=5  hl=2 l=   3 prim: OBJECT            :organizationalUnitName
  105:d=5  hl=2 l=  23 prim: UTF8STRING        :Certification Authority
  130:d=3  hl=2 l=  13 cons: SET
  132:d=4  hl=2 l=  11 cons: SEQUENCE
  134:d=5  hl=2 l=   3 prim: OBJECT            :commonName
  139:d=5  hl=2 l=   4 prim: UTF8STRING        :TEST
  145:d=3  hl=2 l=  26 cons: SET
  147:d=4  hl=2 l=  24 cons: SEQUENCE
  149:d=5  hl=2 l=   9 prim: OBJECT            :emailAddress
  160:d=5  hl=2 l=  11 prim: IA5STRING         :ca@test.com
  173:d=2  hl=2 l=  99 cons: SEQUENCE
  175:d=3  hl=2 l=  28 cons: SEQUENCE
  177:d=4  hl=2 l=   6 prim: OBJECT            :GOST R 34.10-2001
  185:d=4  hl=2 l=  18 cons: SEQUENCE
  187:d=5  hl=2 l=   7 prim: OBJECT            :id-GostR3410-2001-CryptoPro-A-ParamSet
  196:d=5  hl=2 l=   7 prim: OBJECT            :id-GostR3411-94-CryptoProParamSet
  205:d=3  hl=2 l=  67 prim: BIT STRING
  274:d=2  hl=2 l=  92 cons: cont [ 0 ]
  276:d=3  hl=2 l=  90 cons: SEQUENCE
  278:d=4  hl=2 l=   9 prim: OBJECT            :Extension Request
  289:d=4  hl=2 l=  77 cons: SET
  291:d=5  hl=2 l=  75 cons: SEQUENCE
  293:d=6  hl=2 l=   9 cons: SEQUENCE
  295:d=7  hl=2 l=   3 prim: OBJECT            :X509v3 Basic Constraints
  300:d=7  hl=2 l=   2 prim: OCTET STRING      [HEX DUMP]:3000
  304:d=6  hl=2 l=  11 cons: SEQUENCE
  306:d=7  hl=2 l=   3 prim: OBJECT            :X509v3 Key Usage
  311:d=7  hl=2 l=   4 prim: OCTET STRING      [HEX DUMP]:030205E0
  317:d=6  hl=2 l=  29 cons: SEQUENCE
  319:d=7  hl=2 l=   3 prim: OBJECT            :X509v3 Certificate Policies
  324:d=7  hl=2 l=  22 prim: OCTET STRING      [HEX DUMP]:3014300806062A8503647101300806062A8503647102
  348:d=6  hl=2 l=  18 cons: SEQUENCE
  350:d=7  hl=2 l=   5 prim: OBJECT            :1.2.643.100.111
  357:d=7  hl=2 l=   9 prim: OCTET STRING      [HEX DUMP]:0C074F70656E53534C
  368:d=1  hl=2 l=  10 cons: SEQUENCE
  370:d=2  hl=2 l=   6 prim: OBJECT            :GOST R 34.11-94 with GOST R 34.10-2001
  378:d=2  hl=2 l=   0 prim: NULL
  380:d=1  hl=2 l=  65 prim: BIT STRING

Однако, если на основании этого запроса создать самоподписанный сертификат командой

openssl x509 -req -in request.pem -signkey private.pem -days 365 -out test.crt

то в полученном сертификате расширения уже отсутствуют

    0:d=0  hl=4 l= 563 cons: SEQUENCE
    4:d=1  hl=4 l= 480 cons: SEQUENCE
    8:d=2  hl=2 l=   9 prim: INTEGER           :BCE0124974A43C3D
   19:d=2  hl=2 l=  10 cons: SEQUENCE
   21:d=3  hl=2 l=   6 prim: OBJECT            :GOST R 34.11-94 with GOST R 34.10-2001
   29:d=3  hl=2 l=   0 prim: NULL
   31:d=2  hl=3 l= 159 cons: SEQUENCE
   34:d=3  hl=2 l=  11 cons: SET
   36:d=4  hl=2 l=   9 cons: SEQUENCE
   38:d=5  hl=2 l=   3 prim: OBJECT            :countryName
   43:d=5  hl=2 l=   2 prim: PRINTABLESTRING   :RU
   47:d=3  hl=2 l=  15 cons: SET
   49:d=4  hl=2 l=  13 cons: SEQUENCE
   51:d=5  hl=2 l=   3 prim: OBJECT            :stateOrProvinceName
   56:d=5  hl=2 l=   6 prim: UTF8STRING        :Moscow
   64:d=3  hl=2 l=  15 cons: SET
   66:d=4  hl=2 l=  13 cons: SEQUENCE
   68:d=5  hl=2 l=   3 prim: OBJECT            :localityName
   73:d=5  hl=2 l=   6 prim: UTF8STRING        :Moscow
   81:d=3  hl=2 l=  33 cons: SET
   83:d=4  hl=2 l=  31 cons: SEQUENCE
   85:d=5  hl=2 l=   3 prim: OBJECT            :organizationName
   90:d=5  hl=2 l=  24 prim: UTF8STRING        :Internet Widgits Pty Ltd
  116:d=3  hl=2 l=  32 cons: SET
  118:d=4  hl=2 l=  30 cons: SEQUENCE
  120:d=5  hl=2 l=   3 prim: OBJECT            :organizationalUnitName
  125:d=5  hl=2 l=  23 prim: UTF8STRING        :Certification Authority
  150:d=3  hl=2 l=  13 cons: SET
  152:d=4  hl=2 l=  11 cons: SEQUENCE
  154:d=5  hl=2 l=   3 prim: OBJECT            :commonName
  159:d=5  hl=2 l=   4 prim: UTF8STRING        :TEST
  165:d=3  hl=2 l=  26 cons: SET
  167:d=4  hl=2 l=  24 cons: SEQUENCE
  169:d=5  hl=2 l=   9 prim: OBJECT            :emailAddress
  180:d=5  hl=2 l=  11 prim: IA5STRING         :ca@test.com
  193:d=2  hl=2 l=  30 cons: SEQUENCE
  195:d=3  hl=2 l=  13 prim: UTCTIME           :180724052352Z
  210:d=3  hl=2 l=  13 prim: UTCTIME           :190724052352Z
  225:d=2  hl=3 l= 159 cons: SEQUENCE
  228:d=3  hl=2 l=  11 cons: SET
  230:d=4  hl=2 l=   9 cons: SEQUENCE
  232:d=5  hl=2 l=   3 prim: OBJECT            :countryName
  237:d=5  hl=2 l=   2 prim: PRINTABLESTRING   :RU
  241:d=3  hl=2 l=  15 cons: SET
  243:d=4  hl=2 l=  13 cons: SEQUENCE
  245:d=5  hl=2 l=   3 prim: OBJECT            :stateOrProvinceName
  250:d=5  hl=2 l=   6 prim: UTF8STRING        :Moscow
  258:d=3  hl=2 l=  15 cons: SET
  260:d=4  hl=2 l=  13 cons: SEQUENCE
  262:d=5  hl=2 l=   3 prim: OBJECT            :localityName
  267:d=5  hl=2 l=   6 prim: UTF8STRING        :Moscow
  275:d=3  hl=2 l=  33 cons: SET
  277:d=4  hl=2 l=  31 cons: SEQUENCE
  279:d=5  hl=2 l=   3 prim: OBJECT            :organizationName
  284:d=5  hl=2 l=  24 prim: UTF8STRING        :Internet Widgits Pty Ltd
  310:d=3  hl=2 l=  32 cons: SET
  312:d=4  hl=2 l=  30 cons: SEQUENCE
  314:d=5  hl=2 l=   3 prim: OBJECT            :organizationalUnitName
  319:d=5  hl=2 l=  23 prim: UTF8STRING        :Certification Authority
  344:d=3  hl=2 l=  13 cons: SET
  346:d=4  hl=2 l=  11 cons: SEQUENCE
  348:d=5  hl=2 l=   3 prim: OBJECT            :commonName
  353:d=5  hl=2 l=   4 prim: UTF8STRING        :TEST
  359:d=3  hl=2 l=  26 cons: SET
  361:d=4  hl=2 l=  24 cons: SEQUENCE
  363:d=5  hl=2 l=   9 prim: OBJECT            :emailAddress
  374:d=5  hl=2 l=  11 prim: IA5STRING         :ca@test.com
  387:d=2  hl=2 l=  99 cons: SEQUENCE
  389:d=3  hl=2 l=  28 cons: SEQUENCE
  391:d=4  hl=2 l=   6 prim: OBJECT            :GOST R 34.10-2001
  399:d=4  hl=2 l=  18 cons: SEQUENCE
  401:d=5  hl=2 l=   7 prim: OBJECT            :id-GostR3410-2001-CryptoPro-A-ParamSet
  410:d=5  hl=2 l=   7 prim: OBJECT            :id-GostR3411-94-CryptoProParamSet
  419:d=3  hl=2 l=  67 prim: BIT STRING
  488:d=1  hl=2 l=  10 cons: SEQUENCE
  490:d=2  hl=2 l=   6 prim: OBJECT            :GOST R 34.11-94 with GOST R 34.10-2001
  498:d=2  hl=2 l=   0 prim: NULL
  500:d=1  hl=2 l=  65 prim: BIT STRING

Что еще необходимо указать в конфигурационном файле OpenSSL чтобы в сертификат копировались расширения из запроса?

Re: OpenSSL копирование расширений из запроса в сертификат

Здравствуйте,

надо или в секции [req] задать x509_extensions = v3_req

[req]
# The extensions to add to a certificate request
req_extensions = v3_req
# Extension to add when the -x509 option is used.
x509_extensions = v3_req

или при вызове команды x509 добавить аргумент -extensions v3_req

openssl x509 -req -in request.pem -signkey private.pem -days 365 -out test.crt -extensions v3_req

Re: OpenSSL копирование расширений из запроса в сертификат

Павел Анфимов, спасибо.
Подскажите еще, пожалуйста. В сертификатах встречаю такое поле как "Сведения о шаблоне сертификата". К сожалению, не нашел описания этого поля и в приказе о нем тоже ничего не говорится. Для чего оно используется и какова его структура?

Re: OpenSSL копирование расширений из запроса в сертификат

Шаблон сертификата (szOID_CERTIFICATE_TEMPLATE, 1.3.6.1.4.1.311.21.7) - необязательное расширение сертификата, придуманное Microsoft. Содержит список ограничений использования сертификата и объектных идентификаторов областей использования ключа проверки электронной подписи
(OID), которые могут быть включены в создаваемые УЦ сертификаты.

Формат расширения