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

Уведомление

Icon
Error

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

Статус: Участник

Группы: Участники
Зарегистрирован: 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".
Offline two_oceans  
#2 Оставлено : 15 мая 2020 г. 5:08:54(UTC)
two_oceans

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

Группы: Участники
Зарегистрирован: 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.html
https://cpdn.cryptopro.r...mples-sign-xml-smev.html

Отредактировано пользователем 15 мая 2020 г. 6:24:02(UTC)  | Причина: Не указана

thanks 1 пользователь поблагодарил two_oceans за этот пост.
Oleg Frolov оставлено 15.05.2020(UTC)
Offline Oleg Frolov  
#3 Оставлено : 15 мая 2020 г. 11:29:32(UTC)
Oleg Frolov

Статус: Участник

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

Сказал(а) «Спасибо»: 6 раз
two_oceans, благодарю за подробный ответ!

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