Статус: Активный участник
Группы: Участники
Зарегистрирован: 13.04.2012(UTC) Сообщений: 109
|
Задача все-таки решилась. Пример 1 работы с CADESCOM так и не дал никакого резкльтата. Видимо он здесь не подходит. А вот использование примера 5 закончилось успешно. http://cpdn.cryptopro.ru...escomsamplecadesbes.htmlИтак, заменяем в предыдущем коде содержимое метода SignWithAdvancedEDS() Код:
// Вычисляем УЭЦП
public static byte[] SignWithAdvancedEDS(byte[] content, X509Certificate2 certificate)
{
byte[] signature = null;
try
{
string tspServerAddress = @"http://www.cryptopro.ru/tsp/tsp.srf";
CPSigner cps = new CPSigner();
cps.Certificate = GetCAPICOMCertificate(certificate.Thumbprint);
cps.Options = CAPICOM_CERTIFICATE_INCLUDE_OPTION.CAPICOM_CERTIFICATE_INCLUDE_WHOLE_CHAIN;
cps.TSAAddress = tspServerAddress;
CadesSignedData csd = new CadesSignedData();
csd.Content = content;
// Создание и проверка подписи CAdES BES
signature = csd.SignCades(cps, CADESCOM_CADES_TYPE.CADESCOM_CADES_BES, true, CAPICOM_ENCODING_TYPE.CAPICOM_ENCODE_BINARY);
csd.VerifyCades(signature, CADESCOM_CADES_TYPE.CADESCOM_CADES_BES, true);
// Создание и проверка параллельной подписи CAdES X Long Type 1
signature = csd.CoSignCades(cps, CADESCOM_CADES_TYPE.CADESCOM_CADES_DEFAULT, CAPICOM_ENCODING_TYPE.CAPICOM_ENCODE_BINARY);
csd.VerifyCades(signature, CADESCOM_CADES_TYPE.CADESCOM_CADES_BES, true);
// Дополнение и проверка подписи CAdES BES до подписи CAdES X Long Type 1
// (вторая подпись остается без изменения, так как она уже CAdES X Long Type 1)
signature = csd.EnhanceCades(CADESCOM_CADES_TYPE.CADESCOM_CADES_DEFAULT, tspServerAddress, CAPICOM_ENCODING_TYPE.CAPICOM_ENCODE_BINARY);
csd.VerifyCades(signature, CADESCOM_CADES_TYPE.CADESCOM_CADES_DEFAULT, true);
// тестовая проверка подписи
CadesSignedData csd2 = new CadesSignedData();
csd2.Content = content;
csd2.Verify(signature, true);
}
catch (Exception ex)
{
throw ex;
}
return signature;
}
Теперь Adobe Reader прекрасно распознает и валидирует УЭЦП в подписанном PDF документе. Аллилуйя! Отредактировано пользователем 31 июля 2012 г. 17:50:51(UTC)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Администраторы, Участники Зарегистрирован: 10.12.2008(UTC) Сообщений: 926  Откуда: Крипто-Про Поблагодарили: 101 раз в 96 постах
|
Очень хорошо, что все заработало, вот только пример 5 создает две параллельные подписи. При проверке вы видите одну или обе? Основное различие в вашем коде - то, что в первом случае при вызове метода Sign не указывался параметр EncodingType (по умолчанию подписанное сообщение возвращается в кодировке BASE64). А во втором случае этот параметр указывался (CAPICOM_ENCODING_BYNARY в методе SignCades) - и сообщение возвращалось в бинарном виде. Отредактировано пользователем 2 августа 2012 г. 17:49:08(UTC)
| Причина: Не указана
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 13.04.2012(UTC) Сообщений: 109
|
К сожалению, это не так. Я довольно много промучился с разными вариантами. Вызывал и Код:signature = csd.Sign(cps, true, CAPICOM_ENCODING_TYPE.CAPICOM_ENCODE_BINARY);
Но такая подпись в Adobe Reader не распознавалась. Видимо чего-то у вас там в коде этого метода не хватает. В предыдущем листинге действительно создается две подписи. Но Adobe Reader видит почему-то только одну. Поэтому в конце концов я остановислся на таком варианте: Код:
// Вычисляем УЭЦП
public static byte[] SignWithAdvancedEDS(byte[] content, X509Certificate2 certificate)
{
byte[] signature = null;
try
{
string tspServerAddress = @"http://www.cryptopro.ru/tsp/tsp.srf";
CPSigner cps = new CPSigner();
cps.Certificate = GetCAPICOMCertificate(certificate.Thumbprint);
cps.Options = CAPICOM_CERTIFICATE_INCLUDE_OPTION.CAPICOM_CERTIFICATE_INCLUDE_WHOLE_CHAIN;
cps.TSAAddress = tspServerAddress;
CadesSignedData csd = new CadesSignedData();
csd.Content = content;
// Создание и проверка подписи CAdES BES
signature = csd.SignCades(cps, CADESCOM_CADES_TYPE.CADESCOM_CADES_BES, true, CAPICOM_ENCODING_TYPE.CAPICOM_ENCODE_BINARY);
// Дополнение и проверка подписи CAdES BES до подписи CAdES X Long Type 1
signature = csd.EnhanceCades(CADESCOM_CADES_TYPE.CADESCOM_CADES_DEFAULT, tspServerAddress, CAPICOM_ENCODING_TYPE.CAPICOM_ENCODE_BINARY);
}
catch (Exception ex)
{
throw ex;
}
return signature;
}
Отредактировано пользователем 2 августа 2012 г. 23:16:00(UTC)
| Причина: Не указана
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 13.04.2012(UTC) Сообщений: 109
|
Но на этом все не закончилось. В конечном итоге я пишу WCF-сервис, который автоматически подписывает PDF документы. Разработку и тестирование я проводил на машине Windows 7 Professional 32-bit. А теперь готовый сервис перенес на Windows Server 2008 R2 Standard 64-bit. И тут снова появилась проблема. На строчке Код:signature = csd.EnhanceCades(CADESCOM_CADES_TYPE.CADESCOM_CADES_X_LONG_TYPE_1, tspServerAddress, CAPICOM_ENCODING_TYPE.CAPICOM_ENCODE_BINARY);
вылетает exception: Цитата: System.Runtime.InteropServices.COMException was caught Message=The configuration data for this product is corrupt. Contact your support personnel. Source=CAdESCOM.CadesSignedData.1 ErrorCode=-2147023286 StackTrace: at CAdESCOM.CadesSignedDataClass.EnhanceCades(CADESCOM_CADES_TYPE CadesType, String TSAAddress, CAPICOM_ENCODING_TYPE EncodingType)
То есть, вызов SignCades() выполняется нормально, а следующий за ним EnhanceCades() нет. Не подскажете, что бы это могло значить и как это исправить? Может ли на это влиять, что у TSP Client и OCSP Client на сервере закончились тестовые лицензии? И нужно ли их приобретать вообще, если лицензия на КриптоПро CSP есть и установлена. А TSP и OCSP клиенты используются только опосредованно (если вообще используются) при вызове методов CADESCOM в вышеприведенном коде. Или нужна какая-то лицензия на CADESCOM? На рабочей машине с Windows 7 у меня таких проблем не было. Но там все лицензии тестовые и ни одна еще не истекла. А, еще может быть важно, что на сервере используется сертификат, выданный нашим собственным УЦ. И обращение при подписании происходит к нашим TSP и OCSP серверам. Отредактировано пользователем 2 августа 2012 г. 23:45:45(UTC)
| Причина: Не указана
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 13.04.2012(UTC) Сообщений: 109
|
Вот лог dbgView при выполнении метода EnhanceCades() Цитата: [1472] [1472] *** HR originated: -2147024774 [1472] *** Source File: d:\iso_whid\x86fre\base\isolation\com\copyout.cpp, line 1391 [1472] [1472] [1472] *** HR propagated: -2147024774 [1472] *** Source File: d:\iso_whid\x86fre\base\isolation\com\identityauthority.cpp, line 278 [1472] [1472] [1472] *** HR originated: -2147024774 [1472] *** Source File: d:\iso_whid\x86fre\base\isolation\com\copyout.cpp, line 1391 [1472] [1472] [1472] *** HR propagated: -2147024774 [1472] *** Source File: d:\iso_whid\x86fre\base\isolation\com\identityauthority.cpp, line 278 [1472] [1472] [1472] *** HR propagated: -2147024774 [1472] *** Source File: d:\iso_whid\x86fre\base\isolation\com\identityauthority.cpp, line 278 [1472]
На мой взгляд он выглядит странно, учитывая что диск D: - это CD-ROM, который пустой. Но может быть это поможет.
|
|
|
|
Статус: Сотрудник
Группы: Администраторы, Участники Зарегистрирован: 10.12.2008(UTC) Сообщений: 926  Откуда: Крипто-Про Поблагодарили: 101 раз в 96 постах
|
avorobev написал:Но такая подпись в Adobe Reader не распознавалась. Видимо чего-то у вас там в коде этого метода не хватает. В предыдущем листинге действительно создается две подписи. Но Adobe Reader видит почему-то только одну. Так быть не должно, можете прислать или выложить подписи, чтобы мы могли разобраться? avorobev написал:Может ли на это влиять, что у TSP Client и OCSP Client на сервере закончились тестовые лицензии? И нужно ли их приобретать вообще, если лицензия на КриптоПро CSP есть и установлена. А TSP и OCSP клиенты используются только опосредованно (если вообще используются) при вызове методов CADESCOM в вышеприведенном коде. Или нужна какая-то лицензия на CADESCOM?. Сам по себе CADESCOM не требует наличия лицензии, но при дополнении подписи до усовершенствованной происходят обращения к службам TSP и OCSP. Эти обращения происходят при помощи КриптоПро TSP Client и OCSP Client, поэтому для дополнения подписи до усовершенствованной вам необходимы лицензии на данные продукты. avorobev написал:А, еще может быть важно, что на сервере используется сертификат, выданный нашим собственным УЦ. И обращение при подписании происходит к нашим TSP и OCSP серверам. Где расположены службы OCSP и TSP и кому они принадлежат, при проверке лицензий на КриптоПро TSP Client и OCSP Client роли не играет.
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 13.04.2012(UTC) Сообщений: 109
|
Новожилова Елена написал:avorobev написал:Но такая подпись в Adobe Reader не распознавалась. Видимо чего-то у вас там в коде этого метода не хватает. В предыдущем листинге действительно создается две подписи. Но Adobe Reader видит почему-то только одну. Так быть не должно, можете прислать или выложить подписи, чтобы мы могли разобраться? Да, пожалуйста. Файл Signature_NotValid.pdf подписан с помощью метода Код:signature = csd.Sign(cps, true, CAPICOM_ENCODING_TYPE.CAPICOM_ENCODE_BINARY);
и подпись в нем не распознается. Файл Signature_OK.pdf подписан комбинацией методов Код:signature = csd.SignCades(cps, CADESCOM_CADES_TYPE.CADESCOM_CADES_BES, true, CAPICOM_ENCODING_TYPE.CAPICOM_ENCODE_BINARY);
signature = csd.EnhanceCades(CADESCOM_CADES_TYPE.CADESCOM_CADES_DEFAULT, tspServerAddress, CAPICOM_ENCODING_TYPE.CAPICOM_ENCODE_BINARY);
и все прекрасно работает. Вложение(я):  Signature_NotValid.pdf (97kb) загружен 13 раз(а). Signature_OK.pdf (97kb) загружен 18 раз(а).У Вас нет прав для просмотра или загрузки вложений. Попробуйте зарегистрироваться.
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 13.04.2012(UTC) Сообщений: 109
|
Новожилова Елена написал:avorobev написал:Может ли на это влиять, что у TSP Client и OCSP Client на сервере закончились тестовые лицензии? И нужно ли их приобретать вообще, если лицензия на КриптоПро CSP есть и установлена. А TSP и OCSP клиенты используются только опосредованно (если вообще используются) при вызове методов CADESCOM в вышеприведенном коде. Или нужна какая-то лицензия на CADESCOM?. Сам по себе CADESCOM не требует наличия лицензии, но при дополнении подписи до усовершенствованной происходят обращения к службам TSP и OCSP. Эти обращения происходят при помощи КриптоПро TSP Client и OCSP Client, поэтому для дополнения подписи до усовершенствованной вам необходимы лицензии на данные продукты. Но это может быть причиной вышеуказанной ошибки? Новожилова Елена написал:avorobev написал:А, еще может быть важно, что на сервере используется сертификат, выданный нашим собственным УЦ. И обращение при подписании происходит к нашим TSP и OCSP серверам. Где расположены службы OCSP и TSP и кому они принадлежат, при проверке лицензий на КриптоПро TSP Client и OCSP Client роли не играет. И УЦ и TSP и OCSP установлены у нас в компании, все на продуктах КриптоПро. Установлены и работают давно. До сих пор вроде никаких претензий к ним не было.
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 13.04.2012(UTC) Сообщений: 109
|
После установки лицензий для TSP и OCSP клиентов ошибка стала другая. Так что наличие лицензий действительно мешало. Но теперь при попытке вызвать метод EnhanceCades() возникает следующая ошибка: Цитата: System.Runtime.InteropServices.COMException Message=The group or resource is not in the correct state to perform the requested operation. Source=CAdESCOM.CadesSignedData.1 ErrorCode=-2147019873 StackTrace: at CAdESCOM.CadesSignedDataClass.EnhanceCades(CADESCOM_CADES_TYPE CadesType, String TSAAddress, CAPICOM_ENCODING_TYPE EncodingType)
Не подскажете, что это может значить? TSP или OCSP сервер находится в неправильном состоянии? А как его настроить в правильное?
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 13.04.2012(UTC) Сообщений: 109
|
Вопрос решился, всем спасибо. Дело было в том, что наш TSP сервер работал не корректно. Сейчас все починили и все подписывается успешно. Хотя вопрос разницы в использовании методов CadesSignedData.Sign() и CadesSignedData.EnhanceCades() остается открытым. Отредактировано пользователем 20 августа 2012 г. 16:57:41(UTC)
| Причина: Не указана
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close