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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline sergei100  
#1 Оставлено : 1 октября 2019 г. 19:56:12(UTC)
sergei100

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

Группы: Участники
Зарегистрирован: 01.10.2019(UTC)
Сообщений: 19
Российская Федерация

Сказал(а) «Спасибо»: 1 раз
Уважаемые друзья, подскажите плиз. Есть стандартны cmd код - cd c:\Program Files\Crypto Pro\CSP -> csptest ->
csptest -sfsign -sign -in C:\base\test.txt –out C:\base\out.txt -my "Фирма Х" -detached -base64 –add. Так вот, этот код в фаил "out.txt" возвращает корректные данные Base64, которые сайт воспринимает как надо, и выдает ключ сессии. А объект CAdESCOM возвращает не корректные данные, тот же сайт не принимает их. Хотя вроде код стандартный вот пример:

Функция ПодписатьCAdES(test, ComОбъектСертификата)
CADESCOM_CADES_TYPE = 1; //CADESCOM_CADES_BES=1 CADESCOM_CADES_DEFAULT=0 CADESCOM_CADES_T=5
bDetached = -1;
EncodingType = 0; //CAPICOM_ENCODE_BASE64=0 CAPICOM_ENCODE_BINARY=1

oSigner = Новый COMОбъект("CAdESCOM.CPSigner");
oSigner.Certificate = ComОбъектСертификата;
oSigner.KeyPin = "ПарольОтУКЭП";

oSignedData = Новый COMОбъект("CAdESCOM.CadesSignedData");
//oSignedData.ContentEncoding = 1;
oSignedData.Content = test;

sSignedMessage = oSignedData.SignCades(oSigner, CADESCOM_CADES_TYPE, bDetached, EncodingType);

Возврат УбратьСимволы10_13(sSignedMessage); // Подпись в формате Base64

КонецФункции

Подскажите как с помощью объекта "CAdESCOM" сделать аналог cmd-шного вызова csptest ?

Заранее спасибо!
Offline Андрей Писарев  
#2 Оставлено : 1 октября 2019 г. 20:45:05(UTC)
Андрей *

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

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 9,435
Мужчина
Российская Федерация

Сказал «Спасибо»: 343 раз
Поблагодарили: 1355 раз в 1052 постах
Здравствуйте.
Что в test?
Техническую поддержку оказываем тут
Наша база знаний
Offline Андрей Писарев  
#3 Оставлено : 1 октября 2019 г. 21:23:32(UTC)
Андрей *

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

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 9,435
Мужчина
Российская Федерация

Сказал «Спасибо»: 343 раз
Поблагодарили: 1355 раз в 1052 постах
Цитата:
bDetached = -1;

это аналог true?
Техническую поддержку оказываем тут
Наша база знаний
Offline Андрей Писарев  
#4 Оставлено : 1 октября 2019 г. 21:24:33(UTC)
Андрей *

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

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 9,435
Мужчина
Российская Федерация

Сказал «Спасибо»: 343 раз
Поблагодарили: 1355 раз в 1052 постах
Цитата:
oSignedData.ContentEncoding = 1;
oSignedData.Content = закодироватьВbase64(test);

Техническую поддержку оказываем тут
Наша база знаний
Offline two_oceans  
#5 Оставлено : 2 октября 2019 г. 0:55:05(UTC)
two_oceans

Статус: Эксперт

Группы: Участники
Зарегистрирован: 05.03.2015(UTC)
Сообщений: 1,013
Российская Федерация
Откуда: Иркутская область

Сказал(а) «Спасибо»: 64 раз
Поблагодарили: 230 раз в 216 постах
Автор: sergei100 Перейти к цитате
Уважаемые друзья, подскажите плиз. Есть стандартны cmd код - cd c:\Program Files\Crypto Pro\CSP -> csptest ->
csptest -sfsign -sign -in C:\base\test.txt –out C:\base\out.txt -my "Фирма Х" -detached -base64 –add. Так вот, этот код в фаил "out.txt" возвращает корректные данные Base64, которые сайт воспринимает как надо, и выдает ключ сессии.
...
Подскажите как с помощью объекта "CAdESCOM" сделать аналог cmd-шного вызова csptest ?
Заранее спасибо!
Если что, я не сотрудник КриптоПро. При такой формулировке вопроса и заголовка у Вас выходит что неправильный Base64, а по факту вопрос в отличии подформата подписи и сотрудники КриптоПро будут отвечать Вам на неправильно заданный вопрос не относящимися к делу советами как задать кодировку и т.д.

