powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / PHP. Передать параметры в cryptcp
5 сообщений из 5, страница 1 из 1
PHP. Передать параметры в cryptcp
    #39672937
SQLPowerUser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В командной строке Windows работает без ошибок
Код: plaintext
1.
cryptcp.exe -sign -der -dn "CN=Иванов Петр, E=box@mail.ru" myfile.xml


Теперь надо заставить это работать из PHP. Пытался так (и через shell_exec тоже)
Код: php
1.
2.
$cmd = 'cryptcp.exe -sign -der -dn "CN=Иванов Петр, E=box@mail.ru" myfile.xml';
exec($cmd);


Выдает
Код: plaintext
1.
2.
[ErrorCode: 0x2000012d]
Ошибка: Сертификаты не найдены. Ругается на "CN=Иванов Петр, E=box@mail.ru"

Самое интересное, что вывести команду на экран через
Код: php
1.
print_r($cmd);

и скопировать в буфер, то из командной строки Windows всё отработает как надо.

В сети нашел только одно решение, и то для Java. Цитирую:
вот так следует передавать параметры для вызова cryptcp что бы работало
Код: java
1.
2.
String[] cmd = {"/opt/cprocsp/bin/amd64/cryptcp", "-decr", "-dn", "CN=CadesTest Gost User", "-nochain", "/tmp/out", "/tmp/out1"};
Process proc = rt.exec(cmd);

Осталось перевести этот блок на язык PHP... Передача массива параметров в shell_exec?
Буду признателен за любую помощь.
...
Рейтинг: 0 / 0
PHP. Передать параметры в cryptcp
    #39673197
SQLPowerUser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот такую строку
Код: plaintext
1.
cryptcp.exe -sign -der -dn "E=box@mail.ru" myfile.xml

засунул в файл, который назвал кратко:
s.cmd , он успешно отрабатывает.

Но вызов этого бат-файла из PHP
Код: php
1.
2.
$cmd = 's.cmd';
shell_exec($cmd);

вываливается с ошибкой, что я привел выше. Везде только английские буквы, а батник сохранял и в OEM866 и в windows-1251, всё равно не работает.
...
Рейтинг: 0 / 0
PHP. Передать параметры в cryptcp
    #39673219
Руслан Дамирович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQLPowerUser,
вижу в своем хрустальном шаре, что
Код: coco
1.
PHP у тебя работает из-под пользователя, который твой сертификат не видит, так как сертификат установлен в твое личное пользовательское хранилище
...
Рейтинг: 0 / 0
PHP. Передать параметры в cryptcp
    #39673269
SQLPowerUser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Руслан Дамирович,

скорее всего так и есть. Сейчас ставил сертификат, где расположение хранилища равно не текущий пользователь , а локальный компьютер. Ставлю подряд во все контейнеры, но теперь даже командная строка пишет, что сертификаты не найдены...
Сейчас гуглю, как надо правильно прописать путь для "Критерия поиска сертификатов".
Или сам сертификат надо как-то хитро устанавливать?
...
Рейтинг: 0 / 0
PHP. Передать параметры в cryptcp
    #39673639
SQLPowerUser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Решил.
Действительно, PHP у тебя работает из-под пользователя, который твой сертификат не видит, так как сертификат установлен в твое личное пользовательское хранилище .
При установке сертификата, надо указать "Локальный компьютер", далее поместить сертификат в "Личное хранилище".
Если появится окно " Вставьте и выберите носитель для хранения контейнера закрытого ключа ", то выбираем "Реестр".
А в диалоге "Задайте пароль для создаваемого контейнера" - оставить пустой пароль.

Всё. Теперь из PHP можно запускать хоть батник, или саму команду напрямую:
Код: php
1.
2.
$cmd = 'd:/crypto/cryptcp.5.0.x64.exe" -sign -der -mMy -dn "CN=Иванов Петр, E=email@mail.ru" file.xml > file.log';
shell_exec($cmd);


Здесь -mMy как раз и означает "Локальная машина -> Личное хранилище", т.е. куда установлен сертификат
-dn "CN=Иванов Петр, E=email@mail.ru" можно и упростить. Если адрес почты уникальный, и нигде в сертификатах не повторяется, то можно просто   -dn "email@mail.ru"
Необязательный вывод результата команды в файл > file.log я сделал для контроля, мало ли что
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / PHP. Передать параметры в cryptcp
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]