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

Уведомление

Icon
Error

2 Страницы<12
Опции
К последнему сообщению К первому непрочитанному
Offline avorobev  
#21 Оставлено : 31 июля 2012 г. 17:47:09(UTC)
avorobev

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

Группы: Участники
Зарегистрирован: 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 документе. Аллилуйя! Angel

Отредактировано пользователем 31 июля 2012 г. 17:50:51(UTC)  | Причина: Не указана

Offline Новожилова Елена  
#22 Оставлено : 2 августа 2012 г. 17:41:16(UTC)
Новожилова Елена

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

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

Поблагодарили: 85 раз в 82 постах
Очень хорошо, что все заработало, вот только пример 5 создает две параллельные подписи. При проверке вы видите одну или обе?

Основное различие в вашем коде - то, что в первом случае при вызове метода Sign не указывался параметр EncodingType (по умолчанию подписанное сообщение возвращается в кодировке BASE64). А во втором случае этот параметр указывался (CAPICOM_ENCODING_BYNARY в методе SignCades) - и сообщение возвращалось в бинарном виде.

Отредактировано пользователем 2 августа 2012 г. 17:49:08(UTC)  | Причина: Не указана

Offline avorobev  
#23 Оставлено : 2 августа 2012 г. 22:58:38(UTC)
avorobev

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

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

Offline avorobev  
#24 Оставлено : 2 августа 2012 г. 23:13:11(UTC)
avorobev

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

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

Offline avorobev  
#25 Оставлено : 3 августа 2012 г. 15:12:40(UTC)
avorobev

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

Группы: Участники
Зарегистрирован: 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, который пустой. Но может быть это поможет.
Offline Новожилова Елена  
#26 Оставлено : 3 августа 2012 г. 20:14:22(UTC)
Новожилова Елена

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

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

Поблагодарили: 85 раз в 82 постах
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 роли не играет.
Offline avorobev  
#27 Оставлено : 3 августа 2012 г. 20:49:38(UTC)
avorobev

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

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

У Вас нет прав для просмотра или загрузки вложений. Попробуйте зарегистрироваться.
Offline avorobev  
#28 Оставлено : 3 августа 2012 г. 20:53:01(UTC)
avorobev

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

Группы: Участники
Зарегистрирован: 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 установлены у нас в компании, все на продуктах КриптоПро. Установлены и работают давно. До сих пор вроде никаких претензий к ним не было.
Offline avorobev  
#29 Оставлено : 15 августа 2012 г. 19:19:03(UTC)
avorobev

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

Группы: Участники
Зарегистрирован: 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 сервер находится в неправильном состоянии? А как его настроить в правильное?
Offline avorobev  
#30 Оставлено : 20 августа 2012 г. 16:56:24(UTC)
avorobev

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

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

Вопрос решился, всем спасибо. Дело было в том, что наш TSP сервер работал не корректно. Сейчас все починили и все подписывается успешно.
Хотя вопрос разницы в использовании методов CadesSignedData.Sign() и CadesSignedData.EnhanceCades() остается открытым.

Отредактировано пользователем 20 августа 2012 г. 16:57:41(UTC)  | Причина: Не указана

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