Статус: Новичок
Группы: Участники
Зарегистрирован: 09.10.2009(UTC) Сообщений: 6 Откуда: Ульяновск
|
Здраствуйте я новичек в работе с ЭЦП Существует задача генерации ЭЦП, которая представляет собой строку закодированную в BASE64, при помощи алгоритма соответствующему ГОСТ Р 34.11-94. Данную задачу необходимо реализовать на Windows 2003 + Apache + PHP 5 Вопрос в следуеющем можноли как нибудь обращаться к фунцкиям КриптоПро напрямую как к COM - объектам. Потому что при генераци ЭЦП с помощью CAPICOM.EnvelopedData в полученный хешь, насколько я понял включаются какие то данные из сертификата. Подаскажите в какую сторону двигаться  Если есть примерчек буду очень признателен Отредактировано пользователем 22 октября 2009 г. 18:29:41(UTC)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 25.12.2007(UTC) Сообщений: 1,733  Откуда: КРИПТО-ПРО Поблагодарили: 177 раз в 168 постах
|
Цитата:Вопрос в следуеющем можноли как нибудь обращаться к фунцкиям КриптоПро напрямую как к COM - объектам. Нельзя. КриптоПро CSP не реализует COM API. Цитата:Потому что при генераци ЭЦП с помощью CAPICOM.EnvelopedData в полученный хешь, насколько я понял включаются какие то данные из сертификата. ЭЦП создается с помощью SignedData, EnvelopedData - это шифрование. Данные в подписанное сообщение включаются согласно стандарту PKCS#7 Цитата:Подаскажите в какую сторону двигаться Видимо, писать собственный СОМ объект или искать уже существующие, которые удовлетворяют Вашим требованиям. |
|
|
|
|
Статус: Участник
Группы готовые для захвата: Участники
Зарегистрирован: 04.06.2008(UTC) Сообщений: 15
|
Зачем COM? Пишите extension для php на С. На выходе получите свою dll, внутри которой и будет вами реализована работа с CryptoAPI http://devzone.zend.com/node/view/id/1021Вот вам пример, как создать функцию: ZEND_FUNCTION(CRPT_CheckSign){ char *cStore=NULL, *cThumb=NULL, *cData=NULL, *cSign=NULL; DWORD dwStoreSize=0, dwThumbSize=0, dwDataSize=0, dwSignSize=0, dwRes=0; dwLastError=CRPT_PROCESSING_ERROR;
if (ZEND_NUM_ARGS()!=4 || zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ssss", &cStore, &dwStoreSize, &cThumb, &dwThumbSize, &cData,&dwDataSize, &cSign, &dwSignSize) == FAILURE) RETURN(CRPT_BAD_PARAMETERS);
cStore = estrdup(cStore); cThumb = estrdup(cThumb);
if (dwRes!=CRPT_OK)goto cert_not_found;
dwRes=CryptMod.OpenCertificate(cStore,cThumb); if(dwRes!=CC_OK){ dwRes=CRPT_CERT_NOT_FOUND; goto cert_not_found;} dwLastError=CRPT_OK; dwRes=CryptMod.CheckSignature(cData,dwDataSize,cSign,dwSignSize);
cert_not_found: CryptMod.FreeCertificate(); CryptMod.FreeStorage(); efree(cThumb);efree(cStore);
if (dwLastError==CRPT_OK) if (dwRes!=CC_OK) RETURN_FALSE else RETURN_TRUE else RETURN(dwRes); }А вот как вызвать из php: $pcc = CRPT_GetSign('MY','45825f3a00a9dd2ae27472a38a69a5d613b47327','qwe1'); CRPT_CheckSign('MY','45825f3a00a9dd2ae27472a38a69a5d613b47327','qwe1',$pcc);
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 28.10.2009(UTC) Сообщений: 121
Сказал(а) «Спасибо»: 2 раз Поблагодарили: 3 раз в 3 постах
|
простите раз вопрос за подпись пошёл как мне организовать проверку на стороне сервера? (сертификат с GOST alg, window + apache + php 5.2 + crypto pro 3.0) согласно документации openssl я base64 кусок заключил в -----BEGIN PKCS7----- ... -----END PKCS7----- на стороне сервера пробовал таким образом openssl_pkcs7_verify("pik",0,"puk"); результат "-1" дальше пытался тыкаться создал файл"pik" в шапке которого MIME-Version: 1.0 Content-Disposition: attachment; filename="smime.p7m" Content-Type: application/x-pkcs7-mime; smime-type=signed-data; name="smime.p7m" Content-Transfer-Encoding: base64 и в ногах кусок base64 мой и всё равно результат функции "-1" и ещё вопрос в догонку (который полагаю и решит вопрос) - функция на вход принимает cainfo параметр (не обязательный), в качестве данных он принимает массив путей к PEM файлам - ВОПРОС - как мне создать файл данного типа с необходимым содержимым? может есть у местных гуру какая идея? или совет .. Отредактировано пользователем 29 октября 2009 г. 17:46:53(UTC)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.02.2008(UTC) Сообщений: 1,491 Откуда: Крипто-Про
Поблагодарили: 40 раз в 37 постах
|
ответила Вам по почте. неправильным является использование openssl для проверки подписи, сделанной по ГОСТу, поскольку текущая стабильная версия openssl не включает поддержку соответствующего криптографического алгоритма. рекомендуется использовать для проверки подписей одну из утилит, поддерживающих работу с криптографией через КриптоПро CSP, например http://www.cryptopro.ru/...ucts/cryptcp/default.htm |
Татьяна ООО Крипто-Про |
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 28.10.2009(UTC) Сообщений: 121
Сказал(а) «Спасибо»: 2 раз Поблагодарили: 3 раз в 3 постах
|
ваша утилита лезет в локальное хранилище и оттуда пытается получить сертификат клиента, который подписывал данные так как утилита запускается на сервере - резонно, что в локальных нет серта данного клиента ВОПРОС: - как поступать в данном случае? - что делать если в pkcs7 не был включен серт клиента и на сервере тоже его нет? на основе CRL разве валидация сертификатов не возможна? - как организовать валидацию имея только CRL в доступе?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.02.2008(UTC) Сообщений: 1,491 Откуда: Крипто-Про
Поблагодарили: 40 раз в 37 постах
|
просто по подписи(без включенного в файл сертификата) нельзя проверить подпись. В CRL содержится список серийных номеров отозванных сертификатов, этой информации также не достаточно.
можно получать файл сертификата клиента(запрашивать сертификат через сайт и сохранять в файл) или включать сертификат в файл с подписью. В этом случае размещение сертификата указыается через опцию
-f путь_к_файлу_в_который_включен_сертификат |
Татьяна ООО Крипто-Про |
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 28.10.2009(UTC) Сообщений: 121
Сказал(а) «Спасибо»: 2 раз Поблагодарили: 3 раз в 3 постах
|
супер под виндами работает :) спасибо
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close