Cpstore PHP plugin and PHP plugin launcher for PHP

Cpstore PHP plugin and PHP plugin launcher for PHP Электронная цифровая подпись

Обновлено 01.02.2017

крипто про csp

Добрый день уважаемые читатели и подписчики блога, сегодня я хочу вам рассказать как производится установка крипто про csp и php расширений на Centos 7. Кто не в курсе Крипто про это программный комплекс криптографических утилит, созданный на основе CA Windows, но под российские стандарты. Его основные функции, это организация структуры PKI и работа с ЭЦП (электронно-цифровыми подписями). Сама установка crypto pro csp и cadescom в операционных системах Windows дело очень простое, а вот в терминале CentOS 7, уже повеселее. Ниже мы рассмотрим подробную инструкцию, как это делать.

Ставлю расширение под Ubuntu server 14×64

Есть инструкция на сайте:

http://cpdn.cryptopro.ru/default.asp?url=content/cades/plugin-installation.html

Для сборки расширения libphpcades требуется:

Установить пакеты libboost-dev и php-dev из репозитория пакетов (сделал)

Установить КриптоПро CSP версии 4.0 или выше (сделал)

Установить пакет cprocsp-pki-2.0.0-cades.rpm и cprocsp-devel из состава КриптоПро ЭЦП SDK !!!
Вот тут затык, там только есть пакет devel а вот cades в архиве нет… что делать?
Поэтому дальше по инструкции не могу двигаться, не появились файлы для компиляции расширения.

Может кто-то ставил это расширение?
Нужно для проверки цифровых подписей.

Подписываю файл в терминале с помощью команды

csptestf -sfsign -sign -detached -add -in in.txt -out out.sgn 
-base64 -my 'certificate_name' -password some_password -alg GOST94_256

В результате получаю открепленную подпись.
При вызове команды в php скрипте с помощью метода shell_exec() возникает ошибка при получении сертификата, т.к. локальные сертификаты недоступны для пользователя www-data.

Есть возможность подписать файл в php скрипте сертификатом другого пользователя или сделать сертификат доступным для всех пользователей?

Сертификат установлен в личное хранилище локального пользователя uMy.

Добавлять права в /etc/sudoers на выполнение команды csptestf под sudo для пользователя www-data нельзя.
Проверял подписывания файла в bash скрипте, в котором выполняется смена пользователя и подпись файла. При вызове bash скрипта в php возникает ошибка.

При установке сертификата в хранилище mCA, mMy также возникает ошибка при подписывании файла в php скрипте.

КриптоПро ЭЦП SDK – инструментарий разработчика для создания клиентских и серверных приложений, использующих Стандарт предприятия КриптоПро ЭЦП, в соответствии с рекомендациями CAdES (“CMS Advanced Electronic Signatures”, ETSI Standard, RTS/ESI-000040, TS 101 733 V1.8.3) и с учётом использования российских криптографических алгоритмов.

КриптоПро ЭЦП SDK сертифицирован ФСБ России в составе ПАК «Службы УЦ» версии 1.5 по классам защиты КС2 и КС3.

Интерфейс программирования приложений

Предназначен для создания и проверки сообщений, подписанных усовершенствованной подписью и удовлетворяющих стандарту CAdES (ETSI TS 101 733). На настоящий момент интерфейс поддерживает создание подписей типа CAdES BES, CADES-T и CAdES-X Long Type 1.

