Статус: Новичок
Группы: Участники
Зарегистрирован: 26.11.2019(UTC) Сообщений: 1 Сказал(а) «Спасибо»: 1 раз
|
Добрый день! У меня проблема на сервере не работает конструктор Новый МенеджерКриптографии("Crypto-Pro GOST R 34.10-2012 Cryptographic Service Provider", "", 80) но работает Новый МенеджерКриптографии("Crypto-Pro GOST R 34.10-2001 Cryptographic Service Provider", "", 75) это связано с установленной версией КриптоПро на сервере?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 30.06.2016(UTC) Сообщений: 3,389 Сказал «Спасибо»: 53 раз Поблагодарили: 778 раз в 720 постах
|
Автор: ArNed116 Добрый день! У меня проблема на сервере не работает конструктор Новый МенеджерКриптографии("Crypto-Pro GOST R 34.10-2012 Cryptographic Service Provider", "", 80) но работает Новый МенеджерКриптографии("Crypto-Pro GOST R 34.10-2001 Cryptographic Service Provider", "", 75) это связано с установленной версией КриптоПро на сервере? Здравствуйте. Стандарт ГОСТ Р 34.10-2012 поддерживается в КриптоПро CSP 4.0 и выше. |
|
1 пользователь поблагодарил Александр Лавник за этот пост.
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 01.04.2008(UTC) Сообщений: 1 Откуда: Саратов
|
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 17.09.2018(UTC) Сообщений: 17 Откуда: Москва Сказал(а) «Спасибо»: 8 раз Поблагодарили: 1 раз в 1 постах
|
Добрый день! Есть ХТТП-сервис, авторизация с которым проходит следующим образом: с клиента отправляется запрос на авторизацию, в ответ приходит строка ("Data"), которую нужно подписать УКЭП, используя сертификат, и отправить на сервер; сервер в ответ выдает токен, и по этому токену уже идет получение данных. На этапе получения токена возникла проблема - сервер ругается и не выдает токен. Подпись происходит через 1С следующим образом: Код:oSigner_вар = Новый COMОбъект("CAdESCOM.CPSigner"); // Объект, задающий параметры создания и содержащий информацию об усовершенствованной подписи.
ТекстДляПодписи_стр = СокрЛП(ТекстДляПодписи_стр);
sThumbprint_стр = СокрЛП(СертификатСсылка_вар.Отпечаток); // Отпечаток в Base64
oSigner_вар.Certificate = МРК_ПолучитьСертификатПоОтпечатку_вар(sThumbprint_стр);
oSigner_вар.KeyPin = Пароль;
oSignedData_вар = Новый COMОбъект("CAdESCOM.CadesSignedData");
oSignedData_вар.ContentEncoding = 0;
oSignedData_вар.Content = СокрЛП(ТекстДляПодписи_стр);
CADESCOM_CADES_TYPE_инт = 1;
bDetached_бул = Ложь;
EncodingType_инт = 0;
sSignedMessage_вар = oSignedData_вар.SignCades(oSigner_вар, CADESCOM_CADES_TYPE_инт, bDetached_бул, EncodingType_инт);
Если с такими же настройками подписывать через менеджер криптографии 1С (с подключенной компонентой для создания УКЭП), то всё в порядке, токен получается. Через CADesCOM - нет, и в этом проблема. Посмотрел настройки в 1С: Подпись, хэширование: GR 34.10-2012 256 Шифрование: GOST 28147-89 Подпись: CADES BES Открепленная: Ложь Base64НаВходе: ЛОжь Включение серификата в подпись: Цепочка без корневого. Также я заметил, что подписанная строка всегда начинается с одних и тех же символов: если подписывать через CADESCOM, то это символы: "MIIVogYJKoZIh", а если подписывать через 1С - символы "MIINWQYJKo". И еще, в 1С размер подписанного текста явно меньше. Я пробовал делать открепленную подпись через CADESCOM - не помогло. ВОзможно ли по подписанному тексту понять, какие настройки подписи используются в 1С и в Крипто ПРО? Например, по первым символам подписанного текста? Или я могу скинуть исходный текст (до подписания) и подписанный.
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 28.09.2021(UTC) Сообщений: 20 Сказал(а) «Спасибо»: 3 раз
|
Коллеги, добрый день. Нужно подписать сообщение в формате двоичных данных УКЭП с меткой времени CADES-T. Написал вот такой код в 1С: Код:
Крипто = Новый COMОбъект("CAdESCOM.CPSigner");
Крипто.Certificate = НайденныйСертификат;
ДанныеДляПодписи = Новый COMОбъект("CAdESCOM.CadesSignedData");
ДанныеДляПодписи.Content = ПодписываемыеДвоичныеДанные;
ТипПодписи = 1;
ВидПодписиОтдельная = Истина;
КодировкаПодписи = 1;
Подпись = ДанныеДляПодписи.SignCades(Крипто, ТипПодписи, ВидПодписиОтдельная, КодировкаПодписи);
Вопросы: 1. Возможно ли таким образом подписать двоичные данные или двоичные данные нужно перекодировать в Base64? 2. Прошу сообщить возможные значения для ТипПодписи и КодировкаПодписи и что означает каждое значение (семантику значений параметров)?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 12,709 Сказал «Спасибо»: 500 раз Поблагодарили: 2051 раз в 1591 постах
|
Цитата:ТипПодписи и КодировкаПодписи В документации описано. https://docs.cryptopro.r...om_class/cadessigneddataМетод ICPSignedData2:: SignCadesЦитата: CADESCOM_CADES_T = 5
ДанныеДляПодписи.ContentEncoding = CADESCOM_BASE64_TO_BINARY; // = 1; // кодировка в BASE64 ДанныеДляПодписи.Content = закодированные в base64 бинарные данные
Крипто.TSAAddress = "http://qs.cryptopro.ru/tsp/tsp.srf";
...
Подпись = ДанныеДляПодписи.SignCades(Крипто, CADESCOM_CADES_T ...); |
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 12,709 Сказал «Спасибо»: 500 раз Поблагодарили: 2051 раз в 1591 постах
|
Автор: NAlexV Вопросы: 1. Возможно ли таким образом подписать двоичные данные или двоичные данные нужно перекодировать в Base64?
Проверьте с ContentEncoding=0 и без кодирования в Base64. Далее проверить подпись внешними приложениями. |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 28.09.2021(UTC) Сообщений: 20 Сказал(а) «Спасибо»: 3 раз
|
Автор: Андрей * Автор: NAlexV Вопросы: 1. Возможно ли таким образом подписать двоичные данные или двоичные данные нужно перекодировать в Base64?
Проверьте с ContentEncoding=0 и без кодирования в Base64. Далее проверить подпись внешними приложениями. Андрей, спасибо за оперативный ответ. С вашей помощью изменил код на: Код:
Крипто = СоздатьCOMОбъектCAdESCOM("CPSigner");
Крипто.Certificate = ПолучитьСертификатПоОтпечатку(СтрокаОтпечатка);
Крипто.KeyPin = Константы.ПарольДоступаКЗакрытомуКлючу.Получить();
Крипто.TSAAddress = "http://qs.cryptopro.ru/tsp/tsp.srf";
ДанныеДляПодписи = СоздатьCOMОбъектCAdESCOM("CadesSignedData");
ДанныеДляПодписи.ContentEncoding = 1;
ДанныеДляПодписи.Content = ПолучитьBase64СтрокуИзДвоичныхДанных(ПодписываемыеДвоичныеДанные);
ТипПодписи = 5; // CADES-T
ВидПодписиОтдельная = Истина;
КодировкаПодписи = 1; // _двоичная кодировка CAPICOM _
Подпись = ДанныеДляПодписи.SignCades(Крипто, ТипПодписи, ВидПодписиОтдельная, КодировкаПодписи);
Функция СоздатьCOMОбъектCAdESCOM(ИмяКласса)
Попытка
Возврат Новый COMОбъект("CAdESCOM." + ИмяКласса);
Исключение
ВызватьИсключение ОписаниеОшибки() + Символы.ПС + Символы.ПС +
"Не удалось создать COM-Объект ""CAdESCOM." + ИмяКласса + Символы.ПС + Символы.ПС +
"Возможные причины:" + Символы.ПС +
"1. Не установлен КРИПТО-ПРО" + Символы.ПС +
"2. Не установлена компонента CAdESCOM" + Символы.ПС +
"3. Используется операционная система, отличная от Microsoft Windows";
КонецПопытки
КонецФункции
Функция ПолучитьСертификатПоОтпечатку(Знач Отпечаток)
Store = СоздатьCOMОбъектCAdESCOM("Store");
Store.Open(2, "My", 0);
Certificates = Store.Certificates.Find(0, Отпечаток);
Если Certificates.Count() <> 0 Тогда
Certificate = Certificates.Item(1);
Иначе
ВызватьИсключение "Сертификат не найден";
КонецЕсли;
Store.Close();
Возврат Certificate;
КонецФункции
Пока возвращается ошибка ((CAdESCOM.CadesSignedData.1): HTTP error occurred while sending request) при выполнении строки: Код:Подпись = ДанныеДляПодписи.SignCades(Крипто, ТипПодписи, ВидПодписиОтдельная, КодировкаПодписи);
Сделал заявку в сетевую службу на настройку сетевого доступа. Сейчас в ожидании решения проблемы Хотелось бы понять возможно ли подписать двоичные данные без перекодировки их в Base64? Сейчас при замене строки Код:ДанныеДляПодписи.Content = ПолучитьBase64СтрокуИзДвоичныхДанных(ПодписываемыеДвоичныеДанные);
на стоку Код:ДанныеДляПодписи.Content = ПодписываемыеДвоичныеДанные;
на этой строке возникает ошибка кодировки подписываемых данных - "Ошибка при установке значения атрибута контекста (Content): Типы не совпадают (0)", причем как ContentEncoding = 0 так и с ContentEncoding = 1. Отредактировано пользователем 29 сентября 2021 г. 14:16:31(UTC)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 12,709 Сказал «Спасибо»: 500 раз Поблагодарили: 2051 раз в 1591 постах
|
Автор: NAlexV Хотелось бы понять возможно ли подписать двоичные данные без перекодировки их в Base64? Сейчас при замене строки Код:ДанныеДляПодписи.Content = ПолучитьBase64СтрокуИзДвоичныхДанных(ПодписываемыеДвоичныеДанные);
на стоку Код:ДанныеДляПодписи.Content = ПодписываемыеДвоичныеДанные;
на этой строке возникает ошибка кодировки подписываемых данных. при этом ДанныеДляПодписи.ContentEncoding = 0 указан сначала? У меня нет 1С, чтобы проверить\увидеть. Присылайте полноценный текст\снимок ошибки. 1С или COM не принимает ДвоичныеДанные? В чём сложности использовать кодирования? Особенности представления данных в интерфейсе COMЧитали? |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 28.09.2021(UTC) Сообщений: 20 Сказал(а) «Спасибо»: 3 раз
|
Автор: Андрей * Автор: NAlexV Хотелось бы понять возможно ли подписать двоичные данные без перекодировки их в Base64? Сейчас при замене строки Код:ДанныеДляПодписи.Content = ПолучитьBase64СтрокуИзДвоичныхДанных(ПодписываемыеДвоичныеДанные);
на стоку Код:ДанныеДляПодписи.Content = ПодписываемыеДвоичныеДанные;
на этой строке возникает ошибка кодировки подписываемых данных. при этом ДанныеДляПодписи.ContentEncoding = 0 указан сначала? У меня нет 1С, чтобы проверить\увидеть. Присылайте полноценный текст\снимок ошибки. 1С или COM не принимает ДвоичныеДанные? В чём сложности использовать кодирования? Особенности представления данных в интерфейсе COMЧитали? Ошибка именно в момент присвоения подписываемых данных свойству "Content". Т.е. получается, что Com объект не принимает данные. Значение свойства ContentEncoding класса CadesSignedData устанавливается до заполнения свойства "Content" Вот весь код без ужимок: Код:Функция ПолучитьПодписьДокументаУКЭП(СтруктураСообщения, ПодписываемыеДвоичныеДанные, ОписаниеОшибки) Экспорт
Подпись = Неопределено;
СтрокаОтпечатка = Константы.ОтпечатокДействующегоСертификата.Получить();
Отпечаток = ПолучитьДвоичныеДанныеИзHexСтроки(СтрокаОтпечатка);
Крипто = Новый МенеджерКриптографии("Crypto-Pro GOST R 34.10-2012 Cryptographic Service Provider", "", 80);
Крипто.ПарольДоступаКЗакрытомуКлючу = Константы.ПарольДоступаКЗакрытомуКлючу.Получить();
Крипто.АлгоритмПодписи = "GR 34.10-2012 256";
Хранилище = Крипто.ПолучитьХранилищеСертификатов(ТипХранилищаСертификатовКриптографии.ПерсональныеСертификаты,РасположениеХранилищаСертификатовКриптографии.ДанныеПользователяОС);
НайденныйСертификат = Хранилище.НайтиПоОтпечатку(Отпечаток);
Если НайденныйСертификат = Неопределено Тогда
ОписаниеОшибки = "Подпись файла УКЭП. По отпечатку не найден сертификат в хранилище";
Возврат Неопределено;
КонецЕсли;
ДанныеОСертификате = ПолучитьДанныеОСертификате(НайденныйСертификат);
СтруктураСообщения.Вставить("ДанныеОСертификате", ДанныеОСертификате);
Попытка
Если СтруктураСообщения.ПодписьКриптоМенеджером1С Тогда
Подпись = Крипто.Подписать(ПодписываемыеДвоичныеДанные, НайденныйСертификат);
Иначе
Крипто = СоздатьCOMОбъектCAdESCOM("CPSigner");
Крипто.Certificate = ПолучитьСертификатПоОтпечатку(СтрокаОтпечатка);
Крипто.KeyPin = Константы.ПарольДоступаКЗакрытомуКлючу.Получить();
Крипто.TSAAddress = "http://qs.cryptopro.ru/tsp/tsp.srf";
ДанныеДляПодписи = СоздатьCOMОбъектCAdESCOM("CadesSignedData");
ДанныеДляПодписи.ContentEncoding = 1;
ДанныеДляПодписи.Content = ПолучитьBase64СтрокуИзДвоичныхДанных(ПодписываемыеДвоичныеДанные);
//ДанныеДляПодписи.ContentEncoding = 1;
//ДанныеДляПодписи.Content = ПодписываемыеДвоичныеДанные;
ТипПодписи = 5; // CADES-T
ВидПодписиОтдельная = Истина;
КодировкаПодписи = 1; // _двоичная кодировка CAPICOM _
Подпись = ДанныеДляПодписи.SignCades(Крипто, ТипПодписи, ВидПодписиОтдельная, КодировкаПодписи);
КонецЕсли;
Исключение
ОписаниеОшибки = "Подпись файла УКЭП. " + ОписаниеОшибки();
КонецПопытки;
Возврат Подпись;
КонецФункции
Функция СоздатьCOMОбъектCAdESCOM(ИмяКласса)
Попытка
Возврат Новый COMОбъект("CAdESCOM." + ИмяКласса);
Исключение
ВызватьИсключение ОписаниеОшибки() + Символы.ПС + Символы.ПС +
"Не удалось создать COM-Объект ""CAdESCOM." + ИмяКласса + Символы.ПС + Символы.ПС +
"Возможные причины:" + Символы.ПС +
"1. Не установлен КРИПТО-ПРО" + Символы.ПС +
"2. Не установлена компонента CAdESCOM" + Символы.ПС +
"3. Используется операционная система, отличная от Microsoft Windows";
КонецПопытки
КонецФункции
Функция ПолучитьСертификатПоОтпечатку(Знач Отпечаток)
Store = СоздатьCOMОбъектCAdESCOM("Store");
Store.Open(2, "My", 0);
Certificates = Store.Certificates.Find(0, Отпечаток);
Если Certificates.Count() <> 0 Тогда
Certificate = Certificates.Item(1);
Иначе
ВызватьИсключение "Сертификат не найден";
КонецЕсли;
Store.Close();
Возврат Certificate;
КонецФункции
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close