| 
	Статус: Активный участник
 Группы: Участники
Зарегистрирован: 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) Сообщений: 939  Откуда: Крипто-ПроПоблагодарили: 115 раз в 104 постах
 | 
            
		      
                Очень хорошо, что все заработало, вот только пример 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) Сообщений: 939  Откуда: Крипто-ПроПоблагодарили: 115 раз в 104 постах
 | 
            
		      
                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