Как проверить подписанный файл?

Как проверить подписанный файл?

Как проверить валидность файла с помощью openssl и cms?

У меня есть файл (foo.bin) и подпись (foo.bin.cms), которая включает сертификат формата x509 der.

есть ли способ проверить действительность файла с его сертификатом?

Я могу найти SHA256 foo.bin внутри foo.bin.cms.

Также можно открыть foo.bin.cms с помощью ASN1. Но не могу найти способ проверить файл с помощью команды openssl.

Для команды openssl cms verify требуется pub.key, который я не могу найти.

решение1

Для проверки CMS может потребоваться сертификат, но никогда не требуется открытый ключ как таковой. Существует множество вариаций формата CMS-SignedData (не говоря уже о других типах данных CMS), и вы не даете никаких подробностей, поэтому вот несколько основных случаев:

$ openssl genpkey -algorithm ec -pkeyopt ec_paramgen_curve:P-256 -out sf1132354.key
$ openssl req -new -key sf1132354.key -x509 -days 365 -subj '/CN=Vladimir Putin' -out sf1132354.crt
$ printf 'hello and goodbye\r\n' >sf1132354.in
$ openssl sha256 <sf1132354.in
(stdin)= dc86ba13ac17e82ea9f0e8239f809d0596449dc3b59626b6ebd6178f27178af4

Эти данные используются для всех случаев ниже. Обратите внимание, что я использовал окончание строки CRLF для данных; openssl cmsпо умолчанию применяется правило канонизации S/MIME, даже если оно использует CMS, а не S/MIME, поэтому окончания строк, отличные от CRLF, могут вызывать проблемы.

