Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход. Новые регистрации запрещены.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline shadom  
#1 Оставлено : 22 октября 2009 г. 15:59:16(UTC)
shadom

Статус: Новичок

Группы: Участники
Зарегистрирован: 09.10.2009(UTC)
Сообщений: 6
Откуда: Ульяновск

Здраствуйте я новичек в работе с ЭЦП

Существует задача генерации ЭЦП, которая представляет собой строку закодированную в BASE64, при помощи алгоритма соответствующему ГОСТ Р 34.11-94. Данную задачу необходимо реализовать на Windows 2003 + Apache + PHP 5

Вопрос в следуеющем можноли как нибудь обращаться к фунцкиям КриптоПро напрямую как к COM - объектам. Потому что при генераци ЭЦП с помощью CAPICOM.EnvelopedData в полученный хешь, насколько я понял включаются какие то данные из сертификата.

Подаскажите в какую сторону двигаться Brick wall Если есть примерчек буду очень признателен

Отредактировано пользователем 22 октября 2009 г. 18:29:41(UTC)  | Причина: Не указана

Offline Kirill Sobolev  
#2 Оставлено : 22 октября 2009 г. 16:26:18(UTC)
Кирилл Соболев

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 25.12.2007(UTC)
Сообщений: 1,733
Мужчина
Откуда: КРИПТО-ПРО

Поблагодарили: 177 раз в 168 постах
Цитата:
Вопрос в следуеющем можноли как нибудь обращаться к фунцкиям КриптоПро напрямую как к COM - объектам.

Нельзя. КриптоПро CSP не реализует COM API.
Цитата:
Потому что при генераци ЭЦП с помощью CAPICOM.EnvelopedData в полученный хешь, насколько я понял включаются какие то данные из сертификата.

ЭЦП создается с помощью SignedData, EnvelopedData - это шифрование. Данные в подписанное сообщение включаются согласно стандарту PKCS#7
Цитата:
Подаскажите в какую сторону двигаться

Видимо, писать собственный СОМ объект или искать уже существующие, которые удовлетворяют Вашим требованиям.
Техническую поддержку оказываем тут
Наша база знаний
Offline AJIEKCAHDP  
#3 Оставлено : 28 октября 2009 г. 10:57:33(UTC)
AJIEKCAHDP

Статус: Участник

Группы готовые для захвата: Участники
Зарегистрирован: 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);
Offline cybermerlin  
#4 Оставлено : 28 октября 2009 г. 20:12:25(UTC)
cybermerlin

Статус: Активный участник

Группы: Участники
Зарегистрирован: 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)  | Причина: Не указана

Offline Татьяна  
#5 Оставлено : 29 октября 2009 г. 18:40:58(UTC)
Татьяна

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 06.02.2008(UTC)
Сообщений: 1,491
Откуда: Крипто-Про

Поблагодарили: 40 раз в 37 постах
ответила Вам по почте.

неправильным является использование openssl для проверки подписи, сделанной по ГОСТу, поскольку текущая стабильная версия openssl не включает поддержку соответствующего криптографического алгоритма.

рекомендуется использовать для проверки подписей одну из утилит, поддерживающих работу с криптографией через КриптоПро CSP, например http://www.cryptopro.ru/...ucts/cryptcp/default.htm
Татьяна
ООО Крипто-Про
Offline cybermerlin  
#6 Оставлено : 2 ноября 2009 г. 18:12:56(UTC)
cybermerlin

Статус: Активный участник

Группы: Участники
Зарегистрирован: 28.10.2009(UTC)
Сообщений: 121

Сказал(а) «Спасибо»: 2 раз
Поблагодарили: 3 раз в 3 постах
ваша утилита лезет в локальное хранилище и оттуда пытается получить сертификат клиента, который подписывал данные
так как утилита запускается на сервере - резонно, что в локальных нет серта данного клиента
ВОПРОС:
- как поступать в данном случае?
- что делать если в pkcs7 не был включен серт клиента и на сервере тоже его нет? на основе CRL разве валидация сертификатов не возможна?
- как организовать валидацию имея только CRL в доступе?
Offline Татьяна  
#7 Оставлено : 2 ноября 2009 г. 19:26:19(UTC)
Татьяна

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 06.02.2008(UTC)
Сообщений: 1,491
Откуда: Крипто-Про

Поблагодарили: 40 раз в 37 постах
просто по подписи(без включенного в файл сертификата) нельзя проверить подпись.
В CRL содержится список серийных номеров отозванных сертификатов, этой информации также не достаточно.

можно получать файл сертификата клиента(запрашивать сертификат через сайт и сохранять в файл) или включать сертификат в файл с подписью. В этом случае размещение сертификата указыается через опцию

-f путь_к_файлу_в_который_включен_сертификат
Татьяна
ООО Крипто-Про
Offline cybermerlin  
#8 Оставлено : 2 ноября 2009 г. 21:03:58(UTC)
cybermerlin

Статус: Активный участник

Группы: Участники
Зарегистрирован: 28.10.2009(UTC)
Сообщений: 121

Сказал(а) «Спасибо»: 2 раз
Поблагодарили: 3 раз в 3 постах
супер
под виндами работает :)
спасибо
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest (2)
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.