Ключевое слово в защите информации
ключевое слово
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

2 Страницы<12
Опции
К последнему сообщению К первому непрочитанному
Offline Андрей *  
#11 Оставлено : 9 ноября 2022 г. 22:17:47(UTC)
Андрей *

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 14,079
Мужчина
Российская Федерация

Сказал «Спасибо»: 612 раз
Поблагодарили: 2374 раз в 1867 постах
Автор: Denson Перейти к цитате
Автор: Андрей * Перейти к цитате
Здравствуйте.

Подключить плагин, посмотреть в документации примеры (там, где проверка .VerifyCades )
https://docs.cryptopro.r...es/plugin/plugin-samples

модифицировать один из примеров (с файлом) или написать с нуля:
https://cryptopro.ru/sit...cades/demopage/main.html


Приветствую.
Возможно что-то не так делаю.
На верификацию передаю просто строку левую в 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.
Возможно найдутся мысли...
Если там, конечно, нет вложенного сертификата подписанта, то ответ плагин уже дал верный.
Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Андрей * за этот пост.
Denson оставлено 15.11.2022(UTC)
Offline Denson  
#12 Оставлено : 14 ноября 2022 г. 14:12:58(UTC)
Denson

Статус: Новичок

Группы: Участники
Зарегистрирован: 07.11.2022(UTC)
Сообщений: 8

Сказал(а) «Спасибо»: 6 раз
Автор: Андрей * Перейти к цитате
Автор: Denson Перейти к цитате
Автор: Андрей * Перейти к цитате
Здравствуйте.

Подключить плагин, посмотреть в документации примеры (там, где проверка .VerifyCades )
https://docs.cryptopro.r...es/plugin/plugin-samples

модифицировать один из примеров (с файлом) или написать с нуля:
https://cryptopro.ru/sit...cades/demopage/main.html


Приветствую.
Возможно что-то не так делаю.
На верификацию передаю просто строку левую в 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);
});
}
Offline Андрей *  
#13 Оставлено : 14 ноября 2022 г. 15:00:05(UTC)
Андрей *

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 14,079
Мужчина
Российская Федерация

Сказал «Спасибо»: 612 раз
Поблагодарили: 2374 раз в 1867 постах
Цитата:

Подскажите плиз, как из oSignedData вытащить данные сертификата.

ответ что делать есть в 10 сообщении, 5 дней назад.

Цитата:
Модифицировал пример верификации, что бы он возвращал oSignedData.

Приложить пример (html+js) есть вариант, иначе получается - идти тем же путём...?

у oSignedData есть Signers, в цикле получить Item[i].Certificate и получить необходимые атрибуты сертификата подписанта.

Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Андрей * за этот пост.
Denson оставлено 14.11.2022(UTC)
Offline Андрей *  
#14 Оставлено : 14 ноября 2022 г. 15:01:08(UTC)
Андрей *

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 14,079
Мужчина
Российская Федерация

Сказал «Спасибо»: 612 раз
Поблагодарили: 2374 раз в 1867 постах
и в сообщении 3, неделю назад.
Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Андрей * за этот пост.
Denson оставлено 15.11.2022(UTC)
Offline Denson  
#15 Оставлено : 15 ноября 2022 г. 20:31:00(UTC)
Denson

Статус: Новичок

Группы: Участники
Зарегистрирован: 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)  | Причина: Не указана

Offline Андрей *  
#16 Оставлено : 15 ноября 2022 г. 21:27:00(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);
});
}


Вы на форуме ожидали получить готовый код?

Алгоритм, перечень объектов и ссылки на документацию предоставлены,
что и видно из преложенной реализации.
Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Андрей * за этот пост.
Denson оставлено 15.11.2022(UTC)
Offline Denson  
#17 Оставлено : 15 ноября 2022 г. 21:58:59(UTC)
Denson

Статус: Новичок

Группы: Участники
Зарегистрирован: 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)  | Причина: Не указана

Offline Denson  
#18 Оставлено : 25 ноября 2022 г. 15:47:39(UTC)
Denson

Статус: Новичок

Группы: Участники
Зарегистрирован: 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)  | Причина: Не указана

Offline MikhailSSS  
#19 Оставлено : 13 декабря 2022 г. 15:12:10(UTC)
MikhailSSS

Статус: Участник

Группы: Участники
Зарегистрирован: 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); // Получаем массив - где всё разложено уже по полочкам как надо!!!!


Offline MikhailSSS  
#20 Оставлено : 13 декабря 2022 г. 15:19:34(UTC)
MikhailSSS

Статус: Участник

Группы: Участники
Зарегистрирован: 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;
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
2 Страницы<12
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.