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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline razinkinav  
#1 Оставлено : 14 июня 2020 г. 1:54:20(UTC)
razinkinav

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

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

Не удалось разобраться, как подписать документ XML для отправки в ФСС несколькими подписями через Browser Plugin.
Использовал вариант подписи через template.

Создаю такой шаблон:
Код:

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:end="http://ru/ibs/fss/ln/ws/FileOperationsLn.wsdl" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<SOAP-ENV:Header>
<wsse:Security SOAP-ENV:actor="http://eln.fss.ru/actor/insurer/3103275205" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<wsse:BinarySecurityToken EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3" wsu:Id="http://eln.fss.ru/actor/insurer/3103275205">
<Base64 сертификата>
</wsse:BinarySecurityToken>
<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
<SignedInfo>
<CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
<SignatureMethod Algorithm="urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34102012-gostr34112012-256"/>
<Reference URI="#REGNO_3103275205">
<Transforms>
<Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
</Transforms>
<DigestMethod Algorithm="urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34112012-256"/>
<DigestValue/>
</Reference>
</SignedInfo>
<SignatureValue/>
<KeyInfo>
<wsse:SecurityTokenReference>
<wsse:Reference URI="#http://eln.fss.ru/actor/insurer/3103275205" 
ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3"/>
</wsse:SecurityTokenReference>
</KeyInfo>
</Signature>
</wsse:Security>
</SOAP-ENV:Header>
<SOAP-ENV:Body wsu:Id="REGNO_3103275205">
<end:getPrivateLNData>
<regNum>...</regNum>
<lnCode>...</lnCode>
<snils>...</snils>
</end:getPrivateLNData>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>


Получаю:
Код:

<?xml version="1.0"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:end="http://ru/ibs/fss/ln/ws/FileOperationsLn.wsdl" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<SOAP-ENV:Header>
<wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" SOAP-ENV:actor="http://eln.fss.ru/actor/insurer/3103275205">
<wsse:BinarySecurityToken EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3" wsu:Id="http://eln.fss.ru/actor/insurer/3103275205">
<Base64 сертификата>
</wsse:BinarySecurityToken>
<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
<SignedInfo>
<CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
<SignatureMethod Algorithm="urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34102012-gostr34112012-256"/>
<Reference URI="#REGNO_3103275205">
<Transforms>
<Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
</Transforms>
<DigestMethod Algorithm="urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34112012-256"/>
<DigestValue>...хэш...</DigestValue>
</Reference>
</SignedInfo>
<SignatureValue>...подпись...</SignatureValue>
<KeyInfo>
<wsse:SecurityTokenReference>
<wsse:Reference URI="#http://eln.fss.ru/actor/insurer/3103275205" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3"/>
</wsse:SecurityTokenReference>
</KeyInfo>
</Signature>
</wsse:Security>
</SOAP-ENV:Header>
<SOAP-ENV:Body wsu:Id="REGNO_3103275205">
<end:getPrivateLNData>
<regNum>...</regNum>
<lnCode>...</lnCode>
<snils>...</snils>
</end:getPrivateLNData>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>


Когда пытаюсь ещё раз подписать файл с другим сертификатом, то получаю ошибку.
Результат, который требуется - несколько тэгов <wsse:Security>, каждый содержащий свою подпись.

Вопрос - как этого добиться? Какой шаблон, или может какой вызов?
Offline two_oceans  
#2 Оставлено : 25 июня 2020 г. 6:34:25(UTC)
two_oceans

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

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

Сказал(а) «Спасибо»: 110 раз
Поблагодарили: 393 раз в 366 постах
Во-первых, нужно определиться с порядком подписей, чтобы последующие не нарушили первые. То есть сначала подписывается самая дальняя от корня, потом постепенно поднимаетесь к корню документа.

Теоретически правильный вариант - надо создать с шаблон с нужным количеством подписей, затем при первом вызове указать какую из них заполнять при первом вызове (фильтр для выборки конкретной Signature), потом второй вызов и указать какую заполнять при втором вызове и т.д. При последнем вызове (осталась только одна Signature с пустыми DigestValue/SignatureValue) можно не указывать какую подпись (обычно всего одна Signature потому и никто не указывает).

Практически - я не смогу точно подсказать, что именно указываться выборки конкретной подписи (все темы на форуме которые я видел обламывались на этом моменте). Более-менее ясно, что уже автоматом выбраны только теги Signature и видимо условие выбора dsig:Signature не надо указывать в фильтр. Поэтому видимо в шаблоне должен быть указан id для тега Signature и фильтровать по нему.

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