Добрый день. есть связка xml + ЭЦП (счет-фактура и подпись) в php есть функция работы с сертификатами - openssl_x509_parse(). но требуется вытащить данные не из сертификата, а из электронной подписи. в подписи содержится сертификат подписанта, сама подпись, штамп времени .... вопрос - как из подписи вытащить информацию о сертификате. может кто-то копал эту тему или хотя бы направление - куда искать.
подписей вагон и маленькая тележка. если его переименовать в *.p7b - винда спокойно раскрывает сертификат.
странно , я просто переименовал в test.p7b - он мне сразу показал иконку сертификата, может потому, что у меня стоит КриптоПро ? зараза
тебе как я понял нужен pem формат файла. --- Добавлено --- Слушай, а у тебя точно файл не битый нормальный p7b файл?
да это действующая подпись и реального документа. скорее всего формат не соответсвует тому что хочет php. даже если ее конвертить base64.
продолжу. с грехом пополам что-то прочел (я про файл). $rr = 'openssl asn1parse -inform DER -in ko2.p7b' ; $rr = shell_exec($rr); получил мегастроку. но появился новый вопрос: есть такой "тип поля" в сертификате BMPSTRING - он не распознается этим механиизмом. содержимое файла в hex виде по этому смещению этого сегмента очень похоже на UTF-16. преобразовал получил строку \u1e03\u0428\u041f\u0435\u0442\u0440\u043e\u0032\u0420\u041f\u0435\u0442\u0040\u0420\u041f\u0435\u0442\u0440\u043e\u0432\u0000 онлайн-декодер выдал ḃШПетро2РПет@РПетров похоже на правду - но показывать такое низя. вопрос - как и чем правильно распознать/преобразовать строчку?
виндовыми методами при помощи sertmgr SN = Петров G = Петр Петрович T = Должность тест STREET = Адрес тест CN = Петров Петр Петрович OU = Отдел тест O = Организация тест L = Санкт-Петербург S = 78 г. Санкт-Петербург C = RU
там дофига инфы. но по ходу этого нет. формат этой подписи DER. это экспериментально определил. но почему-то об него x509 спотыкается openssl x509 -inform DER -in ko2.p7b валит ошибку.
тот тестовый файл, более менее хорошо в utf-8 отображается PHP: <?php header('Content-Type: text/html; charset=utf-8'); echo file_get_contents("test.bin"); начало по HEX совпадает с x.509 из файла примера https://habrahabr.ru/post/194664/ ASN.1 decoder парсит файл на ура Спойлер Код (Text): SEQUENCE(2 elem) OBJECT IDENTIFIER1.2.840.113549.1.7.2 [0](1 elem) SEQUENCE(5 elem) INTEGER1 SET(1 elem) SEQUENCE(2 elem) OBJECT IDENTIFIER1.2.643.2.2.9 NULL SEQUENCE(1 elem) OBJECT IDENTIFIER1.2.840.113549.1.7.1 [0](1 elem) SEQUENCE(3 elem) SEQUENCE(9 elem) [0](1 elem) INTEGER2 INTEGER(121 bit) 2417350724085586414878846003325763586 SEQUENCE(2 elem) OBJECT IDENTIFIER1.2.643.2.2.3 NULL SEQUENCE(9 elem) SET(1 elem) SEQUENCE(2 elem) OBJECT IDENTIFIER2.5.4.9 UTF8StringУлица Циолковского дом 4 SET(1 elem) SEQUENCE(2 elem) OBJECT IDENTIFIER1.2.643.100.1 NumericString1024001434049 SET(1 elem) SEQUENCE(2 elem) OBJECT IDENTIFIER1.2.643.3.131.1.1 NumericString004029017981 SET(1 elem) SEQUENCE(2 elem) OBJECT IDENTIFIER2.5.4.6 PrintableStringRU SET(1 elem) SEQUENCE(2 elem) OBJECT IDENTIFIER2.5.4.7 UTF8StringКалуга SET(1 elem) SEQUENCE(2 elem) OBJECT IDENTIFIER2.5.4.8 UTF8String40 Калужская область SET(1 elem) SEQUENCE(2 elem) OBJECT IDENTIFIER1.2.840.113549.1.9.1 IA5Stringca@astralnalog.ru SET(1 elem) SEQUENCE(2 elem) OBJECT IDENTIFIER2.5.4.10 UTF8StringЗАО Калуга Астрал SET(1 elem) SEQUENCE(2 elem) OBJECT IDENTIFIER2.5.4.3 UTF8StringЗАО Калуга Астрал (УЦ 889) SEQUENCE(2 elem) UTCTime2016-04-07 06:35:11 UTC UTCTime2017-04-07 06:35:11 UTC SEQUENCE(12 elem) SET(1 elem) SEQUENCE(2 elem) OBJECT IDENTIFIER1.2.643.3.131.1.1 NumericString009999987946 SET(1 elem) SEQUENCE(2 elem) OBJECT IDENTIFIER1.2.643.100.3 NumericString52403631442 SET(1 elem) SEQUENCE(2 elem) OBJECT IDENTIFIER1.2.643.100.1 NumericString4176212167039 SET(1 elem) SEQUENCE(2 elem) OBJECT IDENTIFIER2.5.4.12 UTF8Stringсотрудник SET(1 elem) SEQUENCE(2 elem) OBJECT IDENTIFIER2.5.4.10 UTF8StringООО«Торговый дом «Онега»_тест_ SET(1 elem) SEQUENCE(2 elem) OBJECT IDENTIFIER2.5.4.7 UTF8Stringг. Москва SET(1 elem) SEQUENCE(2 elem) OBJECT IDENTIFIER2.5.4.8 UTF8String77 г. Москва SET(1 elem) SEQUENCE(2 elem) OBJECT IDENTIFIER2.5.4.6 PrintableStringRU SET(1 elem) SEQUENCE(2 elem) OBJECT IDENTIFIER2.5.4.42 UTF8StringОнег Тестович SET(1 elem) SEQUENCE(2 elem) OBJECT IDENTIFIER2.5.4.4 UTF8StringТестов SET(1 elem) SEQUENCE(2 elem) OBJECT IDENTIFIER2.5.4.3 UTF8StringТестов Онег Тестович SET(1 elem) SEQUENCE(2 elem) OBJECT IDENTIFIER2.5.4.9 UTF8StringПриветливая 1 SEQUENCE(2 elem) SEQUENCE(2 elem) OBJECT IDENTIFIER1.2.643.2.2.19 SEQUENCE(2 elem) OBJECT IDENTIFIER1.2.643.2.2.36.0 OBJECT IDENTIFIER1.2.643.2.2.30.1 BIT STRING(1 elem) OCTET STRING(64 byte) 2B1AD908B54809D073649AC4A30011D2F1C4065D0F11A53E09205BAC606E516A1738CF… [1](9 byte) 003033373930303032 [3](1 elem) SEQUENCE(11 elem) SEQUENCE(3 elem) OBJECT IDENTIFIER2.5.29.15 BOOLEANtrue OCTET STRING(1 elem) BIT STRING(4 bit) 1111 SEQUENCE(2 elem) OBJECT IDENTIFIER1.2.840.113549.1.9.15 OCTET STRING(1 elem) SEQUENCE(1 elem) SEQUENCE(1 elem) OBJECT IDENTIFIER1.2.643.2.2.21 SEQUENCE(2 elem) OBJECT IDENTIFIER2.5.29.37 OCTET STRING(1 elem) SEQUENCE(2 elem) OBJECT IDENTIFIER1.3.6.1.5.5.7.3.2 OBJECT IDENTIFIER1.3.6.1.5.5.7.3.4 SEQUENCE(2 elem) OBJECT IDENTIFIER2.5.29.32 OCTET STRING(1 elem) SEQUENCE(2 elem) SEQUENCE(1 elem) OBJECT IDENTIFIER1.2.643.100.113.1 SEQUENCE(1 elem) OBJECT IDENTIFIER1.2.643.100.113.2 SEQUENCE(2 elem) OBJECT IDENTIFIER1.2.643.100.111 OCTET STRING(1 elem) UTF8String"КриптоПро CSP" (версия 3.6) SEQUENCE(2 elem) OBJECT IDENTIFIER2.5.29.14 OCTET STRING(1 elem) OCTET STRING(20 byte) F8ADAB4CA4577C811AE20C3C94C93C3E06336C1A SEQUENCE(3 elem) OBJECT IDENTIFIER2.5.29.19 BOOLEANtrue OCTET STRING(1 elem) SEQUENCE(0 elem) SEQUENCE(2 elem) OBJECT IDENTIFIER1.2.643.100.112 OCTET STRING(1 elem) SEQUENCE(4 elem) UTF8String"Средство криптографической защиты информации ViPNet CSP 4.2" UTF8StringПрограммный комплекс ViPNet Удостоверяющий центр 4 UTF8StringСФ/124-2860 от 15 марта 2016 UTF8StringСФ/128-2324 от 25 апреля 2014 SEQUENCE(2 elem) OBJECT IDENTIFIER1.3.6.1.5.5.7.1.1 OCTET STRING(1 elem) SEQUENCE(2 elem) SEQUENCE(2 elem) OBJECT IDENTIFIER1.3.6.1.5.5.7.48.1 [6]http://ocsp.keydisk.ru/OCSP889-2015/OCSP.srf SEQUENCE(2 elem) OBJECT IDENTIFIER1.3.6.1.5.5.7.48.2 [6]http://www.dp.keydisk.ru/root/889/astral-889-2015.cer SEQUENCE(2 elem) OBJECT IDENTIFIER2.5.29.31 OCTET STRING(1 elem) SEQUENCE(2 elem) SEQUENCE(1 elem) [0](1 elem) [0](1 elem) [6]http://www.dp-tender.keydisk.ru/cdp/889/astral-889-2015.crl SEQUENCE(1 elem) [0](1 elem) [0](1 elem) [6]http://www.dp.keydisk.ru/cdp/889/astral-889-2015.crl SEQUENCE(2 elem) OBJECT IDENTIFIER2.5.29.35 OCTET STRING(1 elem) SEQUENCE(3 elem) [0](20 byte) 7EDDC69F3D3F107BA9DBF29542930BDC5C369AB8 [1](1 elem) [4](1 elem) SEQUENCE(9 elem) SET(1 elem) SEQUENCE(2 elem) OBJECT IDENTIFIER2.5.4.9 UTF8StringУлица Циолковского дом 4 SET(1 elem) SEQUENCE(2 elem) OBJECT IDENTIFIER1.2.643.100.1 NumericString1024001434049 SET(1 elem) SEQUENCE(2 elem) OBJECT IDENTIFIER1.2.643.3.131.1.1 NumericString004029017981 SET(1 elem) SEQUENCE(2 elem) OBJECT IDENTIFIER2.5.4.6 PrintableStringRU SET(1 elem) SEQUENCE(2 elem) OBJECT IDENTIFIER2.5.4.7 UTF8StringКалуга SET(1 elem) SEQUENCE(2 elem) OBJECT IDENTIFIER2.5.4.8 UTF8String40 Калужская область SET(1 elem) SEQUENCE(2 elem) OBJECT IDENTIFIER1.2.840.113549.1.9.1 IA5Stringca@astralnalog.ru SET(1 elem) SEQUENCE(2 elem) OBJECT IDENTIFIER2.5.4.10 UTF8StringЗАО Калуга Астрал SET(1 elem) SEQUENCE(2 elem) OBJECT IDENTIFIER2.5.4.3 UTF8StringЗАО Калуга Астрал (УЦ 889) [2](16 byte) 01D0D588A8ADB7D000000CFB00000002 SEQUENCE(2 elem) OBJECT IDENTIFIER1.2.643.2.2.3 NULL BIT STRING(512 bit) 0101100000111010000100001110110000000100100100101100110100011001110011… SET(1 elem) SEQUENCE(6 elem) INTEGER1 SEQUENCE(2 elem) SEQUENCE(9 elem) SET(1 elem) SEQUENCE(2 elem) OBJECT IDENTIFIER2.5.4.9 UTF8StringУлица Циолковского дом 4 SET(1 elem) SEQUENCE(2 elem) OBJECT IDENTIFIER1.2.643.100.1 NumericString1024001434049 SET(1 elem) SEQUENCE(2 elem) OBJECT IDENTIFIER1.2.643.3.131.1.1 NumericString004029017981 SET(1 elem) SEQUENCE(2 elem) OBJECT IDENTIFIER2.5.4.6 PrintableStringRU SET(1 elem) SEQUENCE(2 elem) OBJECT IDENTIFIER2.5.4.7 UTF8StringКалуга SET(1 elem) SEQUENCE(2 elem) OBJECT IDENTIFIER2.5.4.8 UTF8String40 Калужская область SET(1 elem) SEQUENCE(2 elem) OBJECT IDENTIFIER1.2.840.113549.1.9.1 IA5Stringca@astralnalog.ru SET(1 elem) SEQUENCE(2 elem) OBJECT IDENTIFIER2.5.4.10 UTF8StringЗАО Калуга Астрал SET(1 elem) SEQUENCE(2 elem) OBJECT IDENTIFIER2.5.4.3 UTF8StringЗАО Калуга Астрал (УЦ 889) INTEGER(121 bit) 2417350724085586414878846003325763586 SEQUENCE(2 elem) OBJECT IDENTIFIER1.2.643.2.2.9 NULL [0](4 elem) SEQUENCE(2 elem) OBJECT IDENTIFIER1.2.840.113549.1.9.3 SET(1 elem) OBJECT IDENTIFIER1.2.840.113549.1.7.1 SEQUENCE(2 elem) OBJECT IDENTIFIER1.2.840.113549.1.9.5 SET(1 elem) UTCTime2016-05-30 10:09:00 UTC SEQUENCE(2 elem) OBJECT IDENTIFIER1.2.840.113549.1.9.4 SET(1 elem) OCTET STRING(32 byte) 92040468BDCD872023F6AC75DF6EC7D38DB6868A72957692BA964DC3627CF4CA SEQUENCE(2 elem) OBJECT IDENTIFIER1.2.840.113549.1.9.16.2.47 SET(1 elem) SEQUENCE(1 elem) SEQUENCE(1 elem) SEQUENCE(3 elem) SEQUENCE(1 elem) OBJECT IDENTIFIER1.2.643.2.2.9 OCTET STRING(32 byte) 46A32C817F65E65311D49141A1AB6444B495060B1590D2D6EAC6407F827DE243 SEQUENCE(2 elem) SEQUENCE(1 elem) [4](1 elem) SEQUENCE(9 elem) SET(1 elem) SEQUENCE(2 elem) OBJECT IDENTIFIER2.5.4.9 UTF8StringУлица Циолковского дом 4 SET(1 elem) SEQUENCE(2 elem) OBJECT IDENTIFIER1.2.643.100.1 NumericString1024001434049 SET(1 elem) SEQUENCE(2 elem) OBJECT IDENTIFIER1.2.643.3.131.1.1 NumericString004029017981 SET(1 elem) SEQUENCE(2 elem) OBJECT IDENTIFIER2.5.4.6 PrintableStringRU SET(1 elem) SEQUENCE(2 elem) OBJECT IDENTIFIER2.5.4.7 UTF8StringКалуга SET(1 elem) SEQUENCE(2 elem) OBJECT IDENTIFIER2.5.4.8 UTF8String40 Калужская область SET(1 elem) SEQUENCE(2 elem) OBJECT IDENTIFIER1.2.840.113549.1.9.1 IA5Stringca@astralnalog.ru SET(1 elem) SEQUENCE(2 elem) OBJECT IDENTIFIER2.5.4.10 UTF8StringЗАО Калуга Астрал SET(1 elem) SEQUENCE(2 elem) OBJECT IDENTIFIER2.5.4.3 UTF8StringЗАО Калуга Астрал (УЦ 889) INTEGER(121 bit) 2417350724085586414878846003325763586 SEQUENCE(2 elem) OBJECT IDENTIFIER1.2.643.2.2.19 NULL OCTET STRING(64 byte) 343BF966260EEBE11799445A0EC3EB7E53BDFD30203F7534CF9D7BB182B71CC8891B44… https://lapo.it/asn1js/
в том файле, новерно BOM мешает. но это все равно проблемы не решает во без BOM - и все равно тот же результат
дав но строку которая содержит имена фамилии она не показыввает вот он ее выводит SET 860:d=8 hl=2 l= 47 cons: SEQUENCE 862:d=9 hl=2 l= 3 prim: OBJECT :commonName 867:d=9 hl=2 l= 40 prim: BMPSTRING и все - больше получить никак? или у тебя открыло по другому? --- Добавлено --- он съедает не раскрывает BMPSTRING ка например раскрывает SET 324:d=8 hl=2 l= 36 cons: SEQUENCE 326:d=9 hl=2 l= 3 prim: OBJECT :localityName 331:d=9 hl=2 l= 29 prim: UTF8STRING :Санкт-Петербург
посмотри пока библиотеки на PHP, может они покажут что нужно, вот например https://github.com/fgrosse/PHPASN1/blob/master/examples/parseBinary.php
библиотека хорошоая, но она требует 5.6 версии PHP, а на серваках более старая. и никто не будет обновлять. зараза.
https://www.versioneye.com/php/fgrosse:phpasn1/1.3.1 вот если кому надо версия - "php": ">=5.3.0", будем шаманить. --- Добавлено --- ха - оказалось была ошибка в декодировании BMPSTING (нашел в одном месте пояснение) 18:d=1 hl=3 l=141 prim: BIT STRING 18 is the offset from the beginning, d=1 is the depth and hl=3 is the header length. мой случай : 1025:d=9 hl=2 l= 12 prim: BMPSTRING это код в utf-16, прямая последовательность (младший-старший) и надо вносить смещение на величину hl = 2 . с одной стороны как бэ решает проблему, но конечно через библиотеку может быть лучше. DENIS спасибо за участие.