Интерфейс клиентских приложений имеет следующие особенности:

  • Поддерживаемые платформы:
    • Microsoft Windows XP / 2003 / Vista / 2008 / W7 / 2008 R2 / W8 / 2012 / W8.1 / 2012 R2 / W10 / 2016,
    • ОС семейства Linux, удовлетворяющих LSB 3.1 и выше,
    • FreeBSD 7.x и выше,
    • AIX 5.3 и 6.x,
    • Solaris 10 и выше,
    • Apple iOS 4.2 и выше,
    • Apple MacOS 10.6 и выше.
  • Содержит интерфейс языка С, спроектированный таким образом, чтобы дополнять или замещать функции Crypto API для работы с подписанными сообщениями.
  • Содержит компоненту COM, расширяющую интерфейс Microsoft CAPICOM.
  • Содержит КриптоПро ЭЦП Browser plug-in, предоставляющий интерфейс языка JavaScript для реализации криптографических операций в браузерах. Поддерживает создание и проверку подписи, шифрование и создание запросов на сертификат.
  • Расширение для языка PHP, предоставляющее интерфейс, аналогичный КриптоПро ЭЦП Browser plug-in, для использования в серверных приложениях на языке PHP.
  • Для настройки клиентских модулей в пределах организации или подразделения можно использовать групповые политики.
Читайте также:  Как подписать документ libreoffice электронной цифровой подписью (ЭЦП) - ЭЦП Эксперт

Данный интерфейс позволяет реализовать механизм работы с усовершенствованной подписью из прикладного программного обеспечения. Простота интерфейса дает возможность быстро расширить функциональность существующей системы, а возможность настройки с помощью групповых политик значительно упрощает процесс встраивания, развёртывания и администрирования клиентских модулей.

Подробное описание КриптоПро ЭЦП SDK приведено в Руководстве разработчика КриптоПро ЭЦП SDK.

  • Страница для печатиСтраница для печати

На web-сервере должен быть установлен PHP 7.2
На нашем сервере установлено Ubuntu Server 18.04.4 (64-bit)

1) Установить пакеты:

команда в терминале:

sudo apt-get install libboost-dev php-dev libxml2-dev
 tar xvf linux-amd64_deb.tgz

и установить минимальный набор пакетов КриптоПро CSP:

cd linux-amd64_deb
sudo  ./install.sh
 tar xvf cades_linux_amd64.tar.gz

и установить следующие пакеты:

cd cades-linux-amd64

# dpkg -i \

cprocsp-pki-cades_2.0.0-1_amd64.deb \

lsb-cprocsp-devel_5.0.11535-4_all.deb \

cprocsp-pki-phpcades_2.0.0-1_amd64.deb

4) В файле: /opt/cprocsp/src/phpcades/Makefile.unix

указать путь к директории с исходниками PHP в переменной PHPDIR.

5) Скопировать файл патча для PHP 7 в директорию с исходниками расширения:

# cp ./php7_support.patch /opt/cprocsp/src/phpcades

6) Установить g++-6 и сделать g++-6 версией для g++ по умолчанию:

# apt-get install g++-6

# update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-6 10

# update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-7 10

# update-alternatives --config g++

7) Перейти в директорию с исходниками расширения:

cd /opt/cprocsp/src/phpcades

выполнить сборку расширения:

patch -p0 < ./php7_support.patch

eval `/opt/cprocsp/src/doxygen/CSP/../setenv.sh --64`; make -f Makefile.unix

9) Создать в директории с расширениями символическую ссылку на собранную библиотеку libphpcades.so:

$ ln -s файлИсточник   файлСсылки

10) В файле php.ini добавить расширение:

 extension=libphpcades.so

11) Перезагрузить сервер и проверить выполнение тестового скрипта (сохранить в php файл), который проверяет возможность работы с собранной библиотекой из php:

<?php
ini_set("log_errors", 1);
ini_set ('display_errors', 1);
error_reporting (E_ALL);  
try
{   $sd = new CPSignedData();
    $content = "test content"; 
    $sd = new CPSignedData();
    $sd->set_Content($content); 
    printf("test init OK\n");
}
catch (Exception $e)
{
    printf($e->getMessage());
} 
?>
sudo /opt/cprocsp/bin/amd64/certmgr -inst -store mRoot -file "/var/tmp/root_mks.cer"
sudo /opt/cprocsp/bin/amd64/certmgr -inst -store mRoot -file "/var/tmp/root_guc.cer"

Или через curl:

