logo Наши способы организации безопасного удалённого доступа к рабочим местам и корпоративным ресурсам
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

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

Статус: Новичок

Группы: Участники
Зарегистрирован: 27.12.2019(UTC)
Сообщений: 3

Коллеги, добрый день!

Уже n-ый день не могу решить проблему. Прошу Вашей помощи.

Мне необходимо собрать SOAP-пакет, установить его в тело запроса HTTP, канонизировать Body и вычислить DigestValue, затем подписать блок SignedInfo. Сообщения до веб-сервиса доходят, но не проходят верификацию подписи (на той стороне и на моем ПК сертификаты одинаковые), выдает ответ 500 и ошибку ns1:SecurityError.

Из 1С подписываю процедурой ЭлектроннаяПодписьКлиент.Подписать(). Я уверен, что ошибка в формировании и канонизации запроса. Так как я не эксперт в SOAP и не могу отладить эту подключаемую компоненту, которая высчитывает хэш, подписывает и тд, мне ничего не остается, кроме как обратиться к Вам.

Буду благодарен за любые подсказки.

Сформированный запрос (Текст кроме Body, DigestValue, SignatureValue, предопределен, пробелы, лишние символы удаляю перед выполнением процедур):


Параметры XMLDSig:

Offline Андрей Писарев  
#2 Оставлено : 27 декабря 2019 г. 23:27:33(UTC)
Андрей *

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

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

Сказал «Спасибо»: 333 раз
Поблагодарили: 1297 раз в 1015 постах
Здравствуйте.

Через CAdESCOM.SignedXML попробуйте.

Интерфейс ISignedXML

псевдокод:

Код:

 if (algoOid == "1.2.643.7.1.1.1.1")    // алгоритм подписи ГОСТ Р 34.10-2012 с ключом 256 бит
        signMethod = "urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34102012-gostr34112012-256";
        digestMethod = "urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34112012-256";

    else if (algoOid == "1.2.643.7.1.1.1.2")    // алгоритм подписи ГОСТ Р 34.10-2012 с ключом 512 бит
        signMethod = "urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34102012-gostr34112012-512";
        digestMethod = "urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34112012-512";

    else if (algoOid == "1.2.643.2.2.19")   // алгоритм ГОСТ Р 34.10-2001
        signMethod = "urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34102001-gostr3411";
        digestMethod = "urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr3411";


Код:


 oSignedXML.ContentEncoding := CADESCOM_BASE64_TO_BINARY;
oSignedXML.Content := xml в base64

  oSignedXML.SignatureType := CADESCOM_XML_SIGNATURE_TYPE_ENVELOPED;
  oSignedXML.SignatureMethod := signMethod;
  oSignedXML.DigestMethod := digestMethod;

подпись = oSignedXML.Sign(oSigner);



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

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

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

Сказал «Спасибо»: 333 раз
Поблагодарили: 1297 раз в 1015 постах
Пример создания электронной подписи XML на
демо-странице с плагином
Техническую поддержку оказываем тут
Наша база знаний
Offline Андрей Писарев  
#4 Оставлено : 27 декабря 2019 г. 23:31:33(UTC)
Андрей *

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

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

Сказал «Спасибо»: 333 раз
Поблагодарили: 1297 раз в 1015 постах
алгоритмы из сертификата можно определить (или сделать настраиваемыми)

Код:
  
  pubKey  = oSigner.Certificate.PublicKey();
  algo = pubKey.Algorithm;
  algoOid = algo.Value;
Техническую поддержку оказываем тут
Наша база знаний
Offline klopyshko  
#5 Оставлено : 28 декабря 2019 г. 18:12:45(UTC)
klopyshko

Статус: Новичок

Группы: Участники
Зарегистрирован: 27.12.2019(UTC)
Сообщений: 3

Автор: Андрей Писарев Перейти к цитате
Здравствуйте.

Через CAdESCOM.SignedXML попробуйте.

Интерфейс ISignedXML


Извините за возможно глупый вопрос, но мне надо посчитать хэш для body,записать его в DigestValue, а затем подписать блок SignedInfo. А этот метод подписывает пакет полностью, настройки подписываемых тегов я не нашел в нем. Как его правильно вызвать?
Offline shumvlesu  
#6 Оставлено : 26 марта 2020 г. 11:47:25(UTC)
shumvlesu

Статус: Новичок

Группы: Участники
Зарегистрирован: 26.03.2020(UTC)
Сообщений: 1

<ds:X509IssuerSerial>
<ds:X509IssuerName>CN=JSA, O=JSA, C=RU, L=oskol, ST=BEL</ds:X509IssuerName>
<ds:X509SerialNumber>3580310541514603215</ds:X509SerialNumber>
</ds:X509IssuerSerial>

А Вы сами заполняли этот участок или у Вас при подписании он заполнен был?
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.