Статус: Новичок
Группы: Участники
Зарегистрирован: 20.05.2022(UTC) Сообщений: 6
|
Обращаюсь к КриптоПро через технологию COM из PHP. В качестве образца взял пример с этого же сайтаКод:
// Создаю объект Store и открываю его
$oStore = new com("CAdESCOM.Store");
$oStore->Open(2);
// Перебираю хранилище и нахожу необходимый сертификат
foreach ($oStore->Certificates as $fCert) {
if (emfazaCertSerial == $fCert->SerialNumber) {
$oCert = $fCert;
break;
}
}
// Создаю объект CPSigner и назначаю ему сертификат
$oSigner = new com("CAdESCOM.CPSigner");
$oSigner->Certificate = $oCert;
// Создаю объект CadesSignedData и заполняю контент
$oSignedData = new com('CAdESCOM.CadesSignedData');
$oSignedData->Content = 'Some very significant message';
// Пытаюсь получить подпись
$sSignedData = $oSignedData->Sign($oSigner, False);
На выходе получаю ошибку: Код:
[Fri May 20 14:40:51 2022] PHP Fatal error: Uncaught com_exception: <b>Source:</b> CAdESCOM.CadesSignedData.1<br/><b>Description:</b> ASN1. in E:\www\soap\client.php:30
Stack trace:
#0 E:\www\soap\client.php(30): com->Sign(Object(com), false)
#1 {main}
thrown in E:\www\soap\client.php on line 30
[Fri May 20 14:40:51 2022] 127.0.0.1:62820 [200]: GET /client.php - Uncaught com_exception: <b>Source:</b> CAdESCOM.CadesSignedData.1<br/><b>Description:</b> ASN1. in E:\www\soap\client.php:30
Stack trace:
#0 E:\www\soap\client.php(30): com->Sign(Object(com), false)
#1 {main}
thrown in E:\www\soap\client.php on line 30
[Fri May 20 14:40:51 2022] 127.0.0.1:62820 Closing
Поиск по интернету не помог в поиске причины этой ошибки. Подскажите, что я не учёл, спасибо!
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 12,718 Сказал «Спасибо»: 500 раз Поблагодарили: 2053 раз в 1593 постах
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 12,718 Сказал «Спасибо»: 500 раз Поблагодарили: 2053 раз в 1593 постах
|
Цитата:// Перебираю хранилище и нахожу необходимый сертификат а если "не нахожу?" |
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 20.05.2022(UTC) Сообщений: 6
|
Автор: Андрей * на Windows?
Безусловно. Автор: Андрей * Да, смотрел, но это решение не применимо, т.к. его возможно использовать только на UBUNTU.
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 20.05.2022(UTC) Сообщений: 6
|
Автор: Андрей * Цитата:// Перебираю хранилище и нахожу необходимый сертификат а если "не нахожу?" Это частность, не обязательная для прототипа. Код вообще не работает по непонятной причине.
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 12,718 Сказал «Спасибо»: 500 раз Поблагодарили: 2053 раз в 1593 постах
|
Тогда выведите информацию из найденного oCert + есть ли ссылка на закрытый ключ + под какой учётной записью запускается процесс и дали ли права на контейнер (через оснастку сертификатов можно посмотреть права)? Сертификаты (локальный компьютер)->Личное->Сертификаты->Все задачи->Управление закрытыми ключами Как в базе знаний: https://support.cryptopr...sluzhbkh-windows-iis-etc |
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 20.05.2022(UTC) Сообщений: 6
|
Автор: Андрей * Тогда выведите информацию из найденного oCert Не нашёл документации по этому объекту. Не знаю, какие поля и методы у него есть, к которым следует обратиться. Автор: Андрей * + под какой учётной записью запускается процесс
Под администратором. Автор: Андрей * и дали ли права на контейнер (через оснастку сертификатов можно посмотреть права)? Ушёл изучать вопрос. Ещё один момент. Запустил VBS, скопировав пример отсюдаЗаменив sSerialNumber и sTSAAddress на свои значения. В результате выполнения получаю ошибку:Встречено неверное значение тега ASN1 Код 8009310B, Источник: CAdESCOM.CadesSignedData.1 Собственно это вызов sSignedData = oSignedData.Sign(oSigner, False) Что полностью соответствует моему вызову на PHP: $sSignedData = $oSignedData->Sign($oSigner, False); Возможно, это сообщение как-то может локализовать проблему? Пойду погуглю про эту ошибку.
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 12,718 Сказал «Спасибо»: 500 раз Поблагодарили: 2053 раз в 1593 постах
|
|
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 20.05.2022(UTC) Сообщений: 6
|
Автор: Андрей * https://docs.cryptopro.ru/cades/reference/cadescom/cadescom_class/cpcertificate О как! Не ожидал, что элемент из коллекции Certificates должен называться CPCertificate. Цитата:есть ли ссылка на закрытый ключ var_dump($oCert->HasPrivateKey()) возвращает true. var_dump($oCert->PrivateKey) возвращает object(variant) var_dump($oCert->PrivateKey->ContainerName) возвращает правильное имя контейнера. Так что, видимо, ссылка на закрытый ключ есть. Цитата:и дали ли права на контейнер Права на контейнер есть. Все проверки пройдены. Но вызов $sSignedData = $oSignedData->Sign($oSigner, False) продолжает приводить к ошибке.
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 12,718 Сказал «Спасибо»: 500 раз Поблагодарили: 2053 раз в 1593 постах
|
Автор: Терентий Автор: Андрей * https://docs.cryptopro.ru/cades/reference/cadescom/cadescom_class/cpcertificate О как! Не ожидал, что элемент из коллекции Certificates должен называться CPCertificate. Нет. |
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close