$ openssl cms -sign -in sf1132354.in -inkey sf1132354.key -signer sf1132354.crt -md sha256 -outform der -out sf1132354.dety
$ openssl asn1parse -i -inform der <sf1132354.dety
    0:d=0  hl=4 l= 839 cons: SEQUENCE
    4:d=1  hl=2 l=   9 prim:  OBJECT            :pkcs7-signedData
   15:d=1  hl=4 l= 824 cons:  cont [ 0 ]
   19:d=2  hl=4 l= 820 cons:   SEQUENCE
   23:d=3  hl=2 l=   1 prim:    INTEGER           :01
   26:d=3  hl=2 l=  13 cons:    SET
   28:d=4  hl=2 l=  11 cons:     SEQUENCE
   30:d=5  hl=2 l=   9 prim:      OBJECT            :sha256
   41:d=3  hl=2 l=  11 cons:    SEQUENCE
   43:d=4  hl=2 l=   9 prim:     OBJECT            :pkcs7-data
   54:d=3  hl=4 l= 395 cons:    cont [ 0 ]
   58:d=4  hl=4 l= 391 cons:     SEQUENCE
   62:d=5  hl=4 l= 301 cons:      SEQUENCE
   66:d=6  hl=2 l=   3 cons:       cont [ 0 ]
   68:d=7  hl=2 l=   1 prim:        INTEGER           :02
   71:d=6  hl=2 l=  20 prim:       INTEGER           :09D45914492F88F6E9812C905D2A0405C5769CCD
   93:d=6  hl=2 l=  10 cons:       SEQUENCE
   95:d=7  hl=2 l=   8 prim:        OBJECT            :ecdsa-with-SHA256
  105:d=6  hl=2 l=  25 cons:       SEQUENCE
  107:d=7  hl=2 l=  23 cons:        SET
  109:d=8  hl=2 l=  21 cons:         SEQUENCE
  111:d=9  hl=2 l=   3 prim:          OBJECT            :commonName
  116:d=9  hl=2 l=  14 prim:          UTF8STRING        :Vladimir Putin
  132:d=6  hl=2 l=  30 cons:       SEQUENCE
  134:d=7  hl=2 l=  13 prim:        UTCTIME           :230601075720Z
  149:d=7  hl=2 l=  13 prim:        UTCTIME           :240531075720Z
  164:d=6  hl=2 l=  25 cons:       SEQUENCE
  166:d=7  hl=2 l=  23 cons:        SET
  168:d=8  hl=2 l=  21 cons:         SEQUENCE
  170:d=9  hl=2 l=   3 prim:          OBJECT            :commonName
  175:d=9  hl=2 l=  14 prim:          UTF8STRING        :Vladimir Putin
  191:d=6  hl=2 l=  89 cons:       SEQUENCE
  193:d=7  hl=2 l=  19 cons:        SEQUENCE
  195:d=8  hl=2 l=   7 prim:         OBJECT            :id-ecPublicKey
  204:d=8  hl=2 l=   8 prim:         OBJECT            :prime256v1
  214:d=7  hl=2 l=  66 prim:        BIT STRING
  282:d=6  hl=2 l=  83 cons:       cont [ 3 ]
  284:d=7  hl=2 l=  81 cons:        SEQUENCE
  286:d=8  hl=2 l=  29 cons:         SEQUENCE
  288:d=9  hl=2 l=   3 prim:          OBJECT            :X509v3 Subject Key Identifier
  293:d=9  hl=2 l=  22 prim:          OCTET STRING      [HEX DUMP]:0414AFBF46DE3CED60E2A5BBEA461C187C4FBE4D4654
  317:d=8  hl=2 l=  31 cons:         SEQUENCE
  319:d=9  hl=2 l=   3 prim:          OBJECT            :X509v3 Authority Key Identifier
  324:d=9  hl=2 l=  24 prim:          OCTET STRING      [HEX DUMP]:30168014AFBF46DE3CED60E2A5BBEA461C187C4FBE4D4654
  350:d=8  hl=2 l=  15 cons:         SEQUENCE
  352:d=9  hl=2 l=   3 prim:          OBJECT            :X509v3 Basic Constraints
  357:d=9  hl=2 l=   1 prim:          BOOLEAN           :255
  360:d=9  hl=2 l=   5 prim:          OCTET STRING      [HEX DUMP]:30030101FF
  367:d=5  hl=2 l=  10 cons:      SEQUENCE
  369:d=6  hl=2 l=   8 prim:       OBJECT            :ecdsa-with-SHA256
  379:d=5  hl=2 l=  72 prim:      BIT STRING
  453:d=3  hl=4 l= 386 cons:    SET
  457:d=4  hl=4 l= 382 cons:     SEQUENCE
  461:d=5  hl=2 l=   1 prim:      INTEGER           :01
  464:d=5  hl=2 l=  49 cons:      SEQUENCE
  466:d=6  hl=2 l=  25 cons:       SEQUENCE
  468:d=7  hl=2 l=  23 cons:        SET
  470:d=8  hl=2 l=  21 cons:         SEQUENCE
  472:d=9  hl=2 l=   3 prim:          OBJECT            :commonName
  477:d=9  hl=2 l=  14 prim:          UTF8STRING        :Vladimir Putin
  493:d=6  hl=2 l=  20 prim:       INTEGER           :09D45914492F88F6E9812C905D2A0405C5769CCD
  515:d=5  hl=2 l=  11 cons:      SEQUENCE
  517:d=6  hl=2 l=   9 prim:       OBJECT            :sha256
  528:d=5  hl=3 l= 228 cons:      cont [ 0 ]
  531:d=6  hl=2 l=  24 cons:       SEQUENCE
  533:d=7  hl=2 l=   9 prim:        OBJECT            :contentType
  544:d=7  hl=2 l=  11 cons:        SET
  546:d=8  hl=2 l=   9 prim:         OBJECT            :pkcs7-data
  557:d=6  hl=2 l=  28 cons:       SEQUENCE
  559:d=7  hl=2 l=   9 prim:        OBJECT            :signingTime
  570:d=7  hl=2 l=  15 cons:        SET
  572:d=8  hl=2 l=  13 prim:         UTCTIME           :230601075746Z
  587:d=6  hl=2 l=  47 cons:       SEQUENCE
  589:d=7  hl=2 l=   9 prim:        OBJECT            :messageDigest
  600:d=7  hl=2 l=  34 cons:        SET
  602:d=8  hl=2 l=  32 prim:         OCTET STRING      [HEX DUMP]:DC86BA13AC17E82EA9F0E8239F809D0596449DC3B59626B6EBD6178F27178AF4
  636:d=6  hl=2 l= 121 cons:       SEQUENCE
  638:d=7  hl=2 l=   9 prim:        OBJECT            :S/MIME Capabilities
  649:d=7  hl=2 l= 108 cons:        SET
  651:d=8  hl=2 l= 106 cons:         SEQUENCE
  653:d=9  hl=2 l=  11 cons:          SEQUENCE
  655:d=10 hl=2 l=   9 prim:           OBJECT            :aes-256-cbc
  666:d=9  hl=2 l=  11 cons:          SEQUENCE
  668:d=10 hl=2 l=   9 prim:           OBJECT            :aes-192-cbc
  679:d=9  hl=2 l=  11 cons:          SEQUENCE
  681:d=10 hl=2 l=   9 prim:           OBJECT            :aes-128-cbc
  692:d=9  hl=2 l=  10 cons:          SEQUENCE
  694:d=10 hl=2 l=   8 prim:           OBJECT            :des-ede3-cbc
  704:d=9  hl=2 l=  14 cons:          SEQUENCE
  706:d=10 hl=2 l=   8 prim:           OBJECT            :rc2-cbc
  716:d=10 hl=2 l=   2 prim:           INTEGER           :80
  720:d=9  hl=2 l=  13 cons:          SEQUENCE
  722:d=10 hl=2 l=   8 prim:           OBJECT            :rc2-cbc
  732:d=10 hl=2 l=   1 prim:           INTEGER           :40
  735:d=9  hl=2 l=   7 cons:          SEQUENCE
  737:d=10 hl=2 l=   5 prim:           OBJECT            :des-cbc
  744:d=9  hl=2 l=  13 cons:          SEQUENCE
  746:d=10 hl=2 l=   8 prim:           OBJECT            :rc2-cbc
  756:d=10 hl=2 l=   1 prim:           INTEGER           :28
  759:d=5  hl=2 l=  10 cons:      SEQUENCE
  761:d=6  hl=2 l=   8 prim:       OBJECT            :ecdsa-with-SHA256
  771:d=5  hl=2 l=  70 prim:      OCTET STRING      [HEX DUMP]:30440220497700032BB7F3B6974C6653D926320E2DDC5616565119ED7E968C2B155635CF022030DDA85378C9002AA8E29949FC39A9FD333A9D62B52C8EBB0F73B5D21EE3720E
