Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 14,079   Сказал «Спасибо»: 612 раз Поблагодарили: 2374 раз в 1867 постах
|
Автор: Denson  Автор: Андрей *  Приветствую. Возможно что-то не так делаю. На верификацию передаю просто строку левую в base64 типа: var fileBase64 = "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZ... обрезано .....N1bWVudD4NCg==" Для теста подпись сгенерил тут. Cохранил как sig. Если в p7b переименовать, атрибуты отображаются нормально. Скрин сверху с этого сайта, тоже нормально данные из подписи вытащил Так выглядит подпись: MIID5AYJKoZIhvcNAQcC.... обрезано ...f5Rqq59TIKYQ== Но во время исполнения кэтчится с ошибкой: Не найден автор исходной подписи. (0x8009100E)try { yield oSignedData.propset_ContentEncoding(cadesplugin.CADESCOM_BASE64_TO_BINARY); yield oSignedData.propset_Content(fileBase64); yield oSignedData.VerifyCades(signature, cadesplugin.CADESCOM_CADES_BES, true); } catch (err) { var e = cadesplugin.getLastError(err); } Тут есть образец, но для java и с#Есть мысли? :) Приложить файлами эти 2 строки в base64. Возможно найдутся мысли... Если там, конечно, нет вложенного сертификата подписанта, то ответ плагин уже дал верный. |
|
 1 пользователь поблагодарил Андрей * за этот пост.
|
Denson оставлено 15.11.2022(UTC)
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 07.11.2022(UTC) Сообщений: 8
Сказал(а) «Спасибо»: 6 раз
|
Автор: Андрей *  Автор: Denson  Автор: Андрей *  Приветствую. Возможно что-то не так делаю. На верификацию передаю просто строку левую в base64 типа: var fileBase64 = "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZ... обрезано .....N1bWVudD4NCg==" Для теста подпись сгенерил тут. Cохранил как sig. Если в p7b переименовать, атрибуты отображаются нормально. Скрин сверху с этого сайта, тоже нормально данные из подписи вытащил Так выглядит подпись: MIID5AYJKoZIhvcNAQcC.... обрезано ...f5Rqq59TIKYQ== Но во время исполнения кэтчится с ошибкой: Не найден автор исходной подписи. (0x8009100E)try { yield oSignedData.propset_ContentEncoding(cadesplugin.CADESCOM_BASE64_TO_BINARY); yield oSignedData.propset_Content(fileBase64); yield oSignedData.VerifyCades(signature, cadesplugin.CADESCOM_CADES_BES, true); } catch (err) { var e = cadesplugin.getLastError(err); } Тут есть образец, но для java и с#Есть мысли? :) Приложить файлами эти 2 строки в base64. Возможно найдутся мысли... Если там, конечно, нет вложенного сертификата подписанта, то ответ плагин уже дал верный. Вложил пдф и sig в zip  pdfAndSig.zip (158kb) загружен 3 раз(а).. Модифицировал пример верификации, что бы он возвращал oSignedData. Подскажите плиз, как из oSignedData вытащить данные сертификата. function getInfoFromSignedData(dataInBase64,sSignedMessage) { return new Promise(function (resolve, reject) { cadesplugin.async_spawn(function* (args) { var oSignedData = yield cadesplugin.CreateObjectAsync("CAdESCOM.CadesSignedData"); try { // Значение свойства ContentEncoding должно быть задано // до заполнения свойства Content yield oSignedData.propset_ContentEncoding(cadesplugin.CADESCOM_BASE64_TO_BINARY); yield oSignedData.propset_Content(dataInBase64); yield oSignedData.VerifyCades(sSignedMessage, cadesplugin.CADESCOM_CADES_BES, true); } catch (err) { var e = cadesplugin.getLastError(err); var msg ="Failed to read signature. Error: " + e; console.log(e); resolve({'rezult':false,'value':oSignedData}); } resolve({'rezult':true,'value':oSignedData}); }, resolve, reject); }); }
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 14,079   Сказал «Спасибо»: 612 раз Поблагодарили: 2374 раз в 1867 постах
|
Цитата: Подскажите плиз, как из oSignedData вытащить данные сертификата.
ответ что делать есть в 10 сообщении, 5 дней назад. Цитата:Модифицировал пример верификации, что бы он возвращал oSignedData.
Приложить пример (html+js) есть вариант, иначе получается - идти тем же путём...? у oSignedData есть Signers, в цикле получить Item[i].Certificate и получить необходимые атрибуты сертификата подписанта. |
|
 1 пользователь поблагодарил Андрей * за этот пост.