sudo curl http://e-trust.gosuslugi.ru/Shared/DownloadCert?thumbprint=4BC6DC14D97010C41A26E058AD851F81C842415A|sudo /opt/cprocsp/bin/amd64/certmgr -inst -store mRoot -stdin

sudo curl url-нужногосертификата|sudo /opt/cprocsp/bin/amd64/certmgr -inst -store mRoot -stdin

Cpstore PHP plugin and PHP plugin launcher for PHP

Аватара пользователя

rozen

Сообщения: 169
Зарегистрирован: 25 мар 2015, 12:11
Имя: Андрей
Откуда: Красноярск

Re: КриптоПро расширение для PHP 7

Расширение заработало, но при добавлении сертификата 502 Bad Gateway
В логах сервера:

Код: Выделить всё

2020/10/28 08:58:22 [error] 1067#1067: *4188 recv() failed (104: Connection reset by peer) while reading response header from upstream, 
client: 10.89.*.*, server: cto.krw.rzd, request: "POST /rukovoditel/index.php?module=users/signature_account&action=update HTTP/2.0", 
upstream: "fastcgi://unix:/var/run/php/php7.4-fpm.sock:", host: "cto.krw.rzd", 
referrer: "https://cto.krw.rzd/rukovoditel/index.php?module=users/signature_update"

Проверка настройки показывает: test init OK
Сертификаты добавлены.

В системных логах такое:

Код: Выделить всё

Oct 29 10:03:44 10 ool www: <capi10>CryptEnumOIDInfo!failed: LastError = 0xEA
Oct 29 10:03:44 10 ool www: <capi10>CryptVerifySignatureW!failed: LastError = 0x80090006
Oct 29 10:03:44 10 ool www: <capi20>CryptVerifyCertificateSignature!failed: LastError = 0x80090006
Oct 29 10:03:44 10 ool www: <capi20>CertOpenStore!failed: LastError = 0x2
Oct 29 10:03:44 10 ool www: <capi20>CertOpenStore!failed: LastError = 0x2
Oct 29 10:03:49 10 ool www: <capi10>CryptEnumOIDInfo!failed: LastError = 0xEA
Oct 29 10:03:49 10 ool www: <capi10>CryptVerifySignatureW!failed: LastError = 0x80090006
Oct 29 10:03:49 10 ool www: <capi20>CryptVerifyCertificateSignature!failed: LastError = 0x80090006
Oct 29 10:03:49 10 ool www: <capi20>CertOpenStore!failed: LastError = 0x2
Oct 29 10:03:49 10 ool www: <capi20>CertOpenStore!failed: LastError = 0x2

Решил проверить хранилище сертификатов: с нем пусто.
Но добавление проходит без ошибок. Вот только куда?

Код: Выделить всё

 /opt/cprocsp/bin/amd64/certmgr -list
Certmgr 1.1 (c) "КРИПТО-ПРО", 2007-2020.
Программа для работы с сертификатами, CRL и хранилищами.
=============================================================================
Список сертификатов пуст

Требуемый сертификат не существует.

Аватара пользователя

rozen

Сообщения: 169
Зарегистрирован: 25 мар 2015, 12:11
Имя: Андрей
Откуда: Красноярск

Re: КриптоПро расширение для PHP 7

Сообщение

rozen » 30 окт 2020, 04:06

Сейчас так: сертификатов больше. Показал один.

Код: Выделить всё