$ openssl cms -verify -in sf1132354.dety -inform der -content sf1132354.in -CAfile sf1132354.crt
hello and goodbye
Verification successful
$ openssl cms -verify -in sf1132354.dety -inform der -content sf1132354.in -noverify
hello and goodbye
Verification successful

Это вариант по умолчанию для openssl cms -sign: отделенной подписи (вы можете видеть, что в encapContentInfo нет eContent, начиная со смещения 41) с подписанными атрибутами (вы можете видеть, начиная со смещения 528) и копией сертификата подписчика (начиная со смещения 58). При наличии signedattrs операция проверки обычно выполняет три действия:

  1. вычислить хэш данных (который мне пришлось предоставить, -contentпоскольку он не содержится в SignedData) и сопоставить с messageDigestатрибутом в signattrs
  2. проверьте, что подпись (по смещению 759) соответствует «канонической» кодировке signedattrs (т.е. с тегом context-3, замененным на SET OF) под открытым ключом в сертификате в сообщении
  3. проверить сертификат, используемый на шаге 2, на соответствие хранилищу доверенных сертификатов (здесь используется -CAfile; существуют более сложные способы указать/создать хранилище доверенных сертификатов, но здесь я показываю только простой)

Эта комбинация доказывает, что данные в .inфайле у получателя/проверяющего являются теми же данными, которые использовались/предназначались отправителем/подписавшим, и не были подделаны или иным образом изменены. Но с самоподписанным сертификатом, как здесь, это НЕ доказывает, кто является подписавшим, или что вы должны доверять данным, которые они подписали и отправили; в частности, этот сертификат утверждает, что я Владимир Путин, но я не Владимир Путин. Честно говоря, я не Владимир Путин — отзовите эти атакующие беспилотники БЫСТРО :-}

Если бы подписывающая сторона использовала, а проверяющая сторона подтвердила сертификат, выданный «настоящим» (и должным образом работающим) центром сертификации, центр сертификации проверил бы личность «владельца» (субъекта) сертификата перед его выдачей, и этот процесс подтвердил бы не только то, что я получил данные, предназначенные отправителем, но и то, что отправитель — это тот, кого я могу идентифицировать и решить, доверять ли ему (и насколько).

Последняя (выглядящая как оксюморон) команда пропускает шаг 3; она проверяет только, что данные соответствуют signedattrs, а подпись (используя ключ в сертификате) проверяет signattrs, но не проверяет сертификат (и не нуждается в truststore). Это доказывает, что вы получили данные неизмененными от той же стороны, которая создала подпись, но эта сторона могла быть злоумышленником, а данные поддельными и вредоносными, даже если подпись подтверждает.

