Имя: Пароль:
1C
 
Подпись строки PKCS#7 в Base64URL (включая x.509 сертификат)
0 cmex
 
11.04.22
18:26
Добрый день!

Как подписать строку по стандарту PKCS#7 в Base64URL (включая x.509 сертификат пользователя)?
1 xXeNoNx
 
11.04.22
18:48
Зачекинюсь)
2 cmex
 
11.04.22
20:48
Ап ап дей, ап ап ап ап гваби дэй
3 cmex
 
12.04.22
10:05
Утренний ап
4 NorthWind
 
12.04.22
10:13
(0) PKCS#7 довольно старый формат. Сейчас обычно в CADeS подписи. Вам для какой цели?
5 cmex
 
12.04.22
10:35
(4) для подписи токена. В заголовке темы само требование по спецификации ( а справке написано подпись менеджера криптографии в CMS ( базируется на pkcs7) а это не одно и то же?
6 NorthWind
 
12.04.22
10:48
(5) это не одно и то же, но там есть обратная совместимость. То есть то чему вы такую подпись отправите, может ее и обработать. Нужно пробовать.
7 dreizehn
 
12.04.22
10:48
(0) Переведи вопрос на английский при помощи гуглтранслейта и внезапно найдешь 100500 тем на stackoverflow. Останется тупо адаптировать решения к 1С.
8 cmex
 
12.04.22
10:56
(6) проверил, не валидная подпись оказалась, длиннее ожидаемой
9 NorthWind
 
12.04.22
11:18
может, алгоритм подписи не тот? По ГОСТ 2012 подписывать надо или как?
10 cmex
 
12.04.22
11:33
(9) выдан сертификат, в нем ГОСТ 2012
11 cmex
 
12.04.22
11:34
а может надо хэш подписывать?
12 NorthWind
 
12.04.22
12:15
https://its.1c.ru/db/v838doc#bookmark:dev:TI000000834
обратите внимание на свойство АлгоритмПодписи и вот на это (не знаю, можно ли копировать сюда куски из ИТС, если что, модераторы, удалите нижеследующий текст):
--
При формировании подписи следует учитывать следующие особенности: вначале формируется хеш-сумма подписываемых данных и затем выполняется подпись полученной хеш-суммы. Это сделано для того, чтобы уменьшить время, необходимое для выполнения операции подписи данных.

В силу этого рекомендуется явным образом указывать алгоритмы, которые будут использоваться как для вычисления хеш-суммы (свойство АлгоритмХеширования), так и для выполнения подписи (свойство АлгоритмПодписи). Если принимающая сторона не будет поддерживать используемые алгоритмы (хеширования и подписи), то проверить подпись будет невозможно.

Для того чтобы явным образом указать используемые алгоритмы, следует воспользоваться методом ПолучитьИнформацияМодуляКриптографии() менеджера криптографии. В результате использования метода будет получен объект ИнформацияМодуляКриптографии, в котором свойства АлгоритмыПодписи и АлгоритмыХеширования будут содержать список алгоритмов, которые поддерживает используемый модуль криптографии. В свойства менеджера криптографии следует указывать те данные, которые содержатся в свойствах объекта ИнформацияМодуляКриптографии.
--
Возможно, вам нужно явно указать алгоритм, по которому должна формироваться подпись, уточнив это у поддержки. Насчет хэша - то же самое.
13 cmex
 
12.04.22
12:28
(12) уточнил, подписывать нужно строку саму, хэш не нужен остальные моменты сейчас изучу, спасибо!
14 cmex
 
12.04.22
13:49
(12) получается 1совский менеджер криптографии всегда хэш подписывает? и повлиять на этот процесс нельзя?
15 oleg_km
 
12.04.22
14:05
(14) Так подписывается всегда хэш. Ассиметричная криптография слишком затратная, чтобы подписывать/шифровать все сообщение
16 NorthWind
 
12.04.22
15:39
(14) если у вас крипто-про, то можете попробовать применить CADESCOM. Там, кстати, есть конкретно PKCS7 в методе SignCades:
https://docs.cryptopro.ru/cades/reference/cadescom/cadescom_interface/icpsigneddata2signcades?id=Метод-icpsigneddata2signcades
17 NorthWind
 
12.04.22
15:42
(15) ну если мы знаем что нужно подписать короткую строчку, зачем нам ее хешировать?
18 NorthWind
 
12.04.22
15:46
+ (16) вот это может быть интересно https://www.cryptopro.ru/forum2/default.aspx?g=posts&t=16656
19 cmex
 
13.04.22
09:26
(18) то есть нужна внешняя компонента? кстати, чтобы подписать строку, ее либо в двоичные данные привести либо запилить в файл, так?)
20 cmex
 
13.04.22
11:25
оп
21 NorthWind
 
13.04.22
13:18
(19) ком-объект. Там по ссылке в (18) пример под восьмерку есть...
22 oleg_km
 
13.04.22
21:37
(17) А это какая функция в верхнем АПИ? Там вроде нет такой опции получить ЭЦП входных данных. Все равно сначала будет получен хеш, потом к нему ЭЦП. Это на плюсах можно пользовать низкоуровневое АПИ.
23 cmex
 
14.04.22
17:08
Победил. Может кому пригодится. Типовой МенеджерКриптографии подошел. Из сабжа "включая x.509 сертификат" значит у свойства ВключениеСертификатовВПодпись стоит "ВключатьПолнуюЦепочку". Строку переводим в двоичные данные методом "ПолучитьДвоичныеДанныеИзСТроки". Далее кодируем в base64 методом base64строка, получаем чистый Base64. Потом в полученной строке меняем символы.ПС и ВК на "", символ "=" на "%3d", "+" на "%2b" и "/" на "%2f". В результате получаем Base64url. Профит

Всем спасибо
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn