Статус: Участник
Группы: Участники
Зарегистрирован: 12.04.2020(UTC) Сообщений: 13 Откуда: Москва Сказал(а) «Спасибо»: 6 раз
|
Добрый день! Envelope ниже формирует мой код на Java с использованием Крипто Про JCP. Документ валидный, подпись корректна. Подписание и формирование документа происходит только внутри Java кода. Но в моей задаче необходимо получить такой же результат, только подписание документа должно производиться в браузере с применением Browser plug-in. Возможно ли это? Из того, что я попробовал в примере на сайте (https://www.cryptopro.ru/sites/default/files/products/cades/demopage/cades_xmldsig_sample.html) вижу, что подпись формируется по стандарту XMLDsig типа Enveloped с подписанием всего документа (Reference URI=""). А мне необходимо сформировать подпись, в которой <Reference URI="#body"> будет ссылаться на <SOAP-ENV:Body id="body"> (как я понимаю, это тип отсоединенной подписи). Соответственно Transform Algorithm должен быть только один: http://www.w3.org/2001/10/xml-exc-c14n#ФСС требует подпись по стандарту XMLDsig в соответствии OASIS Web Service Security: SOAP Message Security 1.1 Код:<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">MIIExDCCBHGgAwIBAgITfAAA0H9qPQ4sw+KRqAABAADQfzAKBggqhQMHAQEDAjCCAQoxGDAWBgUq
hQNkARINMTIzNDU2Nzg5MDEyMzEaMBgGCCqFAwOBAwEBEgwwMDEyMzQ1Njc4OTAxLzAtBgNVBAkM
JtGD0LsuINCh0YPRidGR0LLRgdC60LjQuSDQstCw0Lsg0LQuIDE4MQswCQYDVQQGEwJSVTEZMBcG
A1UECAwQ0LMuINCc0L7RgdC60LLQsDEVMBMGA1UEBwwM0JzQvtGB0LrQstCwMSUwIwYDVQQKDBzQ
ntCe0J4gItCa0KDQmNCf0KLQni3Qn9Cg0J4iMTswOQYDVQQDDDLQotC10YHRgtC+0LLRi9C5INCj
0KYg0J7QntCeICLQmtCg0JjQn9Ci0J4t0J/QoNCeIjAeFw0yMDA0MTUwNzE2NDJaFw0yMDA3MTUw
NzI2NDJaMIGZMR8wHQYJKoZIhvcNAQkBFhB0ZXN0MjAxMkB0ZXN0LnJ1MREwDwYDVQQDDAjQntC7
0LXQszERMA8GA1UECwwIdGVzdDIwMTIxFTATBgNVBAoMDHRlc3QyMDEyLm9yZzEVMBMGA1UEBwwM
0JzQvtGB0LrQstCwMRUwEwYDVQQIDAzQnNC+0YHQutCy0LAxCzAJBgNVBAYTAlJVMGYwHwYIKoUD
BwEBAQEwEwYHKoUDAgIkAAYIKoUDBwEBAgIDQwAEQHcEnFMSageLYhP4IR3xnqHlNgkLBlxWcbSt
S9AP4w03xDr9Bv7vbNefCHIbu9mF9PssNN3XUKKDGA9autPQ5D2jggIVMIICETAOBgNVHQ8BAf8E
BAMCBPAwEwYDVR0lBAwwCgYIKwYBBQUHAwIwHQYDVR0OBBYEFELZMkgnXZ4Kj62MOAgKnsBA2adU
MB8GA1UdIwQYMBaAFJuFXvuB3E1ZB1Fjz77f2ix/yUQ8MIHMBgNVHR8EgcQwgcEwgb6ggbuggbiG
gbVodHRwOi8vdGVzdGdvc3QyMDEyLmNyeXB0b3Byby5ydS9DZXJ0RW5yb2xsLyEwNDIyITA0MzUh
MDQ0MSEwNDQyITA0M2UhMDQzMiEwNDRiITA0MzklMjAhMDQyMyEwNDI2JTIwITA0MWUhMDQxZSEw
NDFlJTIwITAwMjIhMDQxYSEwNDIwITA0MTghMDQxZiEwNDIyITA0MWUtITA0MWYhMDQyMCEwNDFl
ITAwMjIoMSkuY3JsMIHaBggrBgEFBQcBAQSBzTCByjBEBggrBgEFBQcwAoY4aHR0cDovL3Rlc3Rn
b3N0MjAxMi5jcnlwdG9wcm8ucnUvQ2VydEVucm9sbC9yb290MjAxOC5jcnQwPwYIKwYBBQUHMAGG
M2h0dHA6Ly90ZXN0Z29zdDIwMTIuY3J5cHRvcHJvLnJ1L29jc3AyMDEyZy9vY3NwLnNyZjBBBggr
BgEFBQcwAYY1aHR0cDovL3Rlc3Rnb3N0MjAxMi5jcnlwdG9wcm8ucnUvb2NzcDIwMTJnc3Qvb2Nz
cC5zcmYwCgYIKoUDBwEBAwIDQQAtVpg/B9Y0VWEE1364D9NoywUoq+ugcuHSgLyht8sjJXxUkDpt
K1eNjxuKxY30Pjfg/k3L9/D3WiF51lpO2+L5
</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>Tu7wtny356IDlM1D2yOUuQ7XX/GLLJrS3KHLte+jyg4=
</DigestValue>
</Reference>
</SignedInfo>
<SignatureValue>cs3Juzve4XTy5OlCd2qd9k5RvO1qSzNcml+rPkTB3VeAsyw0VNCg8wkaTKByd3zeKj1yZFqDr9Jx
zPqIvNPCmA==
</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>3103275205</regNum>
<lnCode>280933422210</lnCode>
<snils>00000060015</snils>
</end:getPrivateLNData>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Даже если документ невозможно сформировать в таком формате, то подойдет также документ, подписанный browser plug-in, который я смогу преобразовать в нужный формат в своей программе на Java, при этом сохранив корректность подписи. Пока что копирование данных сертификата, SignatureValue и DigestValue из подписанного документа (из примера на сайте) в необходимый шаблон, не помогает: подпись в итоге не действительна. Недействительна скорее всего из-за того, что SignatureValue рассчитывается от элемента SignedInfo со всеми потомками и артибутами. А в SignedInfo как раз и находятся ключевые отличия от необходимого результата: Reference URI="" и Transform Algorithm = "http://www.w3.org/2000/09/xmldsig#enveloped-signature".
|
|
|
|
Статус: Эксперт
Группы: Участники
Зарегистрирован: 05.03.2015(UTC) Сообщений: 1,602 Откуда: Иркутская область Сказал(а) «Спасибо»: 110 раз Поблагодарили: 393 раз в 366 постах
|
Добрый день. Пересадка конечно не подойдет, Вы сами уже поняли почему: пересаживать нужно целиком SignedInfo. Насчет трансформа enveloped signature скорее всего зря беспокоитесь - проверке detached этот алгоритм не мешает (он удаляет Signature из подписанных данных, то есть сработает вхолостую если в подписанном фрагменте нет Signature). "По красоте" конечно нужно убрать, но в подавляющем большинстве ИС на проверку подписи такой "холостой запуск" трансформа не влияет. А вот Reference URI="" большая проблема. Попробуйте сделать в подписываемом документе "шаблон" тега Signature, то есть заполнить в Signature все что нужно (алгоритмы, трансформы, URI) кроме DigestValue, SignatureValue (их оставить пустыми) и KeyInfo (пустой или посмотрите как KeyInfo заполнен в примере шаблона для СМЭВ - похоже на ФСС, хотя отличаются URI/Id сертификата). Потом включить в коде подписания плагином "режим шаблона". С экзотическими трансформами не работает, с ПФР не работает, но в случае ФСС и примера из сообщения выше должно сработать. Если же будет спотыкаться на Id сертификата в стиле ФСС (сравните wsu:Id="http://eln.fss.ru/actor/insurer/3103275205" против wsu:Id="body"), то можно KeyInfo оставить пустым и аккуратно поправить KeyInfo после подписания. Подробности есть в справке. https://cpdn.cryptopro.ru/КриптоПро ЭЦП. Руководство разработчика - КриптоПро ЭЦП Browser plugin - Примеры - Создание и проверка подписи документа XML по шаблону Напрямую https://cpdn.cryptopro.r...s-sign-xml-template.htmlhttps://cpdn.cryptopro.r...mples-sign-xml-smev.htmlОтредактировано пользователем 15 мая 2020 г. 6:24:02(UTC)
| Причина: Не указана
|
1 пользователь поблагодарил two_oceans за этот пост.
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 12.04.2020(UTC) Сообщений: 13 Откуда: Москва Сказал(а) «Спасибо»: 6 раз
|
two_oceans, благодарю за подробный ответ!
Будем пробовать.
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close