- Скачать КриптоПро CSP, например КриптоПро CSP 5.0 для Linux (x64, rpm)
- Скачать КриптоПро ЭЦП Browser plug-in, например для Linux 64 бита
- Если используется PHP 7+, то дополнительно потребуется скачать php7_support.patch
В листинге ниже предполагается расположение указанных файлов в домашнем каталоге.
# установить дополнительные зависимости для сборки расширения PHP
yum install boost-devel php-devel lsb gcc-c++
# установить КриптоПро CSP
cd ~
tar zxf linux-amd64.tgz
cd linux-amd64
./install.sh
# установить КриптоПро ЭЦП Browser Plug-in
cd ~
tar xzf cades_linux_amd64.tar.gz
cd cades_linux_amd64
yum install cprocsp-pki-2.0.0-amd64-cades.rpm
yum install cprocsp-pki-2.0.0-amd64-phpcades.rpm
yum install lsb-cprocsp-devel-5.0.11455-5.noarch.rpm
# указать путь до исходных файлов в конфигурационном файле
# * PHPDIR=/root/php
vi /opt/cprocsp/src/phpcades/Makefile.unix
# скачать исходные коды PHP текущей версии
cd ~
export PHP_VERSION=$(php -r "echo phpversion();")
wget https://www.php.net/distributions/php-${PHP_VERSION}.tar.gz -O php.tar.gz
tar xzf php.tar.gz
mv php-${PHP_VERSION} php
# подготовить PHP к сборке
cd php
./configure
# применить патч к PHP версии 7.0 и выше
cp ~/php7_support.patch /opt/cprocsp/src/phpcades/
cd /opt/cprocsp/src/phpcades/
patch -p0 < ./php7_support.patch
# выполнить сборку расширения
cd /opt/cprocsp/src/phpcades
eval `/opt/cprocsp/src/doxygen/CSP/../setenv.sh --64`; make -f Makefile.unix
# копировать или создать ссылку на libphpcades.so в папке расширений
# php -i | grep extension_dir # (подсмотреть путь хранения расширений)
ln -s /opt/cprocsp/src/phpcades/libphpcades.so /usr/lib64/php/modules/phpcades.so
# добавить расширение в список загрузки
# + extension=phpcades.so
vi /etc/php.ini
После всех проделанных манипуляций необходимо перезапустить веб-сервер и проверить загрузку расширения:
php --re php_CPCSP
При выполнении листинга ниже предполагается, что в PATH содержится путь до исполняемых файлов КриптоПРО CSP /opt/cprocsp/bin/amd64/
и /opt/cprocsp/sbin/amd64/
.
TODO
Для наглядности, установка сертификата производится для пользователя john
и именем контейнера \\.\HDIMAGE\c0197fed-f095-c6c4-245c-c47915aecd5f
# 0. просмотреть установленные сертификаты
certmgr -list
# 1. экспорт сертификата
# a. выбрать нужный сертификат
# b. записать значение Container, например 'HDIMAGE\\c0197fed.000\F698'
# c. ввести номер выбраного сертификата
certmgr -export -dest certificate.cer
# 2. экспорт контейнера, например для 'HDIMAGE\\c0197fed.000\F698' рабочим каталогом будет 'c0197fed.000'
cp -R /var/opt/cprocsp/keys/$(whoami)/c0197fed.000 <destination_host>/var/opt/cprocsp/key/john
# поправить права доступа к контейнеру
sudo chown -R john:john /var/opt/cprocsp/key/john/c0197fed.000
chmod 600 /var/opt/cprocsp/key/john/c0197fed.000/*
# проверить видимость контейнера
csptest -keyset -enum_cont -verifycontext -fqcn
# связать сертификат с контейнером, например '\\.\HDIMAGE\c0197fed-f095-c6c4-245c-c47915aecd5f'
certmgr -inst -store uMy -file /home/john/certificate.cer -cont '\\.\HDIMAGE\c0197fed-f095-c6c4-245c-c47915aecd5f'
# проверить подписание на произвольном файле
cryptcp -signf -dn [email protected] document.pdf
cat document.pdf.sgn