sudo /opt/cprocsp/bin/amd64/certmgr -list -store mRoot
[sudo] password for rozen:
Certmgr 1.1 (c) "КРИПТО-ПРО", 2007-2020.
Программа для работы с сертификатами, CRL и хранилищами.
=============================================================================
1-------
Издатель            : E=dit@minsvyaz.ru, C=RU, S=77 Москва, L=г. Москва, STREET="улица Тверская, дом 7", O=Минкомсвязь России, OGRN=1047702026701, INN=007710474375, CN=Минкомсвязь России
Субъект             : E=uc@mil.ru, OGRN=1037700255284, INN=007704252261, C=RU, S=77 г. Москва, L=Москва, STREET="ул. Знаменка, д. 19", OU=4 центр (удостоверяющий) войсковой части 31659, O=Министерство обороны Российской Федерации, CN=Министерство обороны Российской Федерации
Серийный номер      : 0x3252B37400000000044E
Хэш SHA1            : 1e4977c9cad2358853391267d4e5d47e4ca7ba6f
Идентификатор ключа : 650b083aa72a8dc7a6449682b97df99d6b8e2aa8
Алгоритм подписи    : ГОСТ Р 34.11-2012/34.10-2012 256 бит
Алгоритм откр. кл.  : ГОСТ Р 34.10-2012 (512 бит)
Выдан               : 31/07/2020  11:15:02 UTC
Истекает            : 31/07/2035  11:15:02 UTC
Ссылка на ключ      : Нет
URL сертификата УЦ  : http://reestr-pki.ru/cdp/guc_gost12.crt
URL списка отзыва   : http://reestr-pki.ru/cdp/guc_gost12.crl
URL списка отзыва   : http://company.rt.ru/cdp/guc_gost12.crl
URL списка отзыва   : http://rostelecom.ru/cdp/guc_gost12.crl

Что не работает – не понимаю. Либо модуль сбоит, но проверку проходит. Либо … либо.
Кстати, тест от КриптоПро не проходит.

Код: Выделить всё

Cannot find object or property. (0x80092004)TEST FAIL 

Код: Выделить всё

PHP Fatal error:  Uncaught Error: Class 'CPStore' not found 

Аватара пользователя

rozen

Сообщения: 169
Зарегистрирован: 25 мар 2015, 12:11
Имя: Андрей
Откуда: Красноярск

Re: КриптоПро расширение для PHP 7

Сообщение

rozen » 30 окт 2020, 07:22

Выполнение через командную строку кода:

Код: Выделить всё

<?php
ini_set("log_errors", 1);
ini_set ('display_errors', 1);
error_reporting (E_ALL);  
try
{   $sd = new CPSignedData();
    $content = "test content"; 
    $sd = new CPSignedData();
    $sd->set_Content($content); 
    printf("test init OK\n");
}
catch (Exception $e)
{
    printf($e->getMessage());
} 
?>

Ответ:

Код: Выделить всё

Fatal error: Uncaught Error: Class 'CPSignedData' not found in /var/www/html/site/csp.php:6

Аватара пользователя

rozen

Сообщения: 169
Зарегистрирован: 25 мар 2015, 12:11
Имя: Андрей
Откуда: Красноярск

Re: КриптоПро расширение для PHP 7

Сообщение

rozen » 02 ноя 2020, 12:38

Продолжу:

Сделал:

Код: Выделить всё

php -i|grep php.ini
Configuration File (php.ini) Path => /etc/php/7.4/cli
Loaded Configuration File => /etc/php/7.4/cli/php.ini

Это странно, так как phpinfo показывает

Код: Выделить всё

Loaded Configuration File /etc/php/7.4/fpm/php.ini

Я вносил extension=libphpcades.so в файл /etc/php/7.4/fpm/php.ini
Сейчас внес в /etc/php/7.4/cli/php.ini

Делаю проверку:

Код: Выделить всё

sudo php -f /opt/cprocsp/src/phpcades/test_extension.php
[sudo] password for rozen:
Cannot find object or property. (0x80092004)TEST FAIL

Ответ поддержки КриптоПро:

Код: Выделить всё

>>sudo php -f /opt/cprocsp/src/phpcades/test_extension.php
>>[sudo] password for rozen:
>>Cannot find object or property. (0x80092004)TEST FAIL

Расширение корректно работает.

Если Вы запускаете проверочный скрипт через sudo, то под пользователем root у Вас должен быть установлен личный сертификат с привязкой к соответствующему ключевому контейнеру с указанной строкой (по умолчанию в скрипте – “Test”) в поле “Субъект” сертификата.