$ openssl cms -sign -in sf1132354.in -inkey sf1132354.key -signer sf1132354.crt -md sha256 -outform der -out sf1132354.detn -noattr
$ openssl asn1parse -i -inform der <sf1132354.detn
    0:d=0  hl=4 l= 607 cons: SEQUENCE
    4:d=1  hl=2 l=   9 prim:  OBJECT            :pkcs7-signedData
   15:d=1  hl=4 l= 592 cons:  cont [ 0 ]
   19:d=2  hl=4 l= 588 cons:   SEQUENCE
   23:d=3  hl=2 l=   1 prim:    INTEGER           :01
   26:d=3  hl=2 l=  13 cons:    SET
   28:d=4  hl=2 l=  11 cons:     SEQUENCE
   30:d=5  hl=2 l=   9 prim:      OBJECT            :sha256
   41:d=3  hl=2 l=  11 cons:    SEQUENCE
   43:d=4  hl=2 l=   9 prim:     OBJECT            :pkcs7-data
   54:d=3  hl=4 l= 395 cons:    cont [ 0 ]
   58:d=4  hl=4 l= 391 cons:     SEQUENCE
   62:d=5  hl=4 l= 301 cons:      SEQUENCE
   66:d=6  hl=2 l=   3 cons:       cont [ 0 ]
   68:d=7  hl=2 l=   1 prim:        INTEGER           :02
   71:d=6  hl=2 l=  20 prim:       INTEGER           :09D45914492F88F6E9812C905D2A0405C5769CCD
   93:d=6  hl=2 l=  10 cons:       SEQUENCE
   95:d=7  hl=2 l=   8 prim:        OBJECT            :ecdsa-with-SHA256
  105:d=6  hl=2 l=  25 cons:       SEQUENCE
  107:d=7  hl=2 l=  23 cons:        SET
  109:d=8  hl=2 l=  21 cons:         SEQUENCE
  111:d=9  hl=2 l=   3 prim:          OBJECT            :commonName
  116:d=9  hl=2 l=  14 prim:          UTF8STRING        :Vladimir Putin
  132:d=6  hl=2 l=  30 cons:       SEQUENCE
  134:d=7  hl=2 l=  13 prim:        UTCTIME           :230601075720Z
  149:d=7  hl=2 l=  13 prim:        UTCTIME           :240531075720Z
  164:d=6  hl=2 l=  25 cons:       SEQUENCE
  166:d=7  hl=2 l=  23 cons:        SET
  168:d=8  hl=2 l=  21 cons:         SEQUENCE
  170:d=9  hl=2 l=   3 prim:          OBJECT            :commonName
  175:d=9  hl=2 l=  14 prim:          UTF8STRING        :Vladimir Putin
  191:d=6  hl=2 l=  89 cons:       SEQUENCE
  193:d=7  hl=2 l=  19 cons:        SEQUENCE
  195:d=8  hl=2 l=   7 prim:         OBJECT            :id-ecPublicKey
  204:d=8  hl=2 l=   8 prim:         OBJECT            :prime256v1
  214:d=7  hl=2 l=  66 prim:        BIT STRING
  282:d=6  hl=2 l=  83 cons:       cont [ 3 ]
  284:d=7  hl=2 l=  81 cons:        SEQUENCE
  286:d=8  hl=2 l=  29 cons:         SEQUENCE
  288:d=9  hl=2 l=   3 prim:          OBJECT            :X509v3 Subject Key Identifier
  293:d=9  hl=2 l=  22 prim:          OCTET STRING      [HEX DUMP]:0414AFBF46DE3CED60E2A5BBEA461C187C4FBE4D4654
  317:d=8  hl=2 l=  31 cons:         SEQUENCE
  319:d=9  hl=2 l=   3 prim:          OBJECT            :X509v3 Authority Key Identifier
  324:d=9  hl=2 l=  24 prim:          OCTET STRING      [HEX DUMP]:30168014AFBF46DE3CED60E2A5BBEA461C187C4FBE4D4654
  350:d=8  hl=2 l=  15 cons:         SEQUENCE
  352:d=9  hl=2 l=   3 prim:          OBJECT            :X509v3 Basic Constraints
  357:d=9  hl=2 l=   1 prim:          BOOLEAN           :255
  360:d=9  hl=2 l=   5 prim:          OCTET STRING      [HEX DUMP]:30030101FF
  367:d=5  hl=2 l=  10 cons:      SEQUENCE
  369:d=6  hl=2 l=   8 prim:       OBJECT            :ecdsa-with-SHA256
  379:d=5  hl=2 l=  72 prim:      BIT STRING
  453:d=3  hl=3 l= 155 cons:    SET
  456:d=4  hl=3 l= 152 cons:     SEQUENCE
  459:d=5  hl=2 l=   1 prim:      INTEGER           :01
  462:d=5  hl=2 l=  49 cons:      SEQUENCE
  464:d=6  hl=2 l=  25 cons:       SEQUENCE
  466:d=7  hl=2 l=  23 cons:        SET
  468:d=8  hl=2 l=  21 cons:         SEQUENCE
  470:d=9  hl=2 l=   3 prim:          OBJECT            :commonName
  475:d=9  hl=2 l=  14 prim:          UTF8STRING        :Vladimir Putin
  491:d=6  hl=2 l=  20 prim:       INTEGER           :09D45914492F88F6E9812C905D2A0405C5769CCD
  513:d=5  hl=2 l=  11 cons:      SEQUENCE
  515:d=6  hl=2 l=   9 prim:       OBJECT            :sha256
  526:d=5  hl=2 l=  10 cons:      SEQUENCE
  528:d=6  hl=2 l=   8 prim:       OBJECT            :ecdsa-with-SHA256
  538:d=5  hl=2 l=  71 prim:      OCTET STRING      [HEX DUMP]:3045022100B5B167CC707D015025C9631EEA3D351E6B53ABB5AE1280A975ABE5D6EB92A4F90220525F75DF118479B6E41A9983104E6B55D215E5A5C4DBBD41B66511A25278479E
