Статус: Эксперт
Группы: Участники
Зарегистрирован: 05.03.2015(UTC) Сообщений: 1,602  Откуда: Иркутская область Сказал(а) «Спасибо»: 110 раз Поблагодарили: 397 раз в 367 постах
|
Автор: lelik1973  Добрый день! Да, спасибо! В настоящее время я формирую xml и блок подписи Signature руками на php. Выполняю каноникализацию, вычисляю хэши сертификата, SignedProperties и SignedInfo, с помощью утилиты командной строки cryptcp и SignatureValue с помощью RawSignature.SignHash на python. Жесть, конечно :( Но у меня задача - серверное формирование и подписание xml пакета под linux. К сожалению, пока у меня не получается вычислить корректную подпись (не проходит валидацию на стороне ГИС ЖКХ). Поэтому хотелось бы понять, можно ли воспользоваться более элегантным готовым решением, так сказать, от производителя. Ну так и я про это. Хотя например, я не уловил в чем проблема подписать на phpcades, если ранее уже вызвали тот же интерфейс с питона. Есть SignedXML, в нем есть подпись по шаблону. Берете образец подписанного файла, вырезаете из него тег Signature с нужной структурой XADES-BES, опустошаете SignatureValue DigestValue (в двух Reference насколько помню), вставляете свои значения свойств сертификата и время подписания. Модифицированный тег Signature вставляете, где он должен быть в Вашем файле, всю эту радость и свой сертификат подаете на "подписание по шаблону" в SignedXML, указывая тип XMLDSIG. При этом должны автоматически каноникализироваться фрагменты и быть заполнены значения SignatureValue DigestValue. Если все верно, то проверка через SignedXML должна пройти не только по XMLDSIG, но и по XADES-BES. Правда, насколько помню, там был еще момент, что ГИС ЖКХ при проверке каноникализирует SignedProperties хотя трансформ каноникализации не указан - для пользования средствами "от производителя" его надо указывать явно. Если используете рандомные id с guid там конечно будет больше работы их везде поменять. Автор: lelik1973  Нет, там про то как достать X509SerialNumber, это я умею. Пишут, что номер до 20 байт, но отечественные сертификаты могут иметь номера длиннее. Однако в самом сертификате номер двоичный, и длинный, а в SignedProperties надо указывать не в двоичном и не в шестнадцатиричном виде и не в base64, которые получить вообще без вопроса по частям, а в десятичном, за что хочется разработчикам стандарта XADES сказать много добрых слов. Переводить в некратную степени 2 систему счисления та еще радость, так как один символ результата содержит дробное количество бит и границы байт "сползают" после каждого деления и надо держать под рукой соседние байты. Понятно, когда длина номера менее 8 байт, в крайнем случае 16 байт, его можно положить в порядковый целочисленный тип и дальше есть штатные операции деления в командах процессора. Есть даже двоично-десятичная система, но вся эта роскошь пока размер не превышает 8/16 байт. Ну по ссылке видимо вся "магия" засунута в конструктор класс BigInteger. Отредактировано пользователем 5 апреля 2022 г. 11:24:43(UTC)
| Причина: Не указана
|
 1 пользователь поблагодарил two_oceans за этот пост.
|
|