Начнем конечно с установки CURL от крипто про в том числе и самого криптопровайдера. Речь о четвертой версии, заходим под root
устанавливаем предварительно распоковав архив и перейдя в каталог
Переходим в каталог
Код |
---|
cd /opt/cprocsp/sbin/amd64 |
проверяем лицензию
Код |
---|
./cpconfig -license -view |
устанавливаем лицензию
Код |
---|
./cpconfig -license -set 4040M-L0000-01XRC-HGU5E-XYU |
выходим из root
Переходим в каталог утилиты (Остальные действия делаются от пользователя состоящего в SUDO!!!!)
Код |
---|
sudo cd /opt/cprocsp/bin/amd64 |
Получаем список ключевых контейнеров (предварительно вставив флешку с ключом)
Код |
---|
sudo ./csptest -keyset -enum_cont -fqcn -verifyc |
копируем закрытый ключь на комп
Код |
---|
sudo ./csptest -keycopy -contsrc '\\.\FLASH\ryab16-17' -contdest '\\.\HDIMAGE\ryb16_17' |
устанавливаем из ключевого контейнера личный сертификат
Код |
---|
sudo ./certmgr -inst -cont '\\.\HDIMAGE\ryb16_17' |
проверяем личный сертификат
Код |
---|
sudo ./certmgr -list -store uMy |
При успешных операциях, можно попробовать соединится с Росреетром, от этого же пользователя с sudo
Код |
---|
sudo /opt/cprocsp/bin/amd64 $ ./curl --cert 5189e5b3a2a9846aa4e77f82d7b4be40471ecab5 --insecure https://portal.rosreestr.ru:4433/ |
curl запросит у Вас пароль и должен успешно прийти ответ от сервера росреестра.
далее создаем файл конфигурации (в моем случае /home/alex/curl_cripto_gost.config):
Код |
---|
# coment
url = "https://portal.rosreestr.ru:4433/cxf/External?wsdl"
cert = "5189e5b3a2a9846aa4e77f82d7b4be40471ecab5:ПАРОЛЬ"
insecure
data = "@/home/alex/in.xml" |
data = "@/home/alex/in.xml" - путь к файлу с вашем SOAP запросом к Росреестру, заранее приготовьте тестовый запрос. Пример запроса лежит в вложении.
Теперь основная заморочка, сделать так, чтобы PHP не знало пароля от ключа и не могло воспользоваться крипто про с нашим ключом (ведь разработчики на PHP не всегда доверенные лица). PHP у нас работает от пользователя bitrix не состоящего в SUDO, а сертификат пользователя установлен от пользователя alex состоящего в sudo от имени которого мы и действовали ранее. Для такого разделения создадим bash скрипт с заданными заранее правами запуска от имени bitrix (чтобы запустить из PHP), сам скрипт будет запускать curl от имени alex с привилегиями sudo. Содержимое скрипта:
Код |
---|
# !/bin/bash
sudo /opt/cprocsp/bin/amd64/curl --config /home/alex/curl_cripto_gost.config |
в etc/sudoers дописаны следующие права:
Код |
---|
bitrix ALL=(alex) NOPASSWD: /home/alex/cript_rr.h
alex ALL= NOPASSWD: /home/alex/cript_rr.h
alex ALL= NOPASSWD: /opt/cprocsp/bin/amd64/curl |
Теперь из PHP можно запустить скрипт и получить ответ Росреестра, при этом PHP более ни каких операций с ключами не сможет сделать:
Код |
---|
shell_exec('sudo -u alex /home/alex/cript_rr.h'); |
теперь остается видоизменить /home/alex/curl_cripto_gost.config до:
Код |
---|
# coment
url = "https://portal.rosreestr.ru:4433/cxf/External?wsdl"
cert = "5189e5b3a2a9846aa4e77f82d7b4be40471ecab5:ПАРОЛЬ"
insecure |
и скрипт до:
Код |
---|
# !/bin/bash
sudo /opt/cprocsp/bin/amd64/curl --config /home/alex/curl_cripto_gost.config --data $1 |
то можно передавать в скрипт файл с SOAP запросом в Росреестр как параметр через PHP, вот так:
Код |
---|
echo shell_exec('sudo -u alex /home/alex/cript_rr.h "@/home/alex/in.xml"'); |
Всем удачи, жду комментариев от спецов, как улучшить взаимодействие.