$ openssl cms -verify -in sf1132354.detn -inform der -content sf1132354.in -CAfile sf1132354.crt
hello and goodbye
Verification successful
$ openssl cms -verify -in sf1132354.detn -inform der -content sf1132354.in -noverify
hello and goodbye
Verification successful

В этом варианте не используются signedattrs, поэтому вы нигде не увидите дайджест содержимого, а процесс проверки отличается:

  1. проверить подпись надсодержание(не подписанные) с использованием открытого ключа в сертификате
  2. подтвердить сертификат

... и теперь -noverifyверсия пропускает шаг 2 и выполняет только шаг 1.

$ openssl cms -sign -in sf1132354.in -inkey sf1132354.key -signer sf1132354.crt -md sha256 -outform der -out sf1132354.envy -nodetach
$ openssl asn1parse -i -inform der <sf1132354.envy                   0:d=0  hl=4 l= 862 cons: SEQUENCE
    4:d=1  hl=2 l=   9 prim:  OBJECT            :pkcs7-signedData
   15:d=1  hl=4 l= 847 cons:  cont [ 0 ]
   19:d=2  hl=4 l= 843 cons:   SEQUENCE
   23:d=3  hl=2 l=   1 prim:    INTEGER           :01
   26:d=3  hl=2 l=  13 cons:    SET
   28:d=4  hl=2 l=  11 cons:     SEQUENCE
   30:d=5  hl=2 l=   9 prim:      OBJECT            :sha256
   41:d=3  hl=2 l=  34 cons:    SEQUENCE
   43:d=4  hl=2 l=   9 prim:     OBJECT            :pkcs7-data
   54:d=4  hl=2 l=  21 cons:     cont [ 0 ]
   56:d=5  hl=2 l=  19 prim:      OCTET STRING      :hello and goodbye

   77:d=3  hl=4 l= 395 cons:    cont [ 0 ]
   81:d=4  hl=4 l= 391 cons:     SEQUENCE
   85:d=5  hl=4 l= 301 cons:      SEQUENCE
   89:d=6  hl=2 l=   3 cons:       cont [ 0 ]
   91:d=7  hl=2 l=   1 prim:        INTEGER           :02
   94:d=6  hl=2 l=  20 prim:       INTEGER           :09D45914492F88F6E9812C905D2A0405C5769CCD
  116:d=6  hl=2 l=  10 cons:       SEQUENCE
  118:d=7  hl=2 l=   8 prim:        OBJECT            :ecdsa-with-SHA256
  128:d=6  hl=2 l=  25 cons:       SEQUENCE
  130:d=7  hl=2 l=  23 cons:        SET
  132:d=8  hl=2 l=  21 cons:         SEQUENCE
  134:d=9  hl=2 l=   3 prim:          OBJECT            :commonName
  139:d=9  hl=2 l=  14 prim:          UTF8STRING        :Vladimir Putin
  155:d=6  hl=2 l=  30 cons:       SEQUENCE
  157:d=7  hl=2 l=  13 prim:        UTCTIME           :230601075720Z
  172:d=7  hl=2 l=  13 prim:        UTCTIME           :240531075720Z
  187:d=6  hl=2 l=  25 cons:       SEQUENCE
  189:d=7  hl=2 l=  23 cons:        SET
  191:d=8  hl=2 l=  21 cons:         SEQUENCE
  193:d=9  hl=2 l=   3 prim:          OBJECT            :commonName
  198:d=9  hl=2 l=  14 prim:          UTF8STRING        :Vladimir Putin
  214:d=6  hl=2 l=  89 cons:       SEQUENCE
  216:d=7  hl=2 l=  19 cons:        SEQUENCE
  218:d=8  hl=2 l=   7 prim:         OBJECT            :id-ecPublicKey
  227:d=8  hl=2 l=   8 prim:         OBJECT            :prime256v1
  237:d=7  hl=2 l=  66 prim:        BIT STRING
  305:d=6  hl=2 l=  83 cons:       cont [ 3 ]
  307:d=7  hl=2 l=  81 cons:        SEQUENCE
  309:d=8  hl=2 l=  29 cons:         SEQUENCE
  311:d=9  hl=2 l=   3 prim:          OBJECT            :X509v3 Subject Key Identifier
  316:d=9  hl=2 l=  22 prim:          OCTET STRING      [HEX DUMP]:0414AFBF46DE3CED60E2A5BBEA461C187C4FBE4D4654
  340:d=8  hl=2 l=  31 cons:         SEQUENCE
  342:d=9  hl=2 l=   3 prim:          OBJECT            :X509v3 Authority Key Identifier
  347:d=9  hl=2 l=  24 prim:          OCTET STRING      [HEX DUMP]:30168014AFBF46DE3CED60E2A5BBEA461C187C4FBE4D4654
  373:d=8  hl=2 l=  15 cons:         SEQUENCE
  375:d=9  hl=2 l=   3 prim:          OBJECT            :X509v3 Basic Constraints
  380:d=9  hl=2 l=   1 prim:          BOOLEAN           :255
  383:d=9  hl=2 l=   5 prim:          OCTET STRING      [HEX DUMP]:30030101FF
  390:d=5  hl=2 l=  10 cons:      SEQUENCE
  392:d=6  hl=2 l=   8 prim:       OBJECT            :ecdsa-with-SHA256
  402:d=5  hl=2 l=  72 prim:      BIT STRING
  476:d=3  hl=4 l= 386 cons:    SET
  480:d=4  hl=4 l= 382 cons:     SEQUENCE
  484:d=5  hl=2 l=   1 prim:      INTEGER           :01
  487:d=5  hl=2 l=  49 cons:      SEQUENCE
  489:d=6  hl=2 l=  25 cons:       SEQUENCE
  491:d=7  hl=2 l=  23 cons:        SET
  493:d=8  hl=2 l=  21 cons:         SEQUENCE
  495:d=9  hl=2 l=   3 prim:          OBJECT            :commonName
  500:d=9  hl=2 l=  14 prim:          UTF8STRING        :Vladimir Putin
  516:d=6  hl=2 l=  20 prim:       INTEGER           :09D45914492F88F6E9812C905D2A0405C5769CCD
  538:d=5  hl=2 l=  11 cons:      SEQUENCE
  540:d=6  hl=2 l=   9 prim:       OBJECT            :sha256
  551:d=5  hl=3 l= 228 cons:      cont [ 0 ]
  554:d=6  hl=2 l=  24 cons:       SEQUENCE
  556:d=7  hl=2 l=   9 prim:        OBJECT            :contentType
  567:d=7  hl=2 l=  11 cons:        SET
  569:d=8  hl=2 l=   9 prim:         OBJECT            :pkcs7-data
  580:d=6  hl=2 l=  28 cons:       SEQUENCE
  582:d=7  hl=2 l=   9 prim:        OBJECT            :signingTime
  593:d=7  hl=2 l=  15 cons:        SET
  595:d=8  hl=2 l=  13 prim:         UTCTIME           :230601083230Z
  610:d=6  hl=2 l=  47 cons:       SEQUENCE
  612:d=7  hl=2 l=   9 prim:        OBJECT            :messageDigest
  623:d=7  hl=2 l=  34 cons:        SET
  625:d=8  hl=2 l=  32 prim:         OCTET STRING      [HEX DUMP]:DC86BA13AC17E82EA9F0E8239F809D0596449DC3B59626B6EBD6178F27178AF4
  659:d=6  hl=2 l= 121 cons:       SEQUENCE
  661:d=7  hl=2 l=   9 prim:        OBJECT            :S/MIME Capabilities
  672:d=7  hl=2 l= 108 cons:        SET
  674:d=8  hl=2 l= 106 cons:         SEQUENCE
  676:d=9  hl=2 l=  11 cons:          SEQUENCE
  678:d=10 hl=2 l=   9 prim:           OBJECT            :aes-256-cbc
  689:d=9  hl=2 l=  11 cons:          SEQUENCE
  691:d=10 hl=2 l=   9 prim:           OBJECT            :aes-192-cbc
  702:d=9  hl=2 l=  11 cons:          SEQUENCE
  704:d=10 hl=2 l=   9 prim:           OBJECT            :aes-128-cbc
  715:d=9  hl=2 l=  10 cons:          SEQUENCE
  717:d=10 hl=2 l=   8 prim:           OBJECT            :des-ede3-cbc
  727:d=9  hl=2 l=  14 cons:          SEQUENCE
  729:d=10 hl=2 l=   8 prim:           OBJECT            :rc2-cbc
  739:d=10 hl=2 l=   2 prim:           INTEGER           :80
  743:d=9  hl=2 l=  13 cons:          SEQUENCE
  745:d=10 hl=2 l=   8 prim:           OBJECT            :rc2-cbc
  755:d=10 hl=2 l=   1 prim:           INTEGER           :40
  758:d=9  hl=2 l=   7 cons:          SEQUENCE
  760:d=10 hl=2 l=   5 prim:           OBJECT            :des-cbc
  767:d=9  hl=2 l=  13 cons:          SEQUENCE
  769:d=10 hl=2 l=   8 prim:           OBJECT            :rc2-cbc
  779:d=10 hl=2 l=   1 prim:           INTEGER           :28
  782:d=5  hl=2 l=  10 cons:      SEQUENCE
  784:d=6  hl=2 l=   8 prim:       OBJECT            :ecdsa-with-SHA256
  794:d=5  hl=2 l=  70 prim:      OCTET STRING      [HEX DUMP]:3044022004297664781BFF7FF183FBA4F8536C83A3EA796690B810970DDC3C49E5F28FCC0220048A0A573AD584282DF8C2079AAC5E036B33E414F9B55762A16A49B60D176E68