Уже наверно с десяток тем на форуме с подобным реальным вопросом чуть не слово в слово (Подскажите как с помощью объекта "CAdESCOM" сделать аналог cmd-шного вызова csptest ?) и разными клонами функции подписания. Ответа нет, так как Вам нужно разбираться какой именно подформат cades выдает командная строка csptest -sfsign -sign (помимо очевидного из параметров: отсоединенная, cades гост, вывод в base64).

Однако ни один из создающих темы этого не осветил. Что это: cms, cades-bes, cades-T, cades long type 1? Наверно есть возможность задать вопрос техподдержке этого сайта или посмотреть в руководстве утилиты. Без понимания какой именно (под)формат подписи нужен сложно что-либо посоветовать. Например, у меня просто нет времени вникать в результаты выдаваемые утилитой, руководство утилиты, определять по ним нужный формат, а потом еще и в руководство плагина. Без точных сведений по вопросу подсказать не смогу. В коде Вы ставите cades-bes и это не подходит, как минимум попробуйте другие варианты.

В одной из похожих тем ошибка была просто в том, что не применяли urlencode при передаче Base64 в заголовках запроса.

Отредактировано пользователем 2 октября 2019 г. 0:59:01(UTC)  | Причина: Не указана

Offline sergei100  
#6 Оставлено : 2 октября 2019 г. 8:00:35(UTC)
sergei100

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

Группы: Участники
Зарегистрирован: 01.10.2019(UTC)
Сообщений: 19
Российская Федерация

Сказал(а) «Спасибо»: 1 раз
1) В test ответ ключ типа "2083ac32-86e7-4879-8a7a-4fc5b7fba914" получаемый от сайт "Честный знак"
2) bDetached = -1; Это false
3)two_oceans, спасибо. Сегодня постараюсь с кодировками разобраться, хотя вроде в протоколе обмена сказанно в base64, но что то тут не так. Буду разбираться.
Offline sergei100  
#7 Оставлено : 2 октября 2019 г. 8:03:12(UTC)
sergei100

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

Группы: Участники
Зарегистрирован: 01.10.2019(UTC)
Сообщений: 19
Российская Федерация

Сказал(а) «Спасибо»: 1 раз
Андрей , спасибо за совет.

oSignedData.ContentEncoding = 1;
oSignedData.Content = закодироватьВbase64(test);

Попробую, отпишусь.
Offline Андрей Писарев  
#8 Оставлено : 2 октября 2019 г. 10:33:03(UTC)
Андрей *

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

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 9,435
Мужчина
Российская Федерация

Сказал «Спасибо»: 343 раз
Поблагодарили: 1355 раз в 1052 постах
Автор: sergei100 Перейти к цитате
1) В test ответ ключ типа "2083ac32-86e7-4879-8a7a-4fc5b7fba914" получаемый от сайт "Честный знак"
2) bDetached = -1; Это false
3)two_oceans, спасибо. Сегодня постараюсь с кодировками разобраться, хотя вроде в протоколе обмена сказанно в base64, но что то тут не так. Буду разбираться.



Т.е. bDetached = -1; = false - т.е .Вы требуете от CADESCOM создать присоединенную подпись?

А в требованиях указано (и вызываете через утилиту), что требуется отсоединенная:
Цитата:

-my "Фирма Х" -detached -base64 –add.


Техническую поддержку оказываем тут
Наша база знаний
Offline Андрей Писарев  
#9 Оставлено : 2 октября 2019 г. 10:36:32(UTC)
Андрей *

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

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 9,435
Мужчина
Российская Федерация

