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

Уведомление

Icon
Error

2 Страницы<12
Опции
К последнему сообщению К первому непрочитанному
Offline two_oceans  
#11 Оставлено : 26 июля 2019 г. 11:46:50(UTC)
two_oceans

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

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

Сказал(а) «Спасибо»: 110 раз
Поблагодарили: 393 раз в 366 постах
Автор: PashaTechnique Перейти к цитате
URI="#OGRN_1025401011833" , если мои глаза мне не врут, сначала идет как раз таки символ решетки "#", а потом не цифра, а буква "О". Немного не понятно ваше замечание по этому поводу.
В коде и запросе не было решетки, а про букву было "на всякий случай", Вы правы у Вас буква.

Offline Евгений Афанасьев  
#12 Оставлено : 26 июля 2019 г. 11:57:37(UTC)
Евгений Афанасьев

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

Группы: Участники
Зарегистрирован: 06.12.2008(UTC)
Сообщений: 3,916
Российская Федерация
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 688 раз в 649 постах
Примеры с шифрованием есть в samples-sources.jar в архиве дистрибутива, пакет xmlSign.
Offline yvatest  
#13 Оставлено : 4 августа 2019 г. 20:46:16(UTC)
yvatest

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

Группы: Участники
Зарегистрирован: 12.02.2018(UTC)
Сообщений: 7
Откуда: Ivanovo

Сказал(а) «Спасибо»: 5 раз
Поблагодарили: 2 раз в 1 постах
Автор: two_oceans Перейти к цитате

В общих чертах: полученный подписанный XML нужно передать на шифрование, результат шифрования закодировать в Base64 и соорудить еще один XML (тот самый XML Encryption), в котором будет информация об обмене ключами и закодированный подписанный XML.


Можете поподробнее пояснить по шифрованию для ФСС? Какой день пробую разные варианты, все впустую.

1.Есть сформированный и подписанный XML:
Код:

<soapenv:Envelope
 xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
 xmlns:ds="http://www.w3.org/2000/09/xmldsig#"
 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">
   <soapenv:Header>
      <wsse:Security soapenv:actor="http://eln.fss.ru/actor/insurer/000000000000001">
         <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/000000000000001">
            ...
         </wsse:BinarySecurityToken>
         <ds:Signature>
            <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="#REGNO_000000000000001">
                  <ds:Transforms>
                     <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#WithComments"/>
                  </ds:Transforms>
                  <ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#gostr3411"/>
                  <ds:DigestValue>NhyZ8OhpQEWKE/hEpmh8jk8oIZJOPQOgAK3YDMgm9CA=</ds:DigestValue>
               </ds:Reference>
            </ds:SignedInfo>
            <ds:SignatureValue>8q/u8cuC929QPyV0SQIoXOnRObQzpGL9A0tgHgPkgzC6EvNeX4790ejjNNh+HiwObwPMQlhCX0oE
ZVFP8vUguA==</ds:SignatureValue>
            <ds:KeyInfo>
               <wsse:SecurityTokenReference>
                  <wsse:Reference URI="#http://eln.fss.ru/actor/insurer/000000000000001" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3"/>
               </wsse:SecurityTokenReference>
            </ds:KeyInfo>
         </ds:Signature>
      </wsse:Security>
   </soapenv:Header>
   <soapenv:Body wsu:Id="REGNO_000000000000001">
      <getPrivateLNData xmlns="http://ru/ibs/fss/ln/ws/FileOperationsLn.wsdl">
         <regNum>111111111111111</regNum>
         <lnCode>222222222222</lnCode>
         <snils>33333333333</snils>
      </getPrivateLNData>
   </soapenv:Body>
</soapenv:Envelope>

При отправке на тестовый контур без шифрования получаю запрашиваемые данные.

2. Шифрую подписанный документ (по аналогии с xmlSign/CryptXML.java):
Код:

<soapenv:Envelope
 xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
 xmlns:ds="http://www.w3.org/2000/09/xmldsig#"
 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">
   <xenc:EncryptedData Type="http://www.w3.org/2001/04/xmlenc#Content" xmlns:xenc="http://www.w3.org/2001/04/xmlenc#">
      <xenc:EncryptionMethod Algorithm="urn:ietf:params:xml:ns:cpxmlsec:algorithms:gost28147"/>
      <ds:KeyInfo>
         <xenc:EncryptedKey>
            <xenc:EncryptionMethod Algorithm="urn:ietf:params:xml:ns:cpxmlsec:algorithms:transport-gost2001"/>
            <ds:KeyInfo>
               <ds:X509Data>
                  <ds:X509Certificate>
                     ...
                  </ds:X509Certificate>
               </ds:X509Data>
            </ds:KeyInfo>
            <xenc:CipherData>
               <xenc:CipherValue>
                     ...
               </xenc:CipherValue>
            </xenc:CipherData>
         </xenc:EncryptedKey>
      </ds:KeyInfo>
      <xenc:CipherData>
         <xenc:CipherValue>
              ...
         </xenc:CipherValue>
      </xenc:CipherData>
   </xenc:EncryptedData>
</soapenv:Envelope>


3.Формирую новый XML, значения для <xenc:EncryptedData><xenc:CipherValue> беру из п2.:
Код:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
	<soapenv:Header/>
	<soapenv:Body>
	<xenc:EncryptedData xmlns:xenc="http://www.w3.org/2001/04/xmlenc#"
           ...
        </xenc:EncryptedData>							
	</soapenv:Body>
</soapenv:Envelope>

При отправке на тестовый контур с шифрованием получаю ошибки о неправильной структуре XML: отсутствует Body, недопустимый namespace и т.п.

Проверка зашифровать на себя и расшифровать проходит. Судя по получаемым ошибкам, ФСС сообщение также расшифровывает, ошибка именно в структуре XML.
В связи с этим вопросы:
1. Что нужно шифровать: весь документ из п1 или формировать новый XML и указывать при шифровании конкретный элемент?
2. Если нужен новый XML, то можно указать его структуру?
3. Что означает: "результат шифрования закодировать в Base64"? Разве это не содержимое <xenc:CipherValue>, или это относится к обычному шифратору, а не к XMLCipher?
4. В результате расшифрования должен получиться XML со структурой из п1, или c какой-то промежуточной, из которой ФСС уже будет формировать требуемую?
5. Если должна получиться промежуточная, то можно привести пример XML с зашифрованным сообщением и с результатом расшифрования?

Offline two_oceans  
#14 Оставлено : 5 августа 2019 г. 10:03:10(UTC)
two_oceans

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

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

Сказал(а) «Спасибо»: 110 раз
Поблагодарили: 393 раз в 366 постах
Цитата:
результат шифрования закодировать в Base64 и соорудить еще один XML (тот самый XML Encryption), в котором будет информация об обмене ключами и закодированный подписанный XML.
Это для шифрования через CryptoAPI когда результат и информация о ключах в виде нескольких массивов байтов, в данном случае кодирование и сборка уже выполнена в пункте 2. Основной подводный камень может быть при использовании гост-2012 - автоматика полагает что нужно использовать обмен ключами PRO12_EXPORT для гост-2012, а ФСС использует PRO_EXPORT и для гост-2001 и для гост-2012.

Подробно что брать и куда вставлять можно почитать в теме как это делается через CryptoAPI. Я этим подробно не занимался, так что навскидку не смогу ответить. В глаза бросилось, что там было Type="http://www.w3.org/2001/04/xmlenc#Element"

https://www.cryptopro.ru...aspx?g=posts&t=13688
Образец структуры там есть, ниже Ваши тексты я сравнил с образцом.
Цитата:
При отправке на тестовый контур с шифрованием получаю ошибки о неправильной структуре XML: отсутствует Body, недопустимый namespace и т.п.

Проверка зашифровать на себя и расшифровать проходит. Судя по получаемым ошибкам, ФСС сообщение также расшифровывает, ошибка именно в структуре XML.

Сам по себе XML Encryption такой же xml документ, то есть ругается скорее всего на его структуру, до расшифровки дело возможно еще не дошло.

Полагаю, в пункте 2 получено уже почти то что надо, осталось только подправить под полный XML Encryption, а именно выкинуть лишние пространства имен в soapenv:Envelope (но можете и оставить), добавить soapenv:Body в Envelope, переместить EncryptedData в Body.

Обратите внимание, что в EncryptedData для KeyInfo используется пространство имен ds. В пункте 2 ds объявлено в Envelope, а в пункте 3 оно не объявлено, если просто вставить текст EncryptedData в пункт 3 получится невалидный xml. Поэтому текст из пункта 2 получит ошибку "отсутствует Body", а текст пункта 3 заругается на пространство имен.

Отредактировано пользователем 5 августа 2019 г. 10:08:18(UTC)  | Причина: Не указана

thanks 1 пользователь поблагодарил two_oceans за этот пост.
yvatest оставлено 05.08.2019(UTC)
Offline yvatest  
#15 Оставлено : 5 августа 2019 г. 22:13:15(UTC)
yvatest

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

Группы: Участники
Зарегистрирован: 12.02.2018(UTC)
Сообщений: 7
Откуда: Ivanovo

Сказал(а) «Спасибо»: 5 раз
Поблагодарили: 2 раз в 1 постах
Автор: two_oceans Перейти к цитате
[В глаза бросилось, что там было Type="http://www.w3.org/2001/04/xmlenc#Element"

Спасибо, навели на правильную мысль: при шифровании документа нужно было всего-лишь при вызове xmlCipher.doFinal(doc,element,content), задать content=false.

Вкратце, может кому пригодится:
-подписанный XML (см. п1 моего предыдущего поста) шифруем (xmlSign/CryptXML.java из samples-sources.jar) с content=false.
-в полученном xml обертываем корневой элемент <xenc:EncryptedData> тэгами <Envelope><Body> и меняем <ds:X509Certificate> значением своего сертификата.
-отправляем в ФСС, получаем зашифрованный ответ
-расшифровываем его (xmlSign/CryptXML.java) закрытым ключом, сертификат которого ранее поместили в <ds:X509Certificate>
-получаем подписанный ФСС результирующий xml с запрашиваемыми данными

thanks 2 пользователей поблагодарили yvatest за этот пост.
two_oceans оставлено 06.08.2019(UTC), E.Shevchuk оставлено 06.04.2022(UTC)
Offline lexZ86  
#16 Оставлено : 8 декабря 2020 г. 16:46:47(UTC)
lexZ86

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

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

Сказал(а) «Спасибо»: 2 раз
День добрый. Прошу помощи в поиске проблемы с "шифрованием для ФСС". Операции проводятся на тестовом контуре.
Была успешно выполнена подпись XML SOAP запроса. Сервер не генерит ошибок.
Следующим шагом - шифрование. Воспользовался CryptXML в samples-sources.jar. Делая все по спецификации, столкнулся изначально с классической проблемой "Не удалось расшифровать сообщение. Возможно сообщение зашифровано на ключе отличном от ключа уполномоченного лица ФСС..."
Изменил алгоритм трансформации с "urn:ietf:params:xml:ns:cpxmlsec:algorithms:transport-gost2012-256" на "urn:ietf:params:xml:ns:cpxmlsec:algorithms:transport-gost2001" сервер принял шифрованное сообщение, но стал ругаться на префиксы подписанного сообщения. (Ругань: eln.ws.client.generated.CryptoException_Exception: The prefix "soapenv" for element "soapenv:Body" is not bound. class org.apache.xml.security.encryption.XMLEncryptionException). Добавляя пространство имен в body, выходит новое: The prefix "wsu" for attribute "wsu:Id" associated with an element type "soapenv:Body" is not bound. Добавил в body еще xmlns:wsu. В итоге - <faultstring>Fault occurred while processing.</faultstring>.
Т.е. изначально ровный и принимаемый документ после шифрования сервер не может разобрать корректно. Есть ли у кого-нибудь идеи, что можно попробовать в такой ситуации?
Пробовал шифровать/расшивровать на своем ключе/сертификате. Результат успешный и для алгоритма трансформации transport-gost2001 и transport-gost2012-256.
Пробовал на прод. контуре - не работает даже на transport-gost2001. Вообще никак не работает. (Зашифровано на отличном ключе от ключа ФСС). Разумеется подставлялись свежие ключи с их сайта и использовался соотв-й клиент. Общение со службой их техподдержки не продвинуло ни на шаг к результату. Они мне в качестве примера шифрования прислали xml, где алгоритм трансформации transport-gost2001. Но не ответили, почему у них в примере такой, а в спецификации transport-gost2012.
Куда еще можно копнуть?
Offline two_oceans  
#17 Оставлено : 9 декабря 2020 г. 5:53:11(UTC)
two_oceans

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

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

Сказал(а) «Спасибо»: 110 раз
Поблагодарили: 393 раз в 366 постах
Добрый день.
Основное уже сказано и пересказано. До сих пор основные места ошибок были:
1) про транспорт уже сами написали, 2001 вроде как все еще актуален для ФСС.
2) проверьте Type="http://www.w3.org/2001/04/xmlenc#Element" или http://www.w3.org/2001/04/xmlenc#Content - если химичите с пересадкой из одного документа в другой, то надо следить чтобы этот атрибут в итоговом документе соответствовал фактическому типу шифрования. Вообще, как я понимаю по примерам, должен быть content=true Content, но в сообщении выше как раз умудрились указать content=false и отправить с Element.
3) проверить какой сертификат в итоговом файле, отправляемом в ФСС. Там должен быть Ваш сертификат, а не сертификат ФСС. Так надо по спецификации, но разные средства шифрования почему-то склонны включать сертификат на который шифровали (то есть получателя - ФСС) вместо своего сертификата.

4) если шифруете себе, то желательно иметь 2 ключевых пары (для отправителя и получателя), с одной парой полноценной проверки не получается (как раз таки не отличается какой сертификат включать).
5) проверьте что параметры генерации сессионного ключа - TK26Z.

Ну и не забываем, что на тестовом и продуктивном контуре ФСС разные сертификаты: если на тестовый прошло с тестовым сертификатом ФСС, то на продуктивный с тем же тестовым сертификатом ФСС не пройдет, надо сертификат ФСС с продуктивного контура. И наоборот, на тестовый контур не пройдет с сертификатом ФСС продуктивного контура. Сертификаты периодически меняются (на мой взгляд даже слишком часто).

UPD. Вот сегодня 1с-отчетность поймала такую ошибку "Не удалось расшифровать сообщение. Возможно сообщение зашифровано на ключе отличном от ключа уполномоченного лица ФСС..." на продуктивный контур. Оказалось что сертификат до 1 января 2021 года, но ФСС еще 24 сентября выпустили себе новый сертификат на новом своем УЦ. К сертификату прилагается инструкция по установке со ссылками на корневой (он не менялся с 2018) и новый промежуточный ФСС (искать там от 2020 года). Что получают заранее конечно молодцы, а вот что выводят старые ключи досрочно - как-то не очень радует. Поэтому проверьте наличие нового сертификата даже если тот что у Вас еще по срокам не закончился.

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

Offline lexZ86  
#18 Оставлено : 9 декабря 2020 г. 13:47:40(UTC)
lexZ86

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

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

Сказал(а) «Спасибо»: 2 раз
two_oceans, благодарю за ответ. Конечно же все сделано было изначально, что написали..

Все же получил ответ без ошибок, видимо не хватало напутствия из предыдущего сообщения..
В общем, проблема была действительно с атрибутами element/content. У меня еще тогда закралось подозрение, почему же, меняя с одного на другое, никаких изменений не происходит. Внимательно пересобрал документ и заработало.

За UPD спасибо, учту это.

Отредактировано пользователем 9 декабря 2020 г. 13:55:34(UTC)  | Причина: Не указана

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