|
Denson оставлено 14.11.2022(UTC)
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 14,079   Сказал «Спасибо»: 612 раз Поблагодарили: 2374 раз в 1867 постах
|
|
|
 1 пользователь поблагодарил Андрей * за этот пост.
|
Denson оставлено 15.11.2022(UTC)
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 07.11.2022(UTC) Сообщений: 8
Сказал(а) «Спасибо»: 6 раз
|
Автор: Андрей *  Цитата: Подскажите плиз, как из oSignedData вытащить данные сертификата.
ответ что делать есть в 10 сообщении, 5 дней назад. Цитата:Модифицировал пример верификации, что бы он возвращал oSignedData.
Приложить пример (html+js) есть вариант, иначе получается - идти тем же путём...? у oSignedData есть Signers, в цикле получить Item[i].Certificate и получить необходимые атрибуты сертификата подписанта. Тэкс. В противовес игнорирования специалистами криптопро, ответ найден! Кому интересно "как вытащить из sig данные подписанта"? function getInfoFromSignedData(sSignedMessage) { let signersTxt = []; let messageErr = "" // В данном случае закодирована строка "Some Data." let dataInBase64 = "U29tZSBEYXRhLg=="; // любые данные return new Promise(function (resolve, reject) { cadesplugin.async_spawn(function* (args) { let oSignedData = yield cadesplugin.CreateObjectAsync("CAdESCOM.CadesSignedData"); try { yield oSignedData.propset_ContentEncoding(cadesplugin.CADESCOM_BASE64_TO_BINARY); yield oSignedData.propset_Content(dataInBase64); yield oSignedData.VerifyCades(sSignedMessage, cadesplugin.CADESCOM_CADES_BES, true); } catch (err) { // гасим ошибку если верификация не прошла // нам важны только аттрибуты подписи let e = cadesplugin.getLastError(err); messageErr ="Failed to read signature. Error: " + e; console.log(messageErr); } let signers, signersCnt, SubjectName, ValidFromDate, ValidToDate, SerialNumber, IssuerName, Version; try { signers = yield oSignedData.Signers; signersCnt = yield signers.Count; for (let i = 1; i <= signersCnt; i++) { let signer; try { signer = yield signers.Item(i); let cert = yield signer.Certificate; SubjectName = yield cert.SubjectName; ValidFromDate = new Date((yield cert.ValidFromDate)); ValidToDate = new Date((yield cert.ValidToDate)); SerialNumber = yield cert.SerialNumber; IssuerName = yield cert.IssuerName; Version = yield cert.Version; signersTxt.push({ "SubjectName": SubjectName, "ValidFromDate": ValidFromDate, "ValidToDate": ValidToDate, "SerialNumber": SerialNumber, "IssuerName": IssuerName, "Version": Version }); } catch (ex) { messageErr = "Ошибка при получении аттрибутов подписи: " + cadesplugin.getLastError(ex); console.log(messageErr); return; } } } catch (ex) { messageErr = "Ошибка при получении подписи или количества: " + cadesplugin.getLastError(ex); console.log(messageErr); return; } resolve({'rezult':true,'value':signersTxt}); }, resolve, reject); }); }
Отредактировано пользователем 15 ноября 2022 г. 20:48:44(UTC)
| Причина: Не указана
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 14,079   Сказал «Спасибо»: 612 раз Поблагодарили: 2374 раз в 1867 постах
|
Автор: Denson  Автор: Андрей *  Цитата: Подскажите плиз, как из oSignedData вытащить данные сертификата.
ответ что делать есть в 10 сообщении, 5 дней назад. Цитата:Модифицировал пример верификации, что бы он возвращал oSignedData.
Приложить пример (html+js) есть вариант, иначе получается - идти тем же путём...? у oSignedData есть Signers, в цикле получить Item[i].Certificate и получить необходимые атрибуты сертификата подписанта. Тэкс. В противовес игнорирования специалистами криптопро, ответ найден! Кому интересно "как вытащить из sig данные подписанта"? function getInfoFromSignedData(sSignedMessage) { let signersTxt = []; let messageErr = "" // В данном случае закодирована строка "Some Data." let dataInBase64 = "U29tZSBEYXRhLg=="; // любые данные return new Promise(function (resolve, reject) { cadesplugin.async_spawn(function* (args) { let oSignedData = yield cadesplugin.CreateObjectAsync("CAdESCOM.CadesSignedData"); try { yield oSignedData.propset_ContentEncoding(cadesplugin.CADESCOM_BASE64_TO_BINARY); yield oSignedData.propset_Content(dataInBase64); yield oSignedData.VerifyCades(sSignedMessage, cadesplugin.CADESCOM_CADES_BES, true); } catch (err) { // гасим ошибку если верификация не прошла // нам важны только аттрибуты подписи let e = cadesplugin.getLastError(err); messageErr ="Failed to read signature. Error: " + e; console.log(messageErr); } let signers, signersCnt, SubjectName, ValidFromDate, ValidToDate, SerialNumber, IssuerName, Version; try { signers = yield oSignedData.Signers; signersCnt = yield signers.Count; for (let i = 1; i <= signersCnt; i++) { let signer; try { signer = yield signers.Item(i); let cert = yield signer.Certificate; SubjectName = yield cert.SubjectName; ValidFromDate = new Date((yield cert.ValidFromDate)); ValidToDate = new Date((yield cert.ValidToDate)); SerialNumber = yield cert.SerialNumber; IssuerName = yield cert.IssuerName; Version = yield cert.Version; signersTxt.push({ "SubjectName": SubjectName, "ValidFromDate": ValidFromDate, "ValidToDate": ValidToDate, "SerialNumber": SerialNumber, "IssuerName": IssuerName, "Version": Version }); } catch (ex) { messageErr = "Ошибка при получении аттрибутов подписи: " + cadesplugin.getLastError(ex); console.log(messageErr); return; } } } catch (ex) { messageErr = "Ошибка при получении подписи или количества: " + cadesplugin.getLastError(ex); console.log(messageErr); return; } resolve({'rezult':true,'value':signersTxt}); }, resolve, reject); }); }
Вы на форуме ожидали получить готовый код? Алгоритм, перечень объектов и ссылки на документацию предоставлены, что и видно из преложенной реализации. |
|
 1 пользователь поблагодарил Андрей * за этот пост.
|
Denson оставлено 15.11.2022(UTC)
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 07.11.2022(UTC) Сообщений: 8
Сказал(а) «Спасибо»: 6 раз
|
Автор: Андрей *  Автор: Denson  Автор: Андрей *  Цитата: Подскажите плиз, как из oSignedData вытащить данные сертификата.
ответ что делать есть в 10 сообщении, 5 дней назад. Цитата:Модифицировал пример верификации, что бы он возвращал oSignedData.
Приложить пример (html+js) есть вариант, иначе получается - идти тем же путём...? у oSignedData есть Signers, в цикле получить Item[i].Certificate и получить необходимые атрибуты сертификата подписанта. Тэкс. В противовес игнорирования специалистами криптопро, ответ найден! Кому интересно "как вытащить из sig данные подписанта"? function getInfoFromSignedData(sSignedMessage) { let signersTxt = []; let messageErr = "" // В данном случае закодирована строка "Some Data." let dataInBase64 = "U29tZSBEYXRhLg=="; // любые данные return new Promise(function (resolve, reject) { cadesplugin.async_spawn(function* (args) { let oSignedData = yield cadesplugin.CreateObjectAsync("CAdESCOM.CadesSignedData"); try { yield oSignedData.propset_ContentEncoding(cadesplugin.CADESCOM_BASE64_TO_BINARY); yield oSignedData.propset_Content(dataInBase64); yield oSignedData.VerifyCades(sSignedMessage, cadesplugin.CADESCOM_CADES_BES, true); } catch (err) { // гасим ошибку если верификация не прошла // нам важны только аттрибуты подписи let e = cadesplugin.getLastError(err); messageErr ="Failed to read signature. Error: " + e; console.log(messageErr); } let signers, signersCnt, SubjectName, ValidFromDate, ValidToDate, SerialNumber, IssuerName, Version; try { signers = yield oSignedData.Signers; signersCnt = yield signers.Count; for (let i = 1; i <= signersCnt; i++) { let signer; try { signer = yield signers.Item(i); let cert = yield signer.Certificate; SubjectName = yield cert.SubjectName; ValidFromDate = new Date((yield cert.ValidFromDate)); ValidToDate = new Date((yield cert.ValidToDate)); SerialNumber = yield cert.SerialNumber; IssuerName = yield cert.IssuerName; Version = yield cert.Version; signersTxt.push({ "SubjectName": SubjectName, "ValidFromDate": ValidFromDate, "ValidToDate": ValidToDate, "SerialNumber": SerialNumber, "IssuerName": IssuerName, "Version": Version }); } catch (ex) { messageErr = "Ошибка при получении аттрибутов подписи: " + cadesplugin.getLastError(ex); console.log(messageErr); return; } } } catch (ex) { messageErr = "Ошибка при получении подписи или количества: " + cadesplugin.getLastError(ex); console.log(messageErr); return; } resolve({'rezult':true,'value':signersTxt}); }, resolve, reject); }); }
Вы на форуме ожидали получить готовый код? Алгоритм, перечень объектов и ссылки на документацию предоставлены, что и видно из преложенной реализации. Вообще то да. Именно об этом и спрашивал. Мне эти подписи и прочее в печень не еб.ись. Мне надо сделать, и дальше идти. Спросил как делать, никто не помог. У меня 100500 тыщ задач разноплановых. А вместо помощи, умников из себя строят. Потому и живем так.... ps Андрей, спасибо за совет по подписи! Раздобыл нормальную, отсоединённую, всё получилось. Спасибо. Отредактировано пользователем 15 ноября 2022 г. 22:29:51(UTC)
| Причина: Не указана
|
|
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 07.11.2022(UTC) Сообщений: 8
Сказал(а) «Спасибо»: 6 раз
|
Автор: Андрей *  Вы на форуме ожидали получить готовый код?
Алгоритм, перечень объектов и ссылки на документацию предоставлены, что и видно из преложенной реализации. Еще вопрос, плиз, как вытащить SigningTime? Всё нормально кроме await signer.SigningTime — на ней сваливается в ошибку. Объект или свойство не найдено. (0x80092004) signer = await signers.Item(i); let cert = await signer.Certificate; SubjectName = await cert.SubjectName; ValidFromDate = new Date(await cert.ValidFromDate); ValidToDate = new Date(await cert.ValidToDate); SerialNumber = await cert.SerialNumber; IssuerName = await cert.IssuerName; Version = await cert.Version; SigningTime = await signer.SigningTimeЧто не так делаю? Отредактировано пользователем 25 ноября 2022 г. 16:00:42(UTC)
| Причина: Не указана
|
|
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 13.05.2022(UTC) Сообщений: 26  Откуда: Moscow
|
Просто берёте полученный файл с подписью: Код:<?xml version="1.0" encoding="utf-8"?>
<urn:insuredPerson xmlns:urn="urn:ru:fss:integration:types:rpu:InsuredPerson:v01" xmlns:v02="http://www.fss.ru/integration/types/person/v02" xmlns:v01="http://www.fss.ru/integration/types/common/v01">
<urn:fullName>
<v02:firstName>Санчус</v02:firstName>
<v02:lastName>Свиридов</v02:lastName>
<v02:middleName>Паулес</v02:middleName>
</urn:fullName>
<urn:birthDate>1967-08-26</urn:birthDate>
<urn:gender>MALE</urn:gender>
<urn:snils>00466784861</urn:snils>
<urn:inn>773470231431</urn:inn>
<urn:identityDocument>
<urn:passport>
<urn:series>4500</urn:series>
<urn:number>676767</urn:number>
<urn:issueDate>2006-09-03</urn:issueDate>
<urn:whoIssued>ПВО ОВД р-на "Митино" г. Москвы КП 772-087</urn:whoIssued>
</urn:passport>
</urn:identityDocument>
<urn:regAddress>
<urn:fiasAddress>
<v01:houseGuid>a10c715d-1749-4012-aa5a-76be71fa6181</v01:houseGuid>
</urn:fiasAddress>
<urn:postalCode>125222</urn:postalCode>
</urn:regAddress>
<Signature xmlns="http://www.w3.org/2000/09/xmldsig#" Id="Signature1-217a816a2-253a-721b-c835-a817609eca1">
<SignedInfo>
<CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
<SignatureMethod Algorithm="urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34102012-gostr34112012-256"/>
<Reference URI="">
<Transforms>
<Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
<Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
</Transforms>
<DigestMethod Algorithm="urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34112012-256"/>
<DigestValue>Wir1ji8IzLFLx4QM0pQQx/ftlLnf4jBgZaqOS+9g84Q=</DigestValue>
</Reference>
</SignedInfo>
<SignatureValue>uBhWPQ9lnNX9b26qi8pcgWIqkBCGTUUIdX86Fa7zNS4jrfucsnyvfKODXAIx3usn
fpO2wOBfpdCw/V8RzY6Jig==</SignatureValue>
<KeyInfo>
<X509Data>
<X509Certificate>MIII5zCCCJSgAwIBAgIRAuhYuABBrzi9TQnp9g5hR3cwCgYIKoUDBwEBAwIwggEP
MRgwFgYFKoUDZAESDTEwMjQwMDE0MzQwNDkxGjAYBggqhQMDgQMBARIMMDA0MDI5
MDE3OTgxMQswCQYDVQQGEwJSVTEeMBwGA1UECAwVNDAg0JrQsNC70YPQttGB0LrQ
sNGPMRkwFwYDVQQHDBDQsy4g0JrQsNC70YPQs9CwMSwwKgYDVQQJDCPQv9C10YAu
INCi0LXRgNC10L3QuNC90YHQutC40Lkg0LQuNjEnMCUGA1UECgwe0JDQniDQmtCQ
0JvQo9CT0JAg0JDQodCi0KDQkNCbMTgwNgYDVQQDDC/QotC10YHRgtC+0LLRi9C5
INCQ0J4g0JrQkNCb0KPQk9CQINCQ0KHQotCg0JDQmzAeFw0yMjExMDIxMTAxMTFa
Fw0yNDAyMDIxMTExMTFaMIICnjEsMCoGA1UECQwj0YPQuyDQptC40L7Qu9C60L7Q
stGB0LrQvtCz0L4g0LQgMTAxFTATBgUqhQNkBBIKOTY4MzY3ODU3MTEfMB0GCSqG
SIb3DQEJARYQdGVzdEBleGFtcGxlLmNvbTEYMBYGBSqFA2QBEg02MjEyNzEzNDA3
NDQwMRYwFAYFKoUDZAMSCzQwNzI4MzcwNzc2MRowGAYIKoUDA4EDAQESDDk2Mjg3
MDY4NTc0ODEZMBcGA1UEDAwQ0JTQuNGA0LXQutGC0L7RgDEiMCAGA1UEKgwZ0KLQ
tdGB0YIg0KLQtdGB0YLQvtCy0LjRhzEVMBMGA1UEBAwM0KLQtdGB0YLQvtCyMQsw
CQYDVQQGEwJSVTEtMCsGA1UECAwkNDAg0JrQsNC70YPQttGB0LrQsNGPINC+0LHQ
u9Cw0YHRgtGMMRUwEwYDVQQHDAzQmtCw0LvRg9Cz0LAxgZIwgY8GA1UECgyBh9Ce
0LHRidC10YHRgtCy0L4g0YEg0L7Qs9GA0LDQvdC40YfQtdC90L3QvtC5INC+0YLQ
stC10YLRgdGC0LLQtdC90L3QvtGB0YLRjNGOINCh0LvRg9C20LHQsCDQvdCw0LvQ
vtCz0L7Qv9C70LDRgtC10LvRjNGJ0LjQutCwX9GC0LXRgdGCXzEVMBMGA1UECwwM
0KTQmNCb0JjQkNCbMYGSMIGPBgNVBAMMgYfQntCx0YnQtdGB0YLQstC+INGBINC+
0LPRgNCw0L3QuNGH0LXQvdC90L7QuSDQvtGC0LLQtdGC0YHRgtCy0LXQvdC90L7R
gdGC0YzRjiDQodC70YPQttCx0LAg0L3QsNC70L7Qs9C+0L/Qu9Cw0YLQtdC70YzR
idC40LrQsF/RgtC10YHRgl8wZjAfBggqhQMHAQEBATATBgcqhQMCAiQABggqhQMH
AQECAgNDAARAEcoaF37vcQ8zM3LBpSsbbGExh0pm3Zpn1WYQ0ZEF76b2guzWcvkA
p6HTqOIdcUYFmoptmVwk5DCePZFSuUeFbKOCBC8wggQrMB0GA1UdJQQWMBQGCCsG
AQUFBwMCBggrBgEFBQcDBDAOBgNVHQ8BAf8EBAMCA/gwJwYFKoUDZG8EHgwcQ3J5
cHRvLVBybyBHT1NUIFIgMzQuMTAtMjAxMjAMBgUqhQNkcgQDAgEAMCcGCSsGAQQB
gjcVCgQaMBgwCgYIKwYBBQUHAwIwCgYIKwYBBQUHAwQwUQYIKwYBBQUHAQEERTBD
MEEGCCsGAQUFBzAChjVodHRwOi8vcmVnc2VydmljZS5rZXlkaXNrLnJ1L3Rlc3Rj
YS9yb290L3Rlc3RjYTEzLmNydDAdBgNVHSAEFjAUMAgGBiqFA2RxATAIBgYqhQNk
cQIwHwYJKwYBBAGCNxUHBBIwEAYIKoUDAgIuAAgCAQECAQAwggFKBgUqhQNkcASC
AT8wggE7DFPQodCa0JfQmCAi0JrRgNC40L/RgtC+0J/QoNCeIENTUCIgKNCy0LXR
gNGB0LjRjyA0LjApICjQuNGB0L/QvtC70L3QtdC90LjQtSAyIC1CYXNlKQyBkdCf
0YDQvtCz0YDQsNC80LzQvdC+LdCw0L/Qv9Cw0YDQsNGC0L3Ri9C5INC60L7QvNC/
0LvQtdC60YEgItCj0LTQvtGB0YLQvtCy0LXRgNGP0Y7RidC40Lkg0YbQtdC90YLR
gCAi0JrRgNC40L/RgtC+0J/RgNC+INCj0KYiINCy0LXRgNGB0LjQuNC4IDIuMCIM
IdCh0KQvMTI0LTMzODAg0L7RgiAxMSDQvNCw0Y8gMjAxOAwt0KHQpC8xMjgtMzU5
MiDQvtGCIDE3INC+0LrRgtGP0LHRgNGPIDIwMTgg0LMuMEUGA1UdHwQ+MDwwOqA4
oDaGNGh0dHA6Ly9yZWdzZXJ2aWNlLmtleWRpc2sucnUvdGVzdGNhL2NybC90ZXN0
Y2ExMy5jcmwwggFRBgNVHSMEggFIMIIBRIAUY9Owge/CYLFC/MNqxXdiywXNA8uh
ggEXpIIBEzCCAQ8xGDAWBgUqhQNkARINMTAyNDAwMTQzNDA0OTEaMBgGCCqFAwOB
AwEBEgwwMDQwMjkwMTc5ODExCzAJBgNVBAYTAlJVMR4wHAYDVQQIDBU0MCDQmtCw
0LvRg9C20YHQutCw0Y8xGTAXBgNVBAcMENCzLiDQmtCw0LvRg9Cz0LAxLDAqBgNV
BAkMI9C/0LXRgC4g0KLQtdGA0LXQvdC40L3RgdC60LjQuSDQtC42MScwJQYDVQQK
DB7QkNCeINCa0JDQm9Cj0JPQkCDQkNCh0KLQoNCQ0JsxODA2BgNVBAMML9Ci0LXR
gdGC0L7QstGL0Lkg0JDQniDQmtCQ0JvQo9CT0JAg0JDQodCi0KDQkNCbghEC1ACK
AJeuNJxH//E/LK8J9jAdBgNVHQ4EFgQUni5IuEqGXpjwDCy5HEeVw9g8xnswCgYI
KoUDBwEBAwIDQQAIv99pTffSQcvxdBXPfdX3efDx8HjVIXEKVMRoLFcY5J34FANp
CXkZFrY2QsMjMqb+67zF9dO8FLZEFW49ts/0</X509Certificate>
</X509Data>
</KeyInfo>
</Signature></urn:insuredPerson>
Между тегами <X509Certificate></X509Certificate> сам сертификат находится в Base64_encode уже. Запускаете на PHP функцию openssl_x509_parse() Код:$cert_body='MIII5zCCCJSgAwIBAgIRAuhYuABBrzi9TQnp9g5hR3cwCgYIKoUDBwEBAwIwggEP
MRgwFgYFKoUDZAESDTEwMjQwMDE0MzQwNDkxGjAYBggqhQMDgQMBARIMMDA0MDI5
MDE3OTgxMQswCQYDVQQGEwJSVTEeMBwGA1UECAwVNDAg0JrQsNC70YPQttGB0LrQ
sNGPMRkwFwYDVQQHDBDQsy4g0JrQsNC70YPQs9CwMSwwKgYDVQQJDCPQv9C10YAu
INCi0LXRgNC10L3QuNC90YHQutC40Lkg0LQuNjEnMCUGA1UECgwe0JDQniDQmtCQ
0JvQo9CT0JAg0JDQodCi0KDQkNCbMTgwNgYDVQQDDC/QotC10YHRgtC+0LLRi9C5
INCQ0J4g0JrQkNCb0KPQk9CQINCQ0KHQotCg0JDQmzAeFw0yMjExMDIxMTAxMTFa
Fw0yNDAyMDIxMTExMTFaMIICnjEsMCoGA1UECQwj0YPQuyDQptC40L7Qu9C60L7Q
stGB0LrQvtCz0L4g0LQgMTAxFTATBgUqhQNkBBIKOTY4MzY3ODU3MTEfMB0GCSqG
SIb3DQEJARYQdGVzdEBleGFtcGxlLmNvbTEYMBYGBSqFA2QBEg02MjEyNzEzNDA3
NDQwMRYwFAYFKoUDZAMSCzQwNzI4MzcwNzc2MRowGAYIKoUDA4EDAQESDDk2Mjg3
MDY4NTc0ODEZMBcGA1UEDAwQ0JTQuNGA0LXQutGC0L7RgDEiMCAGA1UEKgwZ0KLQ
tdGB0YIg0KLQtdGB0YLQvtCy0LjRhzEVMBMGA1UEBAwM0KLQtdGB0YLQvtCyMQsw
CQYDVQQGEwJSVTEtMCsGA1UECAwkNDAg0JrQsNC70YPQttGB0LrQsNGPINC+0LHQ
u9Cw0YHRgtGMMRUwEwYDVQQHDAzQmtCw0LvRg9Cz0LAxgZIwgY8GA1UECgyBh9Ce
0LHRidC10YHRgtCy0L4g0YEg0L7Qs9GA0LDQvdC40YfQtdC90L3QvtC5INC+0YLQ
stC10YLRgdGC0LLQtdC90L3QvtGB0YLRjNGOINCh0LvRg9C20LHQsCDQvdCw0LvQ
vtCz0L7Qv9C70LDRgtC10LvRjNGJ0LjQutCwX9GC0LXRgdGCXzEVMBMGA1UECwwM
0KTQmNCb0JjQkNCbMYGSMIGPBgNVBAMMgYfQntCx0YnQtdGB0YLQstC+INGBINC+
0LPRgNCw0L3QuNGH0LXQvdC90L7QuSDQvtGC0LLQtdGC0YHRgtCy0LXQvdC90L7R
gdGC0YzRjiDQodC70YPQttCx0LAg0L3QsNC70L7Qs9C+0L/Qu9Cw0YLQtdC70YzR
idC40LrQsF/RgtC10YHRgl8wZjAfBggqhQMHAQEBATATBgcqhQMCAiQABggqhQMH
AQECAgNDAARAEcoaF37vcQ8zM3LBpSsbbGExh0pm3Zpn1WYQ0ZEF76b2guzWcvkA
p6HTqOIdcUYFmoptmVwk5DCePZFSuUeFbKOCBC8wggQrMB0GA1UdJQQWMBQGCCsG
AQUFBwMCBggrBgEFBQcDBDAOBgNVHQ8BAf8EBAMCA/gwJwYFKoUDZG8EHgwcQ3J5
cHRvLVBybyBHT1NUIFIgMzQuMTAtMjAxMjAMBgUqhQNkcgQDAgEAMCcGCSsGAQQB
gjcVCgQaMBgwCgYIKwYBBQUHAwIwCgYIKwYBBQUHAwQwUQYIKwYBBQUHAQEERTBD
MEEGCCsGAQUFBzAChjVodHRwOi8vcmVnc2VydmljZS5rZXlkaXNrLnJ1L3Rlc3Rj
YS9yb290L3Rlc3RjYTEzLmNydDAdBgNVHSAEFjAUMAgGBiqFA2RxATAIBgYqhQNk
cQIwHwYJKwYBBAGCNxUHBBIwEAYIKoUDAgIuAAgCAQECAQAwggFKBgUqhQNkcASC
AT8wggE7DFPQodCa0JfQmCAi0JrRgNC40L/RgtC+0J/QoNCeIENTUCIgKNCy0LXR
gNGB0LjRjyA0LjApICjQuNGB0L/QvtC70L3QtdC90LjQtSAyIC1CYXNlKQyBkdCf
0YDQvtCz0YDQsNC80LzQvdC+LdCw0L/Qv9Cw0YDQsNGC0L3Ri9C5INC60L7QvNC/
0LvQtdC60YEgItCj0LTQvtGB0YLQvtCy0LXRgNGP0Y7RidC40Lkg0YbQtdC90YLR
gCAi0JrRgNC40L/RgtC+0J/RgNC+INCj0KYiINCy0LXRgNGB0LjQuNC4IDIuMCIM
IdCh0KQvMTI0LTMzODAg0L7RgiAxMSDQvNCw0Y8gMjAxOAwt0KHQpC8xMjgtMzU5
MiDQvtGCIDE3INC+0LrRgtGP0LHRgNGPIDIwMTgg0LMuMEUGA1UdHwQ+MDwwOqA4
oDaGNGh0dHA6Ly9yZWdzZXJ2aWNlLmtleWRpc2sucnUvdGVzdGNhL2NybC90ZXN0
Y2ExMy5jcmwwggFRBgNVHSMEggFIMIIBRIAUY9Owge/CYLFC/MNqxXdiywXNA8uh
ggEXpIIBEzCCAQ8xGDAWBgUqhQNkARINMTAyNDAwMTQzNDA0OTEaMBgGCCqFAwOB
AwEBEgwwMDQwMjkwMTc5ODExCzAJBgNVBAYTAlJVMR4wHAYDVQQIDBU0MCDQmtCw
0LvRg9C20YHQutCw0Y8xGTAXBgNVBAcMENCzLiDQmtCw0LvRg9Cz0LAxLDAqBgNV
BAkMI9C/0LXRgC4g0KLQtdGA0LXQvdC40L3RgdC60LjQuSDQtC42MScwJQYDVQQK
DB7QkNCeINCa0JDQm9Cj0JPQkCDQkNCh0KLQoNCQ0JsxODA2BgNVBAMML9Ci0LXR
gdGC0L7QstGL0Lkg0JDQniDQmtCQ0JvQo9CT0JAg0JDQodCi0KDQkNCbghEC1ACK
AJeuNJxH//E/LK8J9jAdBgNVHQ4EFgQUni5IuEqGXpjwDCy5HEeVw9g8xnswCgYI
KoUDBwEBAwIDQQAIv99pTffSQcvxdBXPfdX3efDx8HjVIXEKVMRoLFcY5J34FANp
CXkZFrY2QsMjMqb+67zF9dO8FLZEFW49ts/0';
$arr_cert_parse = openssl_x509_parse($cert_body);
print_r($arr_cert_parse); // Получаем массив - где всё разложено уже по полочкам как надо!!!!
|
|
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 13.05.2022(UTC) Сообщений: 26  Откуда: Moscow
|
Давно делал, глянул свой пример, вот он как выглядит на PHP: Код: $cb = array();
$cb = openssl_x509_parse($val_body_certificate);
$array_cb = array(
'str_Serial_Number' => $cb['serialNumberHex'],
'str_Issuer_O' => $cb['issuer']['O'],
'str_Issuer_CN' => $cb['issuer']['CN'],
'str_Issuer_emailAddress' => $cb['issuer']['emailAddress'],
'str_Valid_From' => $cb['validFrom'],
'str_Valid_To' => $cb['validTo'],
'str_Subject_O' => $cb['subject']['O'],
'str_Subject_GN' => $cb['subject']['GN'],
'str_Subject_SN' => $cb['subject']['SN'],
'str_Subject_C' => $cb['subject']['C'],
'str_Subject_L' => $cb['subject']['L'],
'str_Subject_title' => $cb['subject']['title'],
'str_Subject_CN' => $cb['subject']['CN'],
'str_Subject_INN' => $cb['subject']['INN'],
'str_Subject_OGRN' => $cb['subject']['OGRN'],
'str_Subject_SNILS' => $cb['subject']['SNILS'],
'str_Subject_REGNUM' => $cb['subject']['REGNUM'],
'str_Subject_KPP' => $cb['subject']['KPP'],
'str_Subject_OGRNIP' => $cb['subject']['OGRNIP'],
'str_Subject_emailAddress' => $cb['subject']['emailAddress'],
'str_Hash' => $cb['hash'],
'str_Signature_Algorithm' => $cb['signatureTypeLN'],
'str_Empty' => '',
);
$cb_json = json_encode($array_cb);
header("Content-type: application/json; charset=utf-8");
echo $cb_json;
|
|
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close