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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline AlexKrym  
#1 Оставлено : 30 марта 2023 г. 12:19:02(UTC)
AlexKrym

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

Группы: Участники
Зарегистрирован: 07.03.2023(UTC)
Сообщений: 14
Российская Федерация
Откуда: Крым

Сказал(а) «Спасибо»: 2 раз
Здравствуйте!
Есть два сертфиката, выданных СертумПро. Одним подпись создается успешно, а другим нет через php.
Корневой и промежуточный сертификаты установлены, которые прислал сам УЦ.

Удивительно, то что, используя сертификат для подписания средствами командной строки, то подпись создается успешно, правда процесс занимает около 3 секунд в первый раз. При повторном запуске уже быстро подписывается.
Если использовать сертификат, которым можно без ошибок подписать средствами php, то с ним подпись создается достаточно быстро(до секунды) и средствами php, и через CLI.

Текст ошибки из php: "A certificate chain could not be built to a trusted root authority.(0x800B010A)"

Команда подписи через CLI:
Цитата:
cryptcp -sign -addchain -thumbprint <cert_thumbprint> -attached message.txt


Код php:
Цитата:

public function signString(SignStringCommand $command): Contracts\Response
{
$signResponse = new SignResponse();
$thumbprint = config('cryptopro.certificateThumbprint');
$pinKey = config('cryptopro.certificatePinKey');

try {
$cert = $this->repository->find(CERTIFICATE_FIND_SHA1_HASH, $thumbprint);
if (!$cert) {
throw new \DomainException(sprintf('Not found certificate by thumbprint %s', $thumbprint));
}

$signer = new \CPSigner();
$signer->set_Certificate($cert);
//$signer->set_KeyPin($pinKey);

$sd = new \CPSignedData();
$sd->set_Content($command->getString());

/**
* @see https://docs.cryptopro.r.../icpsigneddata2signcades
*/
$signResponse->setPayload((string) $sd->SignCades($signer, CADES_BES, $command->getSignType(), ENCODE_BASE64));
} catch (\Throwable $e) {
$signResponse->setPayload($e->getMessage());
$signResponse->setStatus(Response::HTTP_BAD_REQUEST);
}

return $signResponse;
}


Параллельно веду переписку с УЦ. Собственно неясно это проблема с php расширением или с сертфикатом.
Служба поддержки УЦ предложила установить еще список отозванных сертификатов, но не помогло.


Offline AlexKrym  
#2 Оставлено : 31 марта 2023 г. 15:18:57(UTC)
AlexKrym

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

Группы: Участники
Зарегистрирован: 07.03.2023(UTC)
Сообщений: 14
Российская Федерация
Откуда: Крым

Сказал(а) «Спасибо»: 2 раз
Техническая поддержка Сертум Про пришла к выводу, что проблема не в сертификате.

Цитата:
Ранее в переписке вы сообщили, что у вас нет ошибки на странице https://www.cryptopro.ru...e/cades_bes_sample.html, а это означает, что рабочее место и сертификат работают корректно. Так что дело тут в настройках вашей системы, с помощью которой идёт подписание. К сожалению, в данной ситуации мы помочь не сможем.


в общем, неясно почему с одним сертификатом подпись работает через php_CPCSP, а другой дает ошибку - "A certificate chain could not be built to a trusted root authority.(0x800B010A)"
Offline Александр Лавник  
#3 Оставлено : 31 марта 2023 г. 15:21:58(UTC)
Александр Лавник

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

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

Сказал «Спасибо»: 53 раз
Поблагодарили: 798 раз в 737 постах
Автор: AlexKrym Перейти к цитате
Техническая поддержка Сертум Про пришла к выводу, что проблема не в сертификате.

Цитата:
Ранее в переписке вы сообщили, что у вас нет ошибки на странице https://www.cryptopro.ru...e/cades_bes_sample.html, а это означает, что рабочее место и сертификат работают корректно. Так что дело тут в настройках вашей системы, с помощью которой идёт подписание. К сожалению, в данной ситуации мы помочь не сможем.


в общем, неясно почему с одним сертификатом подпись работает через php_CPCSP, а другой дает ошибку - "A certificate chain could not be built to a trusted root authority.(0x800B010A)"
Вероятно, подписание через php и через cli производится от разных пользователей.

Установите корневой сертификата в хранилище mroot (m - machine, то есть для компьютера, будет действовать для всех пользователей).
Техническую поддержку оказываем тут
Наша база знаний
Offline AlexKrym  
#4 Оставлено : 31 марта 2023 г. 15:27:51(UTC)
AlexKrym

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

Группы: Участники
Зарегистрирован: 07.03.2023(UTC)
Сообщений: 14
Российская Федерация
Откуда: Крым

Сказал(а) «Спасибо»: 2 раз
Устанавливаю от root:
Цитата:

certmgr -install -store mroot -file root.cer
certmgr -install -store mca -file cross.cer


pfx устанавливаю из под пользователя nginx:
Цитата:
certmgr -install -pfx -file <path_to_pfx> -silent -pin 123


Кстати, если подписывать вот так из php:
Цитата:
exec(sprintf('/opt/cprocsp/bin/amd64/cryptcp %s', $signStringCliRequest->toArgs()), $output);

то подписание успешно проходит.

Подписание просиходит от пользователя nginx
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.