Сказал «Спасибо»: 343 раз
Поблагодарили: 1355 раз в 1052 постах
Автор: two_oceans Перейти к цитате
Автор: sergei100 Перейти к цитате
Уважаемые друзья, подскажите плиз. Есть стандартны cmd код - cd c:\Program Files\Crypto Pro\CSP -> csptest ->
csptest -sfsign -sign -in C:\base\test.txt –out C:\base\out.txt -my "Фирма Х" -detached -base64 –add. Так вот, этот код в фаил "out.txt" возвращает корректные данные Base64, которые сайт воспринимает как надо, и выдает ключ сессии.
...
Подскажите как с помощью объекта "CAdESCOM" сделать аналог cmd-шного вызова csptest ?
Заранее спасибо!
Если что, я не сотрудник КриптоПро. При такой формулировке вопроса и заголовка у Вас выходит что неправильный Base64, а по факту вопрос в отличии подформата подписи и сотрудники КриптоПро будут отвечать Вам на неправильно заданный вопрос не относящимися к делу советами как задать кодировку и т.д.

Уже наверно с десяток тем на форуме с подобным реальным вопросом чуть не слово в слово (Подскажите как с помощью объекта "CAdESCOM" сделать аналог cmd-шного вызова csptest ?) и разными клонами функции подписания. Ответа нет, так как Вам нужно разбираться какой именно подформат cades выдает командная строка csptest -sfsign -sign (помимо очевидного из параметров: отсоединенная, cades гост, вывод в base64).

Однако ни один из создающих темы этого не осветил. Что это: cms, cades-bes, cades-T, cades long type 1? Наверно есть возможность задать вопрос техподдержке этого сайта или посмотреть в руководстве утилиты. Без понимания какой именно (под)формат подписи нужен сложно что-либо посоветовать. Например, у меня просто нет времени вникать в результаты выдаваемые утилитой, руководство утилиты, определять по ним нужный формат, а потом еще и в руководство плагина. Без точных сведений по вопросу подсказать не смогу. В коде Вы ставите cades-bes и это не подходит, как минимум попробуйте другие варианты.

В одной из похожих тем ошибка была просто в том, что не применяли urlencode при передаче Base64 в заголовках запроса.


Достаточно выполнить обратное действие:
выполнить проверку подписи от Cadescom через утилиту\другой софт.

Иногда передают "неправильные данные" (в буфере не те байты, что в исходном файле) на подпись, об этом есть примечание в документации. Поэтому рекомендация: кодировать в base64 и указывать на это перед присвоением content-а.



Техническую поддержку оказываем тут
Наша база знаний
Offline sergei100  
#10 Оставлено : 2 октября 2019 г. 11:12:04(UTC)
sergei100

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

Группы: Участники
Зарегистрирован: 01.10.2019(UTC)
Сообщений: 19
Российская Федерация

Сказал(а) «Спасибо»: 1 раз
Андрей Вы правы detached исправил на true. Но пока не получается, еще что странно CadesSignedData возвращает строку без символов 10-13 равную 7 286 символов, а cmd равную 4 508 сим, не понимаю пока в чем проблема.
Offline sergei100  
#11 Оставлено : 2 октября 2019 г. 11:31:13(UTC)
sergei100

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

Группы: Участники
Зарегистрирован: 01.10.2019(UTC)
Сообщений: 19
Российская Федерация

Сказал(а) «Спасибо»: 1 раз
Вроде нашел -out <file> Output PKCS#7 filename
Offline sergei100  
#12 Оставлено : 2 октября 2019 г. 11:32:25(UTC)
sergei100

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

Группы: Участники
Зарегистрирован: 01.10.2019(UTC)
Сообщений: 19
Российская Федерация

Сказал(а) «Спасибо»: 1 раз
Попробую подставить CADESCOM_PKCS7_TYPE
Offline two_oceans  
#13 Оставлено : 2 октября 2019 г. 12:34:02(UTC)
two_oceans

Статус: Эксперт

Группы: Участники
Зарегистрирован: 05.03.2015(UTC)
Сообщений: 1,013
Российская Федерация
Откуда: Иркутская область

