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

Уведомление

Icon
Error

9 Страницы123>»
Опции
К последнему сообщению К первому непрочитанному
Offline engineer  
#1 Оставлено : 26 августа 2008 г. 21:00:10(UTC)
engineer

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

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

Код на C#:

Код:
CAdESCOM.CadesSignedData SignedData = new CAdESCOM.CadesSignedDataClass();
SignedData.Content = data;
string res = SignedData.Sign(null, true, CAPICOM.CAPICOM_ENCODING_TYPE.CAPICOM_ENCODE_BASE64);


(сертификат выбирается посредством UI в окне выбора сертификата, т.к. первый параметр равен null)

Проблема:
После вызова метода Sign получаем Exception с кодом: 0xC2100121, более никакой детализации нет.

Собственно в чем может быть проблема?

P.S. Аналогичный код, но через CAPICOM нормально работает с тем-же сертификатом.
Offline engineer  
#2 Оставлено : 26 августа 2008 г. 21:12:06(UTC)
engineer

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

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

И еще, когда явно указывается сертификат:

Код:

CAPICOM.ICertificate cert = //(Получаем сертификат средствами CAPICOM)//
CAdESCOM.CPSigner Signer = new CAdESCOM.CPSignerClass();	    
Signer.Certificate = cert;


выдается исключение с сообщением: "Интерфейс не поддерживается".
Offline Павел Смирнов  
#3 Оставлено : 27 августа 2008 г. 21:20:43(UTC)
Павел Смирнов

Статус: Вам и не снилось

Группы: Администраторы
Зарегистрирован: 24.12.2007(UTC)
Сообщений: 831
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 1 раз
Поблагодарили: 48 раз в 44 постах
По первому вопросу. Код ошибки означает "Не задан адрес службы штампов времени" (ошибка описана в модуле tspcli.dll). В другой ветке я вам уже описал причину возникновения этой ошибки.

В новом дистрибутиве, который скоро будет доступен для скачивания, подобные ошибки будут сопровождаться осмысленным описанием.
Техническую поддержку оказываем тут.
Наша база знаний.
Offline Павел Смирнов  
#4 Оставлено : 27 августа 2008 г. 22:31:38(UTC)
Павел Смирнов

Статус: Вам и не снилось

Группы: Администраторы
Зарегистрирован: 24.12.2007(UTC)
Сообщений: 831
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 1 раз
Поблагодарили: 48 раз в 44 постах
По второму вопросу. Беда в том, что присваиваемый объект CAPICOM.Certificate и объект CAdESCOM.CPSigner живут в разных апартментах, а функция присваивания, которую CAdESCOM перевызывает из CAPICOM рассчитывает на то, что объекты живут в одном апартменте. Интересно, что при вызове аналогичного кода из скрипта объекты живут в одном апартменте и присваивание отрабатывается правильно.

Будем править. Прогноза по времени дать пока не могу.
Техническую поддержку оказываем тут.
Наша база знаний.
Offline Павел Смирнов  
#5 Оставлено : 24 сентября 2008 г. 19:14:55(UTC)
Павел Смирнов

Статус: Вам и не снилось

Группы: Администраторы
Зарегистрирован: 24.12.2007(UTC)
Сообщений: 831
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 1 раз
Поблагодарили: 48 раз в 44 постах
Ошибка исправлена. Можете брать новый КриптоПро ЭЦП SDK с сайта.
Техническую поддержку оказываем тут.
Наша база знаний.
Offline engineer  
#6 Оставлено : 3 октября 2008 г. 16:39:22(UTC)
engineer

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

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

Смирнов написал:
Ошибка исправлена. Можете брать новый КриптоПро ЭЦП SDK с сайта.


При подписи получаем исключение:
"Отсутствует доверие к подписи зашифрованного сообщения или списку доверия сертификатов"

(задаем явно адрес службы штампов времени через св-во CPSigner.TSAAddress = "http://www.cryptopro.ru/tsp/tsp.srf")

Можно более подробно пояснить чем вызванно данное сообщение об ошибке?
Offline Павел Смирнов  
#7 Оставлено : 3 октября 2008 г. 16:44:53(UTC)
Павел Смирнов

Статус: Вам и не снилось

Группы: Администраторы
Зарегистрирован: 24.12.2007(UTC)
Сообщений: 831
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 1 раз
Поблагодарили: 48 раз в 44 постах
Проверяйте по списку.
Техническую поддержку оказываем тут.
Наша база знаний.
Offline Randoom  
#8 Оставлено : 29 октября 2009 г. 15:24:08(UTC)
Randoom

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

Группы: Участники
Зарегистрирован: 15.06.2009(UTC)
Сообщений: 89
Откуда: Уфа, РРЦ "АйТи"