Вы можете сменить строку в скрипте или пользователя для прохождения проверки с помощью тестового скрипта.


Аватара пользователя

Евгений

Сообщения: 446
Зарегистрирован: 11 июл 2016, 13:21
Имя: Евгений
Откуда: Петропавловск-Камчатский

Re: КриптоПро расширение для PHP 7

Сообщение

Евгений » 12 апр 2022, 02:18

rozen писал(а): ↑

20 июл 2020, 11:42

Добрый день!
Кто-то установил расширение для PHP от КриптоПро?

Подскажите пожалуйста, какой версией php у вас получилось работать с ЭЦП на сервере Руководитель?
У меня PHP Version 7.3.31-1~deb10u1

Я настроил модуль ЭЦП, сертификаты видны в списке выбора, но при нажатии на кнопку “Выбрать” сертификат не подключается, выпадает ошибка: “при проверке токена, некорректные данные: []”

Screenshot_20220412_111737.png

Как установить Крипто про и расширения для языка PHP

И так, напоминаю, что мы с вами уже слегка знакомились с crypto pro, точнее с его последствиями, после установки, а именно решалась ошибка 80072EE2 при обновлении Windows, где приходилось его удалять и вычищать систему, сегодня задача обратная, установка, да не просто, а в терминале Centos 7. Ставить мы будем специальное расширение. Расширение для языка PHP предназначено для встраивания криптографических операций в серверные приложения на языке PHP с использованием сертифицированного СКЗИ КриптоПро CSP.

Расширение предоставляет программный интерфейс, аналогичный КриптоПро ЭЦП Browser plug-in, для выполнения следующих криптографических операций:

  • работа с сертификатами;
  • создание и проверка подписи форматов CAdES BES, CAdES-T, CAdES-X Long Type 1;
  • шифрование и расшифрование данных.

Вот по этой ссылке http://cpdn.cryptopro.ru/default.asp?url=content/cades/phpcades.html, выложен алгоритм установки крипто про csp на CentOS 7, но в очень сжатом виде, прочитав его у меня осталось очень много вопросов, я если честно был не приятно удивлен, что на этот вопрос, практически нет никакой информации, особенно на официальном сайте.

Собираем libphpcades

Для того, чтобы собрать libphpcades, у вас во первых, должна быть установлена CentOS 7. Далее мы должны установить пакеты boost-devel и php-devel, приступаем, добавляем репозиторий и ставим boost-devel.

sudo wget http://repo.enetres.net/enetres.repo -O /etc/yum.repos.d/enetres.repo
sudo yum install boost-devel

Следующим шагом, мы ставим пакет php-devel с помощью команды.

Далее ставим lsb пакет (Linux Standard Base)

Далее переходим в папку root, если вы не в ней, с помощью команды

И скачиваем дистрибутив крипто про csp 4

wget https://www.cryptopro.ru/sites/default/files/private/csp/40/9842/linux-amd64.tgz

Остальные версии можно посмотреть на официальном сайте Крипто ПРО. Для скачивания вам нужно будет зарегистрироваться.Установка крипто про csp на Centos 7-1

Далее распаковываете архив с помощью tar и даете возможность запускать скрипт install.sh

Все теперь, можно устанавливать самый главный компонент libphpcades, сам крипто про csp 4

Далее после установки, прописываем переменные окружения, или перемещаемся в папку /opt/cprocsp/

