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

Уведомление

Icon
Error

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

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

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

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

Уже 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)
Сообщений: 12,630
Мужчина
Российская Федерация

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

Через 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)
Сообщений: 12,630
Мужчина
Российская Федерация

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

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

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

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

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

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

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

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

Через 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>

А Вы сами заполняли этот участок или у Вас при подписании он заполнен был?
Offline klopyshko  
#7 Оставлено : 21 мая 2021 г. 16:25:39(UTC)
klopyshko

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

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

Коллеги, добрый день!
Поскольку многие из Вас обращаются ко мне с вопросами по поводу этой интеграции, частые ошибки следующие:
1. Неправильный порядок подписи. Подписывать нужно не все сообщение SOAP, а только тэг SignedInfo, предварительно посчитав хэш Body и запихнув его в DigestValue. После этого 1С вернет вам в SignedInfo вашу подпись, вы ее вырезаете и вставляете в итоговое сообщение SOAP. Так же вам нужно отказаться от стандартной каниканолизации сообщения SOAP в 1С и подпихивать на подпись уже грубо говоря вручную каноникализированный шаблон (потребует доработки модуля ЭлектроннаяПодписьСлужебный, функции НачатьПодписание и послеподписиSignedInfo). Процесс каноникализации по факту является удалением пробелов и дополнение тегов.
2. Не все заголовки переданы: Вы должны передавать заголовок SOAPAction, с указанием URL метода, который вы вызываете.

Отредактировано пользователем 21 мая 2021 г. 16:27:05(UTC)  | Причина: Не указана

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