Код:

private CAPICOM.ICertificate GetCAPICOMCert(X509Certificate2 cert, X509Store store)
        {
            CAPICOM.Store oStore = new CAPICOM.Store();
            oStore.Open(CAPICOM_STORE_LOCATION.CAPICOM_CURRENT_USER_STORE,store.Name,         
                  CAPICOM_STORE_OPEN_MODE.CAPICOM_STORE_OPEN_READ_ONLY);
            foreach (ICertificate oCert in oStore.Certificates)
            {
                if (oCert.SerialNumber.Equals(cert.SerialNumber)) return oCert;
            }
            throw new CryptographicException("Невозможно найти сертификат");
        }
public string Sign(XDocument document, X509Certificate2 cert, X509Store store)
        {
            CPSigner cpSigner = new CPSigner();
            cpSigner.Certificate = GetCAPICOMCert(cert, store);
            CadesSignedData oSignedData = new CadesSignedData();
            oSignedData.Content = document.ToString();

            //Создание и проверка подписи CAdES BES

            string sSignedData = oSignedData.SignCades(cpSigner, CADESCOM_CADES_TYPE.CADESCOM_CADES_BES, false,
                                      CAPICOM_ENCODING_TYPE.CAPICOM_ENCODE_BASE64);
            oSignedData.VerifyCades(sSignedData, CADESCOM_CADES_TYPE.CADESCOM_CADES_BES, false);

            // Создание параллельной подписи CAdES X Long Type 1

            sSignedData = oSignedData.CoSignCades(cpSigner, CADESCOM_CADES_TYPE.CADESCOM_CADES_DEFAULT,
                                                  CAPICOM_ENCODING_TYPE.CAPICOM_ENCODE_BASE64);
 .... 


Ексепшен на последней строке примера:

System.Runtime.InteropServices.COMException was unhandled by user code
Message="Исключение из HRESULT: 0xC2100121"
Source="Interop.CAdESCOM"
ErrorCode=-1039138527
StackTrace:
в CAdESCOM.CadesSignedDataClass.CoSignCades(Object pSigner, CADESCOM_CADES_TYPE CadesType, CAPICOM_ENCODING_TYPE EncodingType)
...

Подскажите в чем ошибка пожалуйста


p.s. Еще пара дополнительных вопросов, ну что бы уж сразу ;)

1) функция VerifyCades ничего не возвращает - как понять что подпись корректна\валидна ?

2) Я так смутно понял, прочитав эту ветку что если в
oSignedData.SignCades(cpSigner вместо cpSigner передать null - то будет предложено окно выбора сертификата,
а как так сделать чтобы вызывалось одно окно для ряда функций?,

т.е. хотелось бы вызвать криптопрошное окно выбора сертификата, получить из него Сигнера и использовать его во всех функциях с подписанием.

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

Offline Новожилова Елена  
#9 Оставлено : 29 октября 2009 г. 17:48:16(UTC)
Новожилова Елена

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

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

Поблагодарили: 99 раз в 95 постах
Ошибка в том, что для создания подписи CAdES X Long должны быть получены штампы времени. А для этого нужно указать адрес службы штампов времени.
Это можно сделать как в групповых политиках, так и через свойство TSAAddress объекта CPSigner.

1. По поводу функции VerifyCades - если подпись некорректна, то функция вызовет исключение с информацией о произошедшей ошибке.

2. Для Ваших целей Вы можете воспользоваться свойством CPSigners объекта SignedData.
Offline Randoom  
#10 Оставлено : 29 октября 2009 г. 17:56:53(UTC)
Randoom

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

Группы: Участники
Зарегистрирован: 15.06.2009(UTC)
Сообщений: 89
Откуда: Уфа, РРЦ "АйТи"

Новожилова Елена написал:
Ошибка в том, что для создания подписи CAdES X Long должны быть получены штампы времени. А для этого нужно указать адрес службы штампов времени.
Это можно сделать как в групповых политиках, так и через свойство TSAAddress объекта CPSigner.


Предполагалось что это требуется на этапе
sSignedData = oSignedData.EnhanceCades(CADESCOM_CADES_TYPE.CADESCOM_CADES_DEFAULT, TSPServer,
CAPICOM_ENCODING_TYPE.CAPICOM_ENCODE_BASE64);
где TSPServer очень даже указывается.
p.s. Код один-в-один с мануала! там про указание TSAAddress ни слова ;( Хотя, может я просто бейсик не умею читать ...
p.p.s. Помогло, спасибо ;)

Новожилова Елена написал:

2. Для Ваших целей Вы можете воспользоваться свойством CPSigners объекта SignedData.


Как? Хотелось бы подробнее!

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

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