Сказал(а) «Спасибо»: 64 раз
Поблагодарили: 230 раз в 216 постах
Автор: sergei100 Перейти к цитате
2) bDetached = -1; Это false
Чисто для справки: это похоже код из 1с, а язык 1с это кириллический диалект Visual Basic. Так вот, в Visual Basic -1 (минус единица) это True (так как в двоичном представлении все биты установлены в 1), а 0 это False (все биты установлены в 0). Для других значений уже идут нюансы, но обычно все остальные значения трактуются тоже как True.

Цитата:
Андрей Вы правы detached исправил на true. Но пока не получается, еще что странно CadesSignedData возвращает строку без символов 10-13 равную 7 286 символов, а cmd равную 4 508 сим, не понимаю пока в чем проблема.
Возможно размер разный из-за включения полей cades-bes и сертификата.
Offline sergei100  
#14 Оставлено : 2 октября 2019 г. 12:45:38(UTC)
sergei100

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

Группы: Участники
Зарегистрирован: 01.10.2019(UTC)
Сообщений: 19
Российская Федерация

Сказал(а) «Спасибо»: 1 раз
Вот так работает:

Функция ПодписатьCAdES(ТекстДляПодписи, ComОбъектСертификата)

CADESCOM_CADES_TYPE = 1;
bDetached = 1;
EncodingType = 0;

oSigner = Новый COMОбъект("CAdESCOM.CPSigner"); // Объект, задающий параметры создания и содержащий информацию об усовершенствованной подписи.
oSigner.Certificate = ComОбъектСертификата;
oSigner.Options = 2;
oSigner.KeyPin = "ПарольОтУКЭП";

oSignedData = Новый COMОбъект("CAdESCOM.CadesSignedData"); // Объект CadesSignedData предоставляет свойства и методы для работы с усовершенствованной подписью.
oSignedData.ContentEncoding = 1;


oSignedData.Content = Base64Строка(ПолучитьДвоичныеДанныеИзСтроки(ТекстДляПодписи));


sSignedMessage = oSignedData.SignCades(oSigner, CADESCOM_CADES_TYPE, bDetached, EncodingType); // Метод добавляет к сообщению усовершенствованную подпись.


Возврат УбратьСимволы10_13(sSignedMessage); // Подпись в формате Base64

КонецФункции

После того как подставил oSigner.Options = 2; все заработало. Но до конца не понимаю что это, в справке сказано получает или устанавливает параметры сертификата, а какие параметры? где их найти?

Отредактировано пользователем 2 октября 2019 г. 12:50:11(UTC)  | Причина: Не указана

Offline two_oceans  
#15 Оставлено : 2 октября 2019 г. 13:04:40(UTC)
two_oceans

Статус: Эксперт

Группы: Участники
Зарегистрирован: 05.03.2015(UTC)
Сообщений: 1,013
Российская Федерация
Откуда: Иркутская область

Сказал(а) «Спасибо»: 64 раз
Поблагодарили: 230 раз в 216 постах
https://docs.microsoft.c...seccrypto/signer-options вот эти похоже: включается один сертификат, цепочка без корневого или вся цепочка.

Отредактировано пользователем 2 октября 2019 г. 13:06:31(UTC)  | Причина: Не указана

thanks 1 пользователь поблагодарил two_oceans за этот пост.
Андрей * оставлено 02.10.2019(UTC)
Offline Андрей Писарев  
#16 Оставлено : 2 октября 2019 г. 13:12:05(UTC)
Андрей *

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

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 9,435
Мужчина
Российская Федерация

Сказал «Спасибо»: 343 раз
Поблагодарили: 1355 раз в 1052 постах
Автор: two_oceans Перейти к цитате
https://docs.microsoft.com/ru-ru/windows/win32/seccrypto/signer-options вот эти похоже: включается один сертификат, цепочка без корневого или вся цепочка.


Да, верно.

Насчёт -1 = подразумевалось true, но смущает ответ.
Техническую поддержку оказываем тут
Наша база знаний
Offline Андрей Писарев  
#17 Оставлено : 2 октября 2019 г. 13:13:10(UTC)
Андрей *

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

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 9,435
Мужчина
Российская Федерация

Сказал «Спасибо»: 343 раз
Поблагодарили: 1355 раз в 1052 постах
Автор: sergei100 Перейти к цитате
Вот так работает:
Код:

