Статус: Активный участник
Группы: Участники
Зарегистрирован: 15.12.2009(UTC) Сообщений: 32 Откуда: Москва, ФКЦ "Земля"
|
Использую ЭЦП SDK для создания подписи со штампом времени по примеру из SDK "Создание подписанного сообщения ", версия SDK последняя, CSP 3.6.6497 и TSP Client лицензированы. Код: Код:
public static void TestSignFile(string fileName, X509Certificate2 signCert)
{
StreamReader reader = new StreamReader(fileName);
string text = reader.ReadToEnd();
var oSigner = new CAdESCOM.CPSignerClass();
CAPICOM.Certificate cert = GetSignerCertificate(signCert.SerialNumber);
if (cert == null)
return;
oSigner.Certificate = cert;
oSigner.TSAAddress = "http://www.cryptopro.ru/tsp/tsp.srf";
var oSignedData = new CAdESCOM.CadesSignedData();
oSignedData.Content = text;
var sSignedData = oSignedData.Sign(oSigner, true, CAPICOM.CAPICOM_ENCODING_TYPE.CAPICOM_ENCODE_BASE64);
var date = oSigner.SignatureTimeStampTime;
}
private static CAPICOM.Certificate GetSignerCertificate(string serialNumber)
{
Store oStore = new StoreClass();
oStore.Open(
CAPICOM_STORE_LOCATION.CAPICOM_CURRENT_USER_STORE,
"My", CAPICOM_STORE_OPEN_MODE.CAPICOM_STORE_OPEN_EXISTING_ONLY |
CAPICOM_STORE_OPEN_MODE.CAPICOM_STORE_OPEN_READ_ONLY
);
Certificates oCerts = (Certificates)oStore.Certificates;
Certificate cert;
for (int i = 0; i < oCerts.Count; i++)
{
cert = (Certificate)oCerts[i + 1];
if (cert.SerialNumber == serialNumber)
{
return cert;
}
}
return null;
}
эксепшен вываливается в строчке var sSignedData = oSignedData.Sign(oSigner, true, CAPICOM.CAPICOM_ENCODING_TYPE.CAPICOM_ENCODE_BASE64);полный текст ошибки Цитата:Данные настройки для этого продукта повреждены. Обратитесь в службу поддержки. (Исключение из HRESULT: 0x8007064A) что то не так установлено или сама методика формирования подписи со штампом времени неправильная? и еще вопрос, для формирования штампа нужно ли покупать КриптоПро TSP SDK или достаточно функционала КриптоПро ЭЦП SDK + лицензированный TSP Client?
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 15.12.2009(UTC) Сообщений: 32 Откуда: Москва, ФКЦ "Земля"
|
Очень нужна помощь, что может быть не так с софтом, может как то надо настроить TSP Client или Crypto PRO CSP. Я попробовал разделить получение временного штампа и просто подпись файла, по отдельности все работает, вызов же oSignedData.Sign продолжает валиться в ошибку, может кто то может привести пример добавления в простую подпись временного штампа? Получение временного штампа: Код:
TSPRequest oRequest = new TSPCOM.TSPRequest();
TSPCOM.TSPStamp oStamp;
CPICom.HashedData20 oHash = new CPICom.HashedData20();
oHash.Algorithm = (CAPICOM.CAPICOM_HASH_ALGORITHM)CPICom.CPICOM_HASH_ALGORITHM.CAPICOM_HASH_ALGORITHM_GOST3411;
oHash.Hash("ABC");
oRequest.Hash = (HashedData)oHash;
oRequest.UseNonce = true;
oRequest.PolicyID = "";
oRequest.CertReq = false;
oRequest.TSAAddress = "http://www.cryptopro.ru/tsp/tsp.srf";
oRequest.TSAAuthType = TSPCOM.TSPCOM_AUTH_TYPE.TSPCOM_AUTH_TYPE_ANONYMOUS;
oRequest.TSAUserName = "";
oRequest.TSAPassword = "";
string error = "";
string result = "";
try
{
oStamp = oRequest.Send(false);
result = oStamp.Export();
}
catch (Exception ex)
{
error = ex.Message;
}
Создание простой подписи: Код:
var oSigner = new CAdESCOM.CPSignerClass();
CAPICOM.Certificate cert = GetSignerCertificate(signCert.SerialNumber);
if (cert == null)
return;
oSigner.Certificate = cert;
var oSignedData = new CAdESCOM.CadesSignedData();
oSignedData.Content = text;//строчка с буквами вида "sdfasdlfjsdfj"
var aSignedData = oSignedData.SignCades(oSigner, CAdESCOM.CADESCOM_CADES_TYPE.CADESCOM_CADES_BES,
false,CAdESCOM.CAPICOM_ENCODING_TYPE.CAPICOM_ENCODE_BASE64);
очень нужен совет! При этом триальный КРИПТО АРМ нормально генерит подпись с временным штампом
|
|
|
|
Статус: Сотрудник
Группы: Администраторы, Участники Зарегистрирован: 10.12.2008(UTC) Сообщений: 924 Откуда: Крипто-Про Поблагодарили: 99 раз в 95 постах
|
Сложно ответить, не зная вашей задачи. Метод oSignedData.Sign пытается создать усовершенствованную ЭЦП. Вам нужно именно это? Или только добавление в простую подпись штампа времени? На какие данные должен быть получен этот штамп? Если первое, то проверяйте по списку. Если со списком все хорошо, тогда желательно увидеть код ошибки. Во втором случае вам нужно полученный отдельно штамп времени самостоятельно закодировать в атрибут добавить закодированный атрибут в ЭЦП. Закодированный атрибут можно добавить например в коллекцию oSigner.UnauthenticatedAttributes до созлания подписи (не лучший вариант, зависит от того, на какие данные нужно получать штамп? На значение подписи в этом случае не получится, так как подпись еще не создана) Либо добавлять атрибут в уже созданную подпись самостоятельно. CADESCOM способов это сделать не предоставляет, нужно использовать CryptoAPI.
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 15.12.2009(UTC) Сообщений: 32 Откуда: Москва, ФКЦ "Земля"
|
я так понимаю что без работающего OCSP клиента и его настрой не получится создать усовершенствованную подпись используя oSignedData.Sign? в принципе мне достаточно просто встроить штамп времени без относительно к значению подписи. как осуществляется кодирование в атрибут? если у меня есть структура, которую вернул Код:oStamp = oRequest.Send(false);
как мне ее можно добавить в атрибуты oSigner?
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 15.12.2009(UTC) Сообщений: 32 Откуда: Москва, ФКЦ "Земля"
|
сейчас пытаюсь добавить не подписанный атрибут в oSigner Код:
oSigner.UnauthenticatedAttributes.Add(oStamp.Export());
вываливается в ошибку "Значение не попадает в ожидаемый диапазон.", как мне правильно преобразовать полученный к атрибуту, что бы он сохранился в структуре?
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 15.12.2009(UTC) Сообщений: 32 Откуда: Москва, ФКЦ "Земля"
|
Есть еще вопрос, будет ли подпись созданная таким образом, то есть сначала создаем не подписываемый атрибут со штампом времени, потом подписываем проверяться корректно?
Такое "извращение" нужно, потому что в итоге нужен только штамп времени на подпись, данные от OCSP клиента не нужны, вот вопрос состоит в том, будет ли такая подпись представлять из себя усовершенствованную подпись, которую к примеру примет КРИПТО АРМ? Если не примет, то вопрос по включению штампа в атрибуты неактуален, потому как требуется совместимость со сторонними приложениями для проверки подписи
|
|
|
|
Статус: Сотрудник
Группы: Администраторы, Участники Зарегистрирован: 10.12.2008(UTC) Сообщений: 924 Откуда: Крипто-Про Поблагодарили: 99 раз в 95 постах
|
Hardbotan написал:Есть еще вопрос, будет ли подпись созданная таким образом, то есть сначала создаем не подписываемый атрибут со штампом времени, потом подписываем проверяться корректно?
Такое "извращение" нужно, потому что в итоге нужен только штамп времени на подпись, данные от OCSP клиента не нужны, вот вопрос состоит в том, будет ли такая подпись представлять из себя усовершенствованную подпись, которую к примеру примет КРИПТО АРМ? Если не примет, то вопрос по включению штампа в атрибуты неактуален, потому как требуется совместимость со сторонними приложениями для проверки подписи Получить штамп времени на подпись ДО ее создания нельзя. Пока нет подписи - нет штампа времени на значение подписи. Добавить таким образом в атрибут можно только штамп времени на какие-то другие данные. После создания подписи атрибут можно добавить средствами CryptoAPI. Подпись только со штампом времени на значение подписи не будет представлять из себя усовершенствованную подпись. Формат усовершенствованной подписи предполагает обязательное наличие OCSP-ответа о статусе сертификата ключа подписи. По поводу принятия подписи КРИПТО АРМ - подпись со штампом времени (не усовершенствованная) будет проверяться как обычная подпись, на текущий момент времени.
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 15.12.2009(UTC) Сообщений: 32 Откуда: Москва, ФКЦ "Земля"
|
мне не нужен штамп времени на подпись, мне нужен штамп времени на исходные данные, осталось понять как мне запихнуть штамп времени в атрибуты подписи используя CryptoAPI
КРИПТО АРМ будет отображать штамп времени на исходные данные, у него есть такая опция при создании подписи с его помощью
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close