$ openssl cms -verify -in sf1132354.envy -inform der -CAfile sf1132354.crt
hello and goodbye
Verification successful
$ openssl cms -verify -in sf1132354.envy -inform der -noverify
hello and goodbye
Verification successful
$ openssl cms -sign -in sf1132354.in -inkey sf1132354.key -signer sf1132354.crt -md sha256 -outform der -out sf1132354.envn -nodetach -noattr
$ openssl asn1parse -i -inform der <sf1132354.envn
    0:d=0  hl=4 l= 629 cons: SEQUENCE
    4:d=1  hl=2 l=   9 prim:  OBJECT            :pkcs7-signedData
   15:d=1  hl=4 l= 614 cons:  cont [ 0 ]
   19:d=2  hl=4 l= 610 cons:   SEQUENCE
   23:d=3  hl=2 l=   1 prim:    INTEGER           :01
   26:d=3  hl=2 l=  13 cons:    SET
   28:d=4  hl=2 l=  11 cons:     SEQUENCE
   30:d=5  hl=2 l=   9 prim:      OBJECT            :sha256
   41:d=3  hl=2 l=  34 cons:    SEQUENCE
   43:d=4  hl=2 l=   9 prim:     OBJECT            :pkcs7-data
   54:d=4  hl=2 l=  21 cons:     cont [ 0 ]
   56:d=5  hl=2 l=  19 prim:      OCTET STRING      :hello and goodbye

   77:d=3  hl=4 l= 395 cons:    cont [ 0 ]
   81:d=4  hl=4 l= 391 cons:     SEQUENCE
   85:d=5  hl=4 l= 301 cons:      SEQUENCE
   89:d=6  hl=2 l=   3 cons:       cont [ 0 ]
   91:d=7  hl=2 l=   1 prim:        INTEGER           :02
   94:d=6  hl=2 l=  20 prim:       INTEGER           :09D45914492F88F6E9812C905D2A0405C5769CCD
  116:d=6  hl=2 l=  10 cons:       SEQUENCE
  118:d=7  hl=2 l=   8 prim:        OBJECT            :ecdsa-with-SHA256
  128:d=6  hl=2 l=  25 cons:       SEQUENCE
  130:d=7  hl=2 l=  23 cons:        SET
  132:d=8  hl=2 l=  21 cons:         SEQUENCE
  134:d=9  hl=2 l=   3 prim:          OBJECT            :commonName
  139:d=9  hl=2 l=  14 prim:          UTF8STRING        :Vladimir Putin
  155:d=6  hl=2 l=  30 cons:       SEQUENCE
  157:d=7  hl=2 l=  13 prim:        UTCTIME           :230601075720Z
  172:d=7  hl=2 l=  13 prim:        UTCTIME           :240531075720Z
  187:d=6  hl=2 l=  25 cons:       SEQUENCE
  189:d=7  hl=2 l=  23 cons:        SET
  191:d=8  hl=2 l=  21 cons:         SEQUENCE
  193:d=9  hl=2 l=   3 prim:          OBJECT            :commonName
  198:d=9  hl=2 l=  14 prim:          UTF8STRING        :Vladimir Putin
  214:d=6  hl=2 l=  89 cons:       SEQUENCE
  216:d=7  hl=2 l=  19 cons:        SEQUENCE
  218:d=8  hl=2 l=   7 prim:         OBJECT            :id-ecPublicKey
  227:d=8  hl=2 l=   8 prim:         OBJECT            :prime256v1
  237:d=7  hl=2 l=  66 prim:        BIT STRING
  305:d=6  hl=2 l=  83 cons:       cont [ 3 ]
  307:d=7  hl=2 l=  81 cons:        SEQUENCE
  309:d=8  hl=2 l=  29 cons:         SEQUENCE
  311:d=9  hl=2 l=   3 prim:          OBJECT            :X509v3 Subject Key Identifier
  316:d=9  hl=2 l=  22 prim:          OCTET STRING      [HEX DUMP]:0414AFBF46DE3CED60E2A5BBEA461C187C4FBE4D4654
  340:d=8  hl=2 l=  31 cons:         SEQUENCE
  342:d=9  hl=2 l=   3 prim:          OBJECT            :X509v3 Authority Key Identifier
  347:d=9  hl=2 l=  24 prim:          OCTET STRING      [HEX DUMP]:30168014AFBF46DE3CED60E2A5BBEA461C187C4FBE4D4654
  373:d=8  hl=2 l=  15 cons:         SEQUENCE
  375:d=9  hl=2 l=   3 prim:          OBJECT            :X509v3 Basic Constraints
  380:d=9  hl=2 l=   1 prim:          BOOLEAN           :255
  383:d=9  hl=2 l=   5 prim:          OCTET STRING      [HEX DUMP]:30030101FF
  390:d=5  hl=2 l=  10 cons:      SEQUENCE
  392:d=6  hl=2 l=   8 prim:       OBJECT            :ecdsa-with-SHA256
  402:d=5  hl=2 l=  72 prim:      BIT STRING
  476:d=3  hl=3 l= 154 cons:    SET
  479:d=4  hl=3 l= 151 cons:     SEQUENCE
  482:d=5  hl=2 l=   1 prim:      INTEGER           :01
  485:d=5  hl=2 l=  49 cons:      SEQUENCE
  487:d=6  hl=2 l=  25 cons:       SEQUENCE
  489:d=7  hl=2 l=  23 cons:        SET
  491:d=8  hl=2 l=  21 cons:         SEQUENCE
  493:d=9  hl=2 l=   3 prim:          OBJECT            :commonName
  498:d=9  hl=2 l=  14 prim:          UTF8STRING        :Vladimir Putin
  514:d=6  hl=2 l=  20 prim:       INTEGER           :09D45914492F88F6E9812C905D2A0405C5769CCD
  536:d=5  hl=2 l=  11 cons:      SEQUENCE
  538:d=6  hl=2 l=   9 prim:       OBJECT            :sha256
  549:d=5  hl=2 l=  10 cons:      SEQUENCE
  551:d=6  hl=2 l=   8 prim:       OBJECT            :ecdsa-with-SHA256
  561:d=5  hl=2 l=  70 prim:      OCTET STRING      [HEX DUMP]:304402207D12A9C0281FF39ED3DA7C0966E1B153D70150B25976B7FEBF8C35B92986861902202C8FA05D23E2988C06FC3A973104E88195596D94340A43802202A266D6DEFB43
$ openssl cms -verify -in sf1132354.envn -inform der -CAfile sf1132354.crt
hello and goodbye
Verification successful
$ openssl cms -verify -in sf1132354.envn -inform der -noverify
hello and goodbye
Verification successful

Это «обертывающие» (неотделенные) подписи, которыеделатьвключить содержимое (по смещению 56) и использовать или не использовать signedattrs соответственно. Проверка такая же, как в двух случаях выше, за исключением того, что теперь мне не нужно указывать, -contentпотому что содержимое находится в SignedData.

Есть еще случаи, но я уже потратил больше времени на этот A, чем справедливо по отношению к другим, поэтому я остановлюсь здесь. Если ваш случай отличается, четко укажите, как, и я постараюсь вернуться к нему через несколько дней.

Связанный контент