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

Уведомление

Icon
Error

3 Страницы<123
Опции
К последнему сообщению К первому непрочитанному
Offline khomenko  
#21 Оставлено : 17 апреля 2013 г. 16:09:08(UTC)
Михаил Хоменко

Статус: Активный участник

Группы: Администраторы, Участники
Зарегистрирован: 28.04.2010(UTC)
Сообщений: 140
Мужчина
Откуда: Крипто-Про

Поблагодарили: 15 раз в 14 постах
Добрый день,

Присоединюсь к обсуждению.

На текущий момент сложность с узлом <BinarySecurityToken> , правильно понимаю ?
И в случае C# примера и в вашем случае, если сохранить подписанный документ, взять содержимое узла <BinarySecurityToken> и сохранить в файл somecert.cer - должен получиться валидный сертификат X509.
Offline GostyCtypto  
#22 Оставлено : 18 апреля 2013 г. 7:43:04(UTC)
GostyCtypto

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

Группы: Участники
Зарегистрирован: 01.04.2013(UTC)
Сообщений: 17
Мужчина
Российская Федерация
Откуда: ООО &quot;ЦентрПрограммСистем&quot;

Сказал «Спасибо»: 8 раз
На С# проблем нет. Пример вполне себе рабочий, хотя руководствовался другим с MSDN.
Экспортировать <BinarySecurityToken> в отдельный файл не пробовал - проверяю валидность XML на гос.услугах.
Рабочая XML проходит соответствие методическим рекомендациям, а вот подпись не проверяется введу озвученных причин (вернее предположений).
Так что если у кого получится подписать XML для СМЭВ так что бы она проходила проверку на гос.услугах будет просто здорово!

Пока у меня получилось сей подвиг совершить только на C#.
Но введу того что нужно подписывать xml именно в браузере, то пришлось на C# написать службу, а выбор сертификата (из списка представленного службой) сделать в браузере, как и ввод пароля, потому как быстро подружить службу с рабочим столом не получилось. В итоге передаваемые данные между браузером и службой относительно просто просматриваются, что конечно не есть гуд.
Особенно принимая во внимание что нужно устанавливать версию КриптоПро ещё и для .Net, помимо привычной нам и клиентам ЭЦП.
Offline khomenko  
#23 Оставлено : 18 апреля 2013 г. 9:07:52(UTC)
Михаил Хоменко

Статус: Активный участник

Группы: Администраторы, Участники
Зарегистрирован: 28.04.2010(UTC)
Сообщений: 140
Мужчина
Откуда: Крипто-Про

Поблагодарили: 15 раз в 14 постах
Требуется сформировать сообщение вида:

Код:

<?xml version="1.0" encoding="UTF-8"?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/" 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">
  <S:Header>
    <wsse:Security S:actor="http://smev.gosuslugi.ru/actors/smev">
      <ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
        <ds:SignedInfo>
          <ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
          <ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#gostr34102001-gostr3411" />
          <ds:Reference URI="#body">
            <ds:Transforms>
              <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
            </ds:Transforms>
            <ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#gostr3411" />
            <ds:DigestValue>zUD8qqNPFeD/DbQ9Uu5q8NvdqW908iHmukyhS17U+UA=</ds:DigestValue>
          </ds:Reference>
        </ds:SignedInfo>
        <ds:SignatureValue>
y/YwuY7WCmt/ud197st+UUMi18X6RKtuQRlP4ClYHn/d8bAF4m/H4A2CupgM0ABpEsrqZf8EFRYh
08lAfSj2wQ==
</ds:SignatureValue>
        <ds:KeyInfo>
          <wsse:SecurityTokenReference>
            <wsse:Reference URI="#FNSCertificate" />
          </wsse:SecurityTokenReference>
        </ds:KeyInfo>
      </ds:Signature>
      <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="FNSCertificate">
MIIDbzCCAx6gAwIBAgIKT0n0JwAAAAACbzAIBgYqhQMCAgMweTEXMBUGCSqGSIb3DQEJARYIY2FA
cnQucnUxCzAJBgNVBAYTAlJVMRUwEwYDVQQHDAzQnNC+0YHQutCy0LAxJDAiBgNVBAoMG9Ce0JDQ
niDQoNC+0YHRgtC10LvQtdC60L7QvDEUMBIGA1UEAxMLUlRLIFRlc3QgQ0EwHhcNMTEwNzE0MTEx
MzAwWhcNMTIwNzE0MTEyMjAwWjBSMQswCQYDVQQGEwJSVTFDMEEGA1UEAx46BCIENQRBBEIEPgQy
BEsEOQAgBEEENQRABEIEOAREBDgEOgQwBEIAIAQkBB0EIQAgBC0EHwAtBB4EEjBjMBwGBiqFAwIC
EzASBgcqhQMCAiQABgcqhQMCAh4BA0MABEBoEKpxwOzL7/rR/NzVm6UKW1IUROTXkzzx587jlJPf
Qa3PdOMhSVlEZcwEL9+qcJBFkszomWQ+rXmqcCFAHS2+o4IBqzCCAacwCwYDVR0PBAQDAgTwMCYG
A1UdJQQfMB0GByqFAwICIgYGCCsGAQUFBwMCBggrBgEFBQcDBDAdBgNVHQ4EFgQUxpxy+ssufWhK
y2NS1P/bqZchrGowHwYDVR0jBBgwFoAU3FNp0mLQ2/bwWr2CT1PAxNXwP1cwZgYDVR0fBF8wXTBb
oFmgV4ZVaHR0cDovL2QwMHBndWNlcnQwMS4wMC5lZ292LmxvY2FsL3JhL2NkcC9kYzUzNjlkMjYy
ZDBkYmY2ZjA1YWJkODI0ZjUzYzBjNGQ1ZjAzZjU3LmNybDCBkwYIKwYBBQUHAQEEgYYwgYMwOwYI
KwYBBQUHMAGGL2h0dHA6Ly9kMDBwZ3VjZXJ0MDEuMDAuZWdvdi5sb2NhbC9vY3NwL29jc3Auc3Jm
MEQGCCsGAQUFBzAChjhodHRwOi8vZDAwcGd1Y2VydDAxLjAwLmVnb3YubG9jYWwvcmEvY2RwL3Rl
c3RfY2FfcnRrLmNydDAyBgkrBgEEAYI3FQoEJTAjMAkGByqFAwICIgYwCgYIKwYBBQUHAwIwCgYI
KwYBBQUHAwQwCAYGKoUDAgIDA0EAYEEdhOpMor9QE22T4hUP1jJVnZ9aA0XgsxsjBzjhzfMwAI4g
L2YgBUvKQNa+iWVyg8u+BHHGCrVF9GyGXQIuzA==
</wsse:BinarySecurityToken>
    </wsse:Security>
</S:Header>
  <S:Body wsu:Id="body">
    <ws:queryINNFLResponse xmlns:ws="http://ws.unisoft/" xmlns:xml="http://www.w3.org/XML/1998/namespace">
      <smev:Message xmlns:smev="http://smev.gosuslugi.ru/rev110801">
        <smev:Sender>
          <smev:Code>13312</smev:Code>
          <smev:Name>ФНС</smev:Name>
        </smev:Sender>
        <smev:Recipient>
          <smev:Code>MINECONOMSK_SYS_1</smev:Code>
          <smev:Name>Минэкономразвития СК</smev:Name>
        </smev:Recipient>
        <smev:Originator>
          <smev:Code>MINECONOMSK_SYS_1</smev:Code>
          <smev:Name>Минэкономразвития СК</smev:Name>
        </smev:Originator>
        <smev:TypeCode>6</smev:TypeCode>
        <smev:Date>2012-03-27T09:22:53Z</smev:Date>
      </smev:Message>
      <smev:MessageData xmlns:smev="http://smev.gosuslugi.ru/rev110801">
        <smev:AppData wsu:Id="fns-AppData">
          <smev:return>520205004556</smev:return>
        </smev:AppData>
      </smev:MessageData>
    </ws:queryINNFLResponse>
  </S:Body>
</S:Envelope>



Средствами КриптоПро ЭЦП Browser plug-in заполним содержимое узлов <ds:DigestValue> и <ds:SignatureValue>.
Формирование документа выносим за рамки обсуждения (можно через MSXML, JavaScript XML DOM, jQuery и т.п.)

Формирование XMLDSIG enveloping подписи для узла <S:Body>:
0. Считаем, что документ уже сформирован. Шаблон подписи вставлен в документ.

<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<ds:SignedInfo>
<ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
<ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#gostr34102001-gostr3411" />
<ds:Reference URI="#body">
<ds:Transforms>
<ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
</ds:Transforms>
<ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#gostr3411" />
<ds:DigestValue></ds:DigestValue>
</ds:Reference>
</ds:SignedInfo>
<ds:SignatureValue></ds:SignatureValue>
<ds:KeyInfo>
<wsse:SecurityTokenReference>
<wsse:Reference URI="#FNSCertificate" />
</wsse:SecurityTokenReference>
</ds:KeyInfo>
</ds:Signature>

Ссылки на подписываемые узла проставлены, идентификаторы алгоритмов заданы, ссылка на
сертификат подписи задана.
1. Каноникализируем узел <S:Body>. C = C14n(T) (алгоритм опишем ниже)
2. Считаем хэш от полученного результата. m = Hash(C)
3. Помещаем полученное значени хэша (в кодировке Base64) в <DigestValue> узла <ds:Reference URI="#body">
4. Каноникализируем узел <ds:SignedInfo>
5. Подписываем полученное в п.4 значение SV = Sign(Ks, SI)
6. Значение подписи (в кодировке Base64) помещаем в узел <ds:SignatureValue>

Каноникализация C14N
1. Документ кодируем в UTF-8
2. Все разрывы строк заменаем на #xA
3. Раскрываем пустые узлы: <node/> -> <node></node>
4. Все пробелы, табуляцию между узлами сохраняем.
5. Пробелы внутри тегов нормализуем.
<node a = 'a1' b=b1
c = "c1" >
становится
<node a = 'a1' b=b1 c="c1">
6. Спец символы в текстовом содержимом узлов экранируем:
(&) -> &amp;
(<) -> &lt;
(>) -> &gt;
(") -> &quot;
(') -> &apos

Проставление атрибутов по умолчанию, пространств имен, [CDATA], DTD и т.п. оставляем за рамками обсуждения.

В качестве эталона можно взять XmlDsigExcC14NTransform из .NET.

Отредактировано пользователем 18 апреля 2013 г. 9:32:12(UTC)  | Причина: Не указана

Offline GostyCtypto  
#24 Оставлено : 18 апреля 2013 г. 13:59:42(UTC)
GostyCtypto

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

Группы: Участники
Зарегистрирован: 01.04.2013(UTC)
Сообщений: 17
Мужчина
Российская Федерация
Откуда: ООО &quot;ЦентрПрограммСистем&quot;

Сказал «Спасибо»: 8 раз
Да правильно, делаю все практически так...
Что бы не замораживаться с канонизацией на JS я сразу формирую XML которая будет подписываться и отдельно канонизированные узлы <S:Body> и <ds:SignedInfo> (тэги формирую по заранее подготовленным шаблонам, а их контент обрабатываю по вашему описанию).
В итого <DigestValue> в <ds:SignedInfo> совпадают с тем что получается в подписанной C# XML.
Проблема в том, что с моей <ds:SignatureValue> XML не проходит проверку, если я ей вставляю в XML сгенерированную C#.

И принимая во внимание мои прошлые посты, можете ли вы показать какими функциями КриптоПро ЭЦП Browser plug-in формируется <ds:SignatureValue> и <BinarySecurityToken> ?
Потому что, как мне кажется, я использую, если и те что нужно, то не совсем так как нужно...
Offline khomenko  
#25 Оставлено : 18 апреля 2013 г. 14:28:15(UTC)
Михаил Хоменко

Статус: Активный участник

Группы: Администраторы, Участники
Зарегистрирован: 28.04.2010(UTC)
Сообщений: 140
Мужчина
Откуда: Крипто-Про

Поблагодарили: 15 раз в 14 постах
Не совсем понял:
Цитата:
Проблема в том, что с моей <ds:SignatureValue> XML не проходит проверку, если я ей вставляю в XML сгенерированную C#.


Для отладки предлагаю взять один и тот же XML документ с уже сформированным и заполненным (!) SignedInfo
- каноникализировать его через C# и JavaScript
- посчитать хэш от полученных данных
- сравнить результаты в C# и JavaScript

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