export PATH=”$PATH:$(ls -d /opt/cprocsp/{s,}bin/*|tr ‘\n’ ‘:’)”

Затем до установим, еще два пакета cprocsp-rdr-gui-gtk и lsb-cprocsp-devel

yum install cprocsp-rdr-gui-gtk-64-4.0.0-4.x86_64.rpm yum install lsb-cprocsp-devel-5.0.0-4.noarch

Затем следует установить пакет cprocsp-pki-2.0.0-cades.rpm из состава КриптоПро ЭЦП SDK. Скачиваем архив, лтбо вручную и потом через ssh передаем, либо скачиваем через wget. Скачивайте КриптоПро ЭЦП SDK 2.0, именно ее, так как она содержит пакет cprocsp-pki-2.0.0-cades.rpm.

Установка крипто про csp на Centos 7-2

https://www.cryptopro.ru/sites/default/files/products/cades/current_release_2_0/cades_linux_amd64.tar.gz

Посмотреть список пакетом, можно командой

  • lsb-cprocsp-kc1-64-4.0.0-4.x86_64
  • cprocsp-pki-cades-2.0.0-1.x86_64
  • lsb-cprocsp-base-4.0.0-4.noarch
  • lsb-cprocsp-capilite-64-4.0.0-4.x86_64
  • cprocsp-curl-64-4.0.0-4.x86_64
  • lsb-cprocsp-devel-5.0.0-4.noarch
  • lsb-cprocsp-rdr-64-4.0.0-4.x86_64
  • cprocsp-rdr-gui-gtk-64-4.0.0-4.x86_64
  • cprocsp-pki-plugin-2.0.0-1.x86_64

Далее делаем следующее.

  • В файле /opt/cprocsp/src/phpcades/Makefile.unix указать путь к исходным текстам нужной версии PHP в переменной PHPDIR, но перд этим вы должны скачать исходные файлы php, нужной версии. Смотрим какая версия php у вас установлена.

PHP 5.6.30 (cli) (built: Jan 19 2017 08:09:42)
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies
with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2016, by Zend Technologies
You have mail in /var/spool/mail/root

установка libphpcades

Затем идете на официальный сайт php http://php.net/releases/ и находите там нужную вам версию, у меня это 5.6.3

установка libphpcades-2

У меня файл Makefile.unix выглядит вот так:

Установка libphpcades

Теперь находясь в /opt/cprocsp/src/phpcade в зависимости от разрядности системы выполнить:

Для 64 битной системы

eval `/opt/cprocsp/src/doxygen/CSP/../setenv.sh –64`; make -f Makefile.unix

или для 32 битной системы

eval `/opt/cprocsp/src/doxygen/CSP/../setenv.sh –32`; make -f Makefile.unix

У вас должна начаться собираться libphpcades, но бывают и грабли как в моем случае. Были вот такого типа:

или вот такое

[root@bx1 phpcades]# eval `/opt/cprocsp/src/doxygen/CSP/../setenv.sh –64`; make -f Makefile.unix
No compiler specified… trying to guess
/opt/cprocsp/src/doxygen/CSP/../setenv.sh: line 107: type: g++: not found
/opt/cprocsp/src/doxygen/CSP/../setenv.sh: line 125: type: clang++: not found
Nothing is found
g++ -DLINUX -DUNIX -DHAVE_LIMITS_H -I/ -I/cpcsp -I/pki -I/pki/atl -I/pki/cppcades -I/pki/cplib -I/root/php -I/root/php/main -I/root/php/Zend -I/root/php/TSRM -DSIZEOF_VOID_P= -fPIC -DPIC -c -o PHPCadesCPSigners.o PHPCadesCPSigners.cpp
make: g++: Command not found
make: *** [PHPCadesCPSigners.o] Error 127

Error 127 решается установкой yum install gcc-c++

Еще может быть ошибка error: expected constructor, destructor, or type conversion before, тут есть синтаксическая ошибка смотрите файл.

  • Узнать путь к расширениям в вашей системе:
     php -i | grep extension_dir
    
  • Cоздать в директории с расширениями символическую ссылку на собранную libphpcades
  • В файле php.ini добавить расширение:

Теперь давайте посмотрим лицензию Крипто ПРО CSP с помощью команды

Установить лицензию Крипто ПРО CSP в CentOS 7, можно вот так.

cpconfig -license -set ваша_лицензия

Оцените статью
ЭЦП Эксперт
Добавить комментарий

Adblock
detector