Функция ПодписатьCAdES(ТекстДляПодписи, ComОбъектСертификата)
	
	CADESCOM_CADES_TYPE = 1; 
	bDetached           = 1;
	EncodingType        = 0; 
	
	oSigner = Новый  COMОбъект("CAdESCOM.CPSigner"); // Объект, задающий параметры создания и содержащий информацию об усовершенствованной подписи.
	oSigner.Certificate = ComОбъектСертификата;
	oSigner.Options = 2;
	oSigner.KeyPin = "ПарольОтУКЭП";
	
	oSignedData = Новый  COMОбъект("CAdESCOM.CadesSignedData"); // Объект CadesSignedData предоставляет свойства и методы для работы с усовершенствованной подписью.
	oSignedData.ContentEncoding = 1;


	oSignedData.Content = Base64Строка(ПолучитьДвоичныеДанныеИзСтроки(ТекстДляПодписи));

	
	sSignedMessage = oSignedData.SignCades(oSigner, CADESCOM_CADES_TYPE, bDetached, EncodingType); // Метод добавляет к сообщению усовершенствованную подпись.

	
	Возврат УбратьСимволы10_13(sSignedMessage); // Подпись в формате Base64
	
КонецФункции


После того как подставил oSigner.Options = 2; все заработало.


Чтобы читабельнее было...

Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Андрей * за этот пост.
two_oceans оставлено 02.10.2019(UTC)
Offline sergei100  
#18 Оставлено : 2 октября 2019 г. 13:18:32(UTC)
sergei100

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

Группы: Участники
Зарегистрирован: 01.10.2019(UTC)
Сообщений: 19
Российская Федерация

Сказал(а) «Спасибо»: 1 раз
Ну да все правильно Options = 2(CAPICOM_CERTIFICATE_INCLUDE_END_ENTITY_ONLY). Сразу и количество символов в строке уменьшилось с 7 286 на 4 508.
Всем спасибо за участие!
Offline sergei100  
#19 Оставлено : 2 октября 2019 г. 13:57:51(UTC)
sergei100

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

Группы: Участники
Зарегистрирован: 01.10.2019(UTC)
Сообщений: 19
Российская Федерация

Сказал(а) «Спасибо»: 1 раз
Да и по поводу bDetached, -1 получается = true ?
Offline two_oceans  
#20 Оставлено : 3 октября 2019 г. 5:23:34(UTC)
two_oceans

Статус: Эксперт

Группы: Участники
Зарегистрирован: 05.03.2015(UTC)
Сообщений: 1,013
Российская Федерация
Откуда: Иркутская область

Сказал(а) «Спасибо»: 64 раз
Поблагодарили: 230 раз в 216 постах
Автор: sergei100 Перейти к цитате
Да и по поводу bDetached, -1 получается = true ?
Тут возможна разница из-за того как разные языки программирования и среды программирования представляют логический тип в двоичном виде. Почти наверняка СОМ объекты написаны на языке родственном Си, а язык 1с родственнен VisualBasic.

Для VisualBasic и его диалектов, все верно -1 = true. Вернее 0 = False (как передается наружу, так и принимется извне), все остальные двоичные значения логического типа принимаемые извне VisualBasic считает True, но сам VisualBasic передает наружу -1 (минус единицу) как True. Другие языки могут аналогично считать 0 = False, все остальное True, но при этом передавать наружу 1 (единицу) как True (это поведение языков семейства Pascal). Оба поведения совместимы за счет восприятия всех прочих значений как True. Так просто удобнее воспринимать при компиляции в машинный код за счет отдельного флага процессора для результата равного ноль. Для получения 0, 1, -1 со времен intel 80386 есть специальные быстрые инструкции процессора (xor a,a = 0; инвертирование бит от 0 = -1; inc от 0 = 1).

Проблемы начинаются если тип не точно логический, а, например, включает значение "неизвестно" как третий вариант кроме True и False. Там уже надо типом перечислением вводить точные значения.

Отредактировано пользователем 3 октября 2019 г. 5:31:01(UTC)  | Причина: Не указана

thanks 1 пользователь поблагодарил two_oceans за этот пост.
sergei100 оставлено 03.10.2019(UTC)
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.