Статус: Активный участник
Группы: Участники
Зарегистрирован: 17.09.2014(UTC) Сообщений: 123 Сказал «Спасибо»: 5 раз Поблагодарили: 2 раз в 2 постах
|
Добрый день! подскажите, при использовании следующего кода в x86 все отработало отлично, подпись создалась и проходит проверку. При использовании x64 метод SignCades падает с ошибкой "интерфейс не поддерживается". В документации сказано, что Store нужно использовать из CadesCom в x64, что я и делаю, но все равно. Вот пример кода Код:
var certificate = null;
IStore3 store = null;
store = Activator.CreateInstance(Type.GetTypeFromProgID("CAdESCOM.Store")) as IStore2;
store.Open(CAPICOM_STORE_LOCATION.CAPICOM_LOCAL_MACHINE_STORE, "My", CAPICOM_STORE_OPEN_MODE.CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED);
foreach (ICertificate2 cert in store.Certificates)
if (cert.SerialNumber == cerificateSerialNumber)
certificate = cert;
store.Close();
if (certificate==null)
throw new SignCreateException("Выбранный сертификат не найден в хранилище");
var data = Activator.CreateInstance(Type.GetTypeFromProgID("CAdESCOM.CadesSignedData")) as ICPSignedData3;
var signer = Activator.CreateInstance(Type.GetTypeFromProgID("CAdESCOM.CPSigner")) as ICPSigner5;
signer.Options = CAPICOM_CERTIFICATE_INCLUDE_OPTION.CAPICOM_CERTIFICATE_INCLUDE_CHAIN_EXCEPT_ROOT;
signer.Certificate = certificate;
signer.TSAAddress = tspUrl;
data.ContentEncoding = _contentEncoding;
data.Content = _documentContent;
signer.KeyPin = keyPin;
byte[] signedData = data.SignCades(signer, CADESCOM_CADES_TYPE.CADESCOM_CADES_X_LONG_TYPE_1, _detached);
Подскажите, как исправить?
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 17.09.2014(UTC) Сообщений: 123 Сказал «Спасибо»: 5 раз Поблагодарили: 2 раз в 2 постах
|
Нет, попробовал собрать все под x86, все равно не работает, ошибка та же. Странно. На одной машине Win8 работает, никаких проблем, а на машине Windows Server 2008 r2 возникает вот эта проблема. Не факт, что это связано с ОС...
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 18.02.2015(UTC) Сообщений: 16 Откуда: Москва Поблагодарили: 1 раз в 1 постах
|
Есть несколько уточняющих вопросов. Какой интерфейс не поддерживается? Код компилируется?
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 17.09.2014(UTC) Сообщений: 123 Сказал «Спасибо»: 5 раз Поблагодарили: 2 раз в 2 постах
|
Код компилируется. Какой интерфейс не поддерживается - не понятно, не уточнено, вот скриншот http://take.ms/bxb7oТакое ощущение, что не поддерживается что-то из объекта CadesSignedData...
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 17.09.2014(UTC) Сообщений: 123 Сказал «Спасибо»: 5 раз Поблагодарили: 2 раз в 2 постах
|
Даже самый простой вариант, если вызывать вот так signedData = data.SignCades(null, CADESCOM_CADES_TYPE.CADESCOM_CADES_X_LONG_TYPE_1, _detached,CAPICOM_ENCODING_TYPE.CAPICOM_ENCODE_BINARY); по хорошему должно вывалиться окно выбора сертификата, потом свалиться что нет адреса службы штампов. Так и происходит на машине вин8, на вин2008 валится та же ошибка с интерфейсом
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 18.02.2015(UTC) Сообщений: 16 Откуда: Москва Поблагодарили: 1 раз в 1 постах
|
А SDK одинаковые на обеих машинах?
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 17.09.2014(UTC) Сообщений: 123 Сказал «Спасибо»: 5 раз Поблагодарили: 2 раз в 2 постах
|
да, они устанавливались в одно и то же время с оф. сайта. Проблема возникает именно на методах подписи, Verify работает отлично... Код:
var version = Activator.CreateInstance(Type.GetTypeFromProgID("CAdESCOM.About")) as IAbout;
Console.WriteLine(version.Version);
выдает на обеих машинах 1.5.1633 Отредактировано пользователем 2 марта 2015 г. 14:44:09(UTC)
| Причина: Не указана
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 17.09.2014(UTC) Сообщений: 123 Сказал «Спасибо»: 5 раз Поблагодарили: 2 раз в 2 постах
|
Проблема правда где-то может с несовместимостью библиотек CAPICOM или несовместимостью с ОС (скажите, как проверить), потому что вот этот код выдает ту же ошибку - при всех параметрах по умолчанию и без задания Content. Код:
var data = Activator.CreateInstance(Type.GetTypeFromProgID("CAdESCOM.CadesSignedData")) as ICPSignedData3;
data.SignCades();
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 13.09.2014(UTC) Сообщений: 42 Сказал «Спасибо»: 7 раз Поблагодарили: 4 раз в 4 постах
|
Код на Delphi так же валится с такой же ошибкой "Интерфейс не поддерживается" на последней строке, подскажите куда копать, весь день бьемся. Код:oSignedData:=CreateOleObject('CAdESCOM.CadesSignedData');
oSignedData.ContentEncoding:=CADESCOM_BASE64_TO_BINARY;
oSignedData.Content:=base64;
TSP:='http://tsp.gaz-is.ru/qualifiedtsp/tsp.srf';
signer:=CreateOleObject('CAdESCOM.CPSigner');
signer.Options:=CAPICOM_CERTIFICATE_INCLUDE_CHAIN_EXCEPT_ROOT;
signer.Certificate:=SelectedCertificate;
signer.TSAAddress:=TSP;
sSignedMessage:=oSignedData.SignCades(signer,CADESCOM_CADES_X_LONG_TYPE_1,true);
|
1 пользователь поблагодарил Aleksandr_pro за этот пост.
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 17.09.2014(UTC) Сообщений: 123 Сказал «Спасибо»: 5 раз Поблагодарили: 2 раз в 2 постах
|
Проблема похоже решена! Проблема была в неверно настроенных "службах компонентов" в разделе COM+ присутствовал элемент CAPICOM. После удаления все заработало. Всем спасибо!
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close