-
Notifications
You must be signed in to change notification settings - Fork 42
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
ЭЛН 2.0 #39
Comments
Код метода шифрования: ` var publicKeyFSS = (GostAsymmetricAlgorithm)fssCert.GetPublicKeyAlgorithm();
|
Текст зашифрованного сообщения: |
Здравствуйте. Насколько я помню, ранее была проблема с использованием устаревшего ID. Возможно они изменили что-то в этой части. //ФСС использует устаревший идентификатор
//encryptedSessionKey.EncryptionMethod = new EncryptionMethod(publicKey.KeyExchangeAlgorithm);
encryptedSessionKey.EncryptionMethod = new EncryptionMethod(GostCryptography.Gost_R3410.Gost_R3410_2001_AsymmetricAlgorithm.KeyExchangeAlgorithmValue); |
Я занимался сервисом МО, а не страхователя, но для меня это работает так:
Я считаю что если шифрование работало в версии 1.1, то вам нужно написать в чат разработчиков ФСС в телеграмм (возможно там кто-то сталкивался с таким) и ваша проблема не имеет отношения к библиотеке GostCryptography Моё зашифрованное сообщение выглядит так: |
Большое спасибо за ответ.
Я не внимательно прочитал спецификацию 2.0. После сравнения текстов 1.1 с 2.0 я увидел, что они перенесли сертификат отправителя (страхователя) в тело шифруемого сообщения, а в KeyInfo нужно класть сертификат уполномоченного лица ФСС. Возможно я неправильно помещаю свой сертификат в Header?
Я это делал двумя способами:
Да, АРМ ЛПУ работает с тестовыми сертификатами. АРМ ФСС (подготовка расчетов для ФСС) получает от сервиса ошибку, в случае использования тестового сертификата: "Ошибка: ORA-20001: Некорректная подпись головной организации: Ошибка при проверке сертификата. VALID_SIGNATURE ЭП действительна; При проверке сертификата ЭП произошла ошибка. Ошибка построения цепочки сертификатов. Не найден сертификат Удостоверяющего Центра, указанный в сертификате пользователя". Либо АРМ ФСС игнорирует настройку "направление обмена" и работает только с рабочим контуром или тестовый контур не принимает тестовые сертификаты.
Единственный телеграмм канал ФСС, который я обнаружил - FSS_Info. Так там одни новости от ФСС и никакой технической информации. Подскажите, какой канал вы имели в виду? |
Если использовать другой идентификатор, то от сервиса возвращается ошибка: "ru.fss.integration.ws.fault.v01.InternalException: Не удалось расшифровать сообщение. Возможно сообщение зашифровано на ключе отличном от ключа уполномоченного лица ФСС. Проверьте правильность и актуальность ключа уполномоченного лица ФСС." |
Полный текст последнего варианта процедуры шифрования: `var publicKeyFSS = (GostAsymmetricAlgorithm)fssCert.GetPublicKeyAlgorithm();
|
Возможно, ошибка ""ru.fss.integration.ws.fault.v01.InternalException: Error in execution of data encrypting/decrypting operation. class org.apache.xml.security.encryption.XMLEncryptionException.", возникает в сервисе ФСС уже на этапе шифрования ответного сообщения из-за того, что я "неправильно" передаю им свой сертификат? |
В спецификации написано:
Может нужно добавлять два сертификата? Тогда непонятно, что за сертификат "пользователя"? Сертификат "отправителя" - это, наверное, сертификат страхователя. |
Все таки правильный вариант: bsToken.InnerText = Convert.ToBase64String(insCert.RawData); |
Еще я заметил отличие. В вашем примере атрибут Type имеет значение "http://www.w3.org/2001/04/xmlenc#Element". Хотя в документации в примерах указано "http://www.w3.org/2001/04/xmlenc#Content". |
Добрый день! Я тоже уже несколько дней пробую получить ЭЛН (сервис страхователя) по спецификации 2.0. /// Шифрование документа по спецификации 2.0. /// /// Подписанный ЭЦП XML-документ. /// var sharedKey = new Gost_28147_89_SymmetricAlgorithm(providerType); /// Публичный сертификат ФСС. /// Публичный сертификат страхователя. protected override XmlDocument EncryptXmlDocument(XmlDocument xmlDocument, Gost_28147_89_SymmetricAlgorithmBase sharedKey, X509Certificate2 certificateEncryption, X509Certificate2 certificateOpen) { // Сюда будет записан зашифрованный XML-документ "xmlDocument". XmlDocument result = new XmlDocument(); // Согласно спецификации 2.0 необходимо добавить X509Certificate (публичный сертификат пользователя) в header после подписания документа, // но перед шифрованием. // Несмотря на то, что этот же сертификат добавлен в header в секцию BinarySecurityToken! InsertX509UserPublicCertificateToXmlHeader(xmlDocument, certificateOpen); // Ищем заданный элемент для заширования. Envelope XmlElement elementToEncrypt = GetElementToEncrypt(xmlDocument, ref result); // Создаем объект EncryptedData и заполняем его необходимой информацией. EncryptedData edElement = new EncryptedData(); //edElement.Type = EncryptedXml.XmlEncElementUrl; edElement.Type = EncryptedXml.XmlEncElementContentUrl; // Заполняем алгоритм зашифрования данных. Он будет использован при расшифровании. edElement.EncryptionMethod = new EncryptionMethod(Gost_28147_89_SymmetricAlgorithm.AlgorithmNameValue); // Создаем новую ссылку на ключ. edElement.KeyInfo = new KeyInfo(); // Создаем случайный симметричный ключ. // В целях безопасности удаляем ключ из памяти после использования. using (Gost_28147_89_SymmetricAlgorithm sessionKey = new Gost_28147_89_SymmetricAlgorithm(sharedKey.ProviderType)) { // Gost_R3410_2001_Constants.SignatureAlgorithm //sessionKey. //При генерации сессионного ключа 28147 всегда используется 2001 провайдер(TypeId = 75). //Соответственно параметры CIPHER_OID ключа всегда берутся для указанного провайдера. //И если при шифровании ключа используется новый сертификат ФСС(уполномоченного лица) с //2012 ключом получается нехорошо: // -(. //В обернутом ключе параметры алгоритма прописываются //1.2.643.2.2.31.1 //когда как ФСС ожидает //1.2.643.7.1.2.5.1.1 // Создаем объект класса EncryptedXml EncryptedXml eXml = new EncryptedXml(); // Зашифроваем узел на симметричном ключе. byte[] encryptedElement = eXml.EncryptData(elementToEncrypt, sessionKey, false); // Зашифровываем сессионный ключ и добавляем эти зашифрованные данные к узлу EncryptedKey. EncryptedKey ek = new EncryptedKey(); byte[] encryptedKey = GostEncryptedXml.EncryptKey(sessionKey, (GostAsymmetricAlgorithm)certificateEncryption.GetPublicKeyAlgorithm()); ek.CipherData = new CipherData(encryptedKey); //ek.EncryptionMethod = new EncryptionMethod(GostEncryptedXml.XmlEncGostNamespaceUrl + "transport-gost2001"); ek.EncryptionMethod = new EncryptionMethod(GostCryptography.Gost_R3410.Gost_R3410_2001_AsymmetricAlgorithm.KeyExchangeAlgorithmValue); KeyInfoX509Data data = new KeyInfoX509Data(certificateOpen); ek.KeyInfo.AddClause(data); // Добавляем ссылку на зашифрованный ключ к зашифрованным данным. edElement.KeyInfo.AddClause(new KeyInfoEncryptedKey(ek)); // Добавляем зашифрованные данные к объекту EncryptedData. edElement.CipherData.CipherValue = encryptedElement;
|
Кстати, когда пробую дешифровать зашифрованный ответ ФСС (после отправки им зашифрованного запроса, который они прислали мне по почте), то получаю исключение "Плохие данные". Дешифровать пробую как и для спецификации 1.1. ` private static SymmetricAlgorithm GetDecryptionKey(EncryptedData encryptedData, X509Certificate2 myCert)
|
Добрый день.
Такое исключение, насколько я помню, возникает в случае, если в настройках GostCryptography Криптопровайдер не соответствует, указанному в сертификате. |
Мне кажется, что это бесполезно. Так как ответ должен быть зашифрован на ключе, который ФСС получает из расшифрованного подписанного сообщения. Так как зашифрованное сообщение предоставлено ими, то и шифруют ответ они неизвестным вам ключем. |
Интереснее было бы получить от ФСС и подписанное сообщение и его зашифрованный вариант. В запросе ЭЛН нет никаких закрытых данных. Они вполне могут предоставить эти данные. Можете у них запросить? |
Не понятно, почему вы шифруете ключ на сертификате страхователя, а не на сертификате ФСС? |
Ну да. Они ответ шифровать будут публичным сертификатом страхователя, т.е. в предоставленном ими же зашифрованном запросе указан ихний публичный сертификат (не уполномоченного лица ФСС). В понедельник выложу зашифрованный запрос рабочий. Запросить могу подписанное сообщение и зашифрованное, но нам это мало чем поможет. Ведь у нас получается отправить на сервис с подписанием (который сейчас не доступен). Отвечают они долго. Некоторые письма игнорируют. Вообще такое ощущение что там разные люди отвечают, они не представляются. |
certificateEncryption - Это сертификат ФСС. Форматирование кода тут сломалось вместе с директивами region. Но порядок сохранился для сигнатуры метода: /// Публичный сертификат ФСС.
Я брал готовый пример, переделывал. С какой целью переделывал - уже не помню. Параметров на самом деле не много
|
Выкладываю зашифрованный запрос. Зашифрован тестовым сертификатом ФСС для ЭЛН 2021 года. Параллельно дублирую на файлообменнике: https://dropmefiles.com/jQxmK Адрес тестового сервиса ЭЛН с шифрованием для страхователя
|
На просьбу прислать тестовый запрос подписанный и зашифрованный получил следующий ответ: У меня была GostCryptography версии 2.0.7, с которой работала спецификация 1.1. |
Большие переделки произошли с релизом 2.0, потом были правки мелких багов и косметические дополнения. :) |
Очень интересно! А что они такого могли сделать, что:
Уважаемый @AlexMAS, вы не могли бы прокомментировать эти новые данные? Ссылка на спецификацию сервиса 2.0 : https://cabinets-test.fss.ru/%D0%A1%D0%BF%D0%B5%D1%86%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D1%8F_%D0%AD%D0%9B%D0%9D_%D0%A1%D1%82%D1%80%D0%B0%D1%85%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8C_v_2_0_20210112.docx |
В АРМ ФСС использует фактически свой вариант GostCryptography. У них в ней свои классы, интерфейсы. Скорее всего у них не заморачиваются с изменением ее версии. В любом случае, у них своя библиотека и сравнивать ее версию с версией открытой библиотеки бесполезно. |
Да, скорей всего, у них свой fork, что усложняет ситуацию. Возможно, у них на это были свои причины. |
Но ведь в спецификации должны быть отражены ВСЕ требования?
|
Это файл, который вам прислали из ФСС? Или сформированный вами? |
Это файл подписанного зашифрованного запроса страхователя к тестовому сервису ФСС. Пример прислали из ФСС. Запрос рабочий. |
Подставил зашифрованный ключ и зашифрованные данные из примера ФСС в свой запрос. Сервис нормально вернул ответ, который я, естественно, не смог расшифровать. Значит структура сообщения у меня верная. |
На мой вопрос:
Был получен ответ:
Т.е. помощи от ФСС больше ждать бессмысленно. |
rashidus, вот успешно отправляемый: (исправил, сперва был не тот) |
Спасибо! |
Это на тестовый, на рабочем нет такого больничного. |
Спасибо :) ошибка ушла! Подписание и расшифровка работают! |
Добрый день! |
OSnopkov, так второй файл с подписью. Если поменять данные, то подпись станет некорректной. |
Меняю регистрационный номер ФСС. Номер ЭЛН и СНИЛС оставляю. |
@alexnur, а у метода Sign есть параметр xPath, стандартно это |
@wrx888 у меня не было задачи отправки ЭЛН в ФСС да еще от мед.организации, соответственно подсказать тут не смогу, мне даже декомпилированная GostCryptography от ФСС тут не поможет, т.к. "АРМ расчета ФСС" только для страхователей, не МО. |
А есть тут кто работает с этой библиотекой по пути @alexnur и отправляет данные в ФСС как МО? |
@wrx888 я делаю отправку, но как страхователь.
Никто не сталкивался с таким поведением? Сверил отправляемый запрос с представленным в спецификации - есть небольшие отличия, но подписи все на месте. В сертификатах ОГРН есть, совпадает с нашим. |
Есть там функция для подписи, выше писали
|
Вот запрос перед шифрованием. Убрал из запроса данные больничного (между тегами row) и заменил данные страхователя и номер больничного. <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">
<s:Header>
<wsse:Security S:actor="http://eln.fss.ru/actor/insurer/0000000000/900000000001" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:S="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<ds:Signature>
<SignedInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
<CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#WithComments" />
<SignatureMethod Algorithm="urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34102012-gostr34112012-256" />
<Reference URI="#REGNO_0000000000">
<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>H7P+NobvUo2gKvvTxWOnhHnKmE+fMtfsv8hQ5Bft3yk=</DigestValue>
</Reference>
</SignedInfo>
<SignatureValue xmlns="http://www.w3.org/2000/09/xmldsig#">IBFOmOKdW4mDV+ggLIVCGtUI0WP4ve43G2nWi4tfLJMdhpINdRx1SJygYb9otWj8OHidQj85WUBSamO6qV12Cg==</SignatureValue>
<ds:KeyInfo>
<wsse:SecurityTokenReference>
<wsse:Reference URI="#http://eln.fss.ru/actor/insurer/0000000000/900000000001" 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: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/0000000000/900000000001">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</wsse:BinarySecurityToken>
</wsse:Security>
<wsse:Security S:actor="http://eln.fss.ru/actor/chief/0000000000/900000000001" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:S="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<ds:Signature>
<SignedInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
<CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#WithComments" />
<SignatureMethod Algorithm="urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34102012-gostr34112012-256" />
<Reference URI="#REGNO_0000000000">
<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>H7P+NobvUo2gKvvTxWOnhHnKmE+fMtfsv8hQ5Bft3yk=</DigestValue>
</Reference>
</SignedInfo>
<SignatureValue xmlns="http://www.w3.org/2000/09/xmldsig#">ThJlabcQ7dQCTh4PEHNea34nlHzoBEUpORNL9weslkNvoCmXQRQU1slbnRv2IvKjj7hTYdtOYYoZ7gqCINcrJQ==</SignatureValue>
<ds:KeyInfo>
<wsse:SecurityTokenReference>
<wsse:Reference URI="#http://eln.fss.ru/actor/chief/0000000000/900000000001" 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: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/chief/0000000000/900000000001">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</wsse:BinarySecurityToken>
</wsse:Security>
<wsse:Security S:actor="http://eln.fss.ru/actor/accountant/0000000000/900000000001" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:S="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<ds:Signature>
<SignedInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
<CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#WithComments" />
<SignatureMethod Algorithm="urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34102012-gostr34112012-256" />
<Reference URI="#REGNO_0000000000">
<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>H7P+NobvUo2gKvvTxWOnhHnKmE+fMtfsv8hQ5Bft3yk=</DigestValue>
</Reference>
</SignedInfo>
<SignatureValue xmlns="http://www.w3.org/2000/09/xmldsig#">1MVuqc78AgKwjQuXn+q3T9jfFOuIICzVUGRo0XTpf46EofSm2mBt2Aujt8pr8+0Y+aNdoduB+V4SUeaVwVQrfg==</SignatureValue>
<ds:KeyInfo>
<wsse:SecurityTokenReference>
<wsse:Reference URI="#http://eln.fss.ru/actor/accountant/0000000000/900000000001" 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: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/accountant/0000000000/900000000001">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</wsse:BinarySecurityToken>
</wsse:Security>
</s:Header>
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="REGNO_0000000000">
<prParseReestrFileRequest xmlns="http://www.fss.ru/integration/types/eln/ins/v01">
<request>
<regNum>0000000000</regNum>
<pXmlFile>
<rowset d6p1:author="ФИО" d6p1:phone="8(код)те-ле-фон" d6p1:email="email" d6p1:version="2.0" d6p1:software="Microsoft Dynamics Axapta" d6p1:version_software="5.0" xmlns:d6p1="http://www.fss.ru/integration/types/eln/v01">
<row>
</row>
</rowset>
</pXmlFile>
</request>
</prParseReestrFileRequest>
</s:Body>
</s:Envelope> |
А три раза <wsse:Security это так и надо Вам? |
Три подписи должно быть при отправке данных по больничному в ФСС. |
Подписать и отправить данные ЭЛН удалось. Метод GostCryptography из состава ARM FSS не работает. Но сработало самописное решение для версии 1.1. |
Получилось переписать шифрование/расшифровку на GostCryptography от AlexMAS (этот репозиторий) и избавиться от ужасно доработанной библиотеки из состава ARM FSS. #region ЭЛН 2.0 расшифровка
public static XmlDocument DecryptXmlDocument(XmlDocument encryptedXmlDocument, X509Certificate2 insurerCertificate)
{
XmlNodeList encDataNodes = encryptedXmlDocument.DocumentElement.GetElementsByTagName("xenc:EncryptedData");
encryptedXmlDocument = new XmlDocument();
encryptedXmlDocument.LoadXml(encDataNodes.Item(0).OuterXml);
if (insurerCertificate != null)
{
XmlNodeList certificatesNodes = encryptedXmlDocument.DocumentElement.GetElementsByTagName("ds:X509Certificate");
XmlElement xml = new KeyInfoX509Data(insurerCertificate).GetXml();
certificatesNodes.Item(0).FirstChild.Value = xml.FirstChild.FirstChild.Value;
}
GostCryptography.Xml.GostEncryptedXml gostEncryptedXml = new GostCryptography.Xml.GostEncryptedXml(encryptedXmlDocument);
XmlElement documentElement = encryptedXmlDocument.DocumentElement;
if (documentElement != null)
{
EncryptedData encryptedData = new EncryptedData();
encryptedData.LoadXml(documentElement);
SymmetricAlgorithm decryptionKey = GetDecryptionKey(encryptedData);
if (decryptionKey != null)
{
byte[] decryptedData = gostEncryptedXml.DecryptData(encryptedData, decryptionKey);
gostEncryptedXml.ReplaceData(documentElement, decryptedData);
}
}
return encryptedXmlDocument;
}
private static SymmetricAlgorithm GetDecryptionKey(EncryptedData encryptedData)
{
SymmetricAlgorithm symmetricAlgorithm = (SymmetricAlgorithm)null;
foreach (object obj1 in encryptedData.KeyInfo)
{
if (obj1 is KeyInfoEncryptedKey)
{
EncryptedKey encryptedKey = ((KeyInfoEncryptedKey)obj1).EncryptedKey;
if (encryptedKey != null)
{
foreach (object obj2 in encryptedKey.KeyInfo)
{
if (obj2 is KeyInfoX509Data)
{
ArrayList certificates = ((KeyInfoX509Data)obj2).Certificates;
X509Certificate2 certificate = (X509Certificate2)null;
foreach (X509Certificate2 x509Certificate2 in certificates)
{
//certificate = GostCertificatesDispatcher.FindCertificate(x509Certificate2.SerialNumber); //TODO
certificate = SecurityUtils.GetCertificateFromStoreCore(StoreName.My, StoreLocation.CurrentUser, X509FindType.FindBySerialNumber, x509Certificate2.SerialNumber);
if (certificate != null)
{
break;
}
}
if (System.Security.Cryptography.X509Certificates.X509CertificateHelper.GetPrivateKeyAlgorithm(certificate) is GostCryptography.Base.GostAsymmetricAlgorithm privateKeyAlgorithm7)
{
symmetricAlgorithm = GostCryptography.Xml.GostEncryptedXml.DecryptKey(encryptedKey.CipherData.CipherValue, privateKeyAlgorithm7);
break;
}
}
}
}
}
}
return symmetricAlgorithm;
}
#endregion
#region ЭЛН 2.0 шифрование
public static XmlDocument EncryptXmlDocument(XmlDocument xmlDocument, X509Certificate2 fssCertificate, X509Certificate2 insurerCertificate)
{
XmlDocument xmlAppendedSenderCert = AppendInsurerCertificate(xmlDocument, insurerCertificate);
GostCryptography.Config.GostCryptoConfig.ProviderType = GostCryptography.Base.ProviderType.CryptoPro;
GostCryptography.Config.GostCryptoConfig.ProviderType_2012_512 = GostCryptography.Base.ProviderType.CryptoPro_2012_512;
GostCryptography.Config.GostCryptoConfig.ProviderType_2012_1024 = GostCryptography.Base.ProviderType.CryptoPro_2012_1024;
GostCryptography.Xml.GostEncryptedXml gostEncryptedXml = new GostCryptography.Xml.GostEncryptedXml(GostCryptography.Base.ProviderType.CryptoPro);
XmlElement documentElement = xmlAppendedSenderCert.DocumentElement;
if (documentElement != null)
{
EncryptedData encryptedData = new EncryptedData();
encryptedData.Type = "http://www.w3.org/2001/04/xmlenc#Element";
encryptedData.KeyInfo = new KeyInfo();
encryptedData.EncryptionMethod = new EncryptionMethod("urn:ietf:params:xml:ns:cpxmlsec:algorithms:gost28147");
using (GostCryptography.Gost_28147_89.Gost_28147_89_SymmetricAlgorithm symmetricAlgorithm_orig = new GostCryptography.Gost_28147_89.Gost_28147_89_SymmetricAlgorithm(GostCryptography.Base.ProviderType.CryptoPro_2012_512))
{
byte[] numArray = gostEncryptedXml.EncryptData(documentElement, symmetricAlgorithm_orig, false);
byte[] cipherValue = GostEncryptedXml.EncryptKey(symmetricAlgorithm_orig, (GostAsymmetricAlgorithm)fssCertificate.GetPublicKeyAlgorithm());
EncryptedKey encryptedKey = new EncryptedKey();
encryptedKey.CipherData = new CipherData(cipherValue);
encryptedKey.EncryptionMethod = new EncryptionMethod("urn:ietf:params:xml:ns:cpxmlsec:algorithms:transport-gost2001");
encryptedKey.KeyInfo.AddClause((KeyInfoClause)new KeyInfoX509Data(fssCertificate));
encryptedData.KeyInfo.AddClause((KeyInfoClause)new KeyInfoEncryptedKey(encryptedKey));
encryptedData.CipherData.CipherValue = numArray;
}
GostEncryptedXml.ReplaceElement(documentElement, encryptedData, false);
}
string result = "<?xml version=\"1.0\"?>" +
"<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\">" +
"<soapenv:Header/>" +
"<soapenv:Body>" +
$"{xmlAppendedSenderCert.DocumentElement.OuterXml}" +
"</soapenv:Body>" +
"</soapenv:Envelope>";
XmlDocument newXmlDocument = new XmlDocument();
newXmlDocument.LoadXml(result);
return newXmlDocument;
}
private static XmlNamespaceManager GetNameTable(XmlDocument x)
{
XmlNamespaceManager namespaceManager = new XmlNamespaceManager(x.NameTable);
namespaceManager.AddNamespace("soap-env", Xmlns.soapenv);
namespaceManager.AddNamespace("xenc", Xmlns.xmlenc);
namespaceManager.AddNamespace("s", Xmlns.soapenv);
namespaceManager.AddNamespace("soap", Xmlns.soapenv);
namespaceManager.AddNamespace("soapenv", Xmlns.soapenv);
namespaceManager.AddNamespace("wsse", Xmlns.wsse);
namespaceManager.AddNamespace("ns1", Xmlns.eln);
namespaceManager.AddNamespace("eln", Xmlns.eln);
namespaceManager.AddNamespace("ds", Xmlns.ds);
return namespaceManager;
}
private static XmlDocument AppendInsurerCertificate(XmlDocument xmlDocument, X509Certificate2 insurerCertificate)
{
XmlNamespaceManager nameTable = GetNameTable(xmlDocument);
XmlNode node = xmlDocument.CreateNode("element", "ds:X509Certificate", "http://www.w3.org/2000/09/xmldsig#");
node.InnerText = Convert.ToBase64String(insurerCertificate.RawData);
XmlNode xmlNode = xmlDocument.SelectSingleNode("/soapenv:Envelope/soapenv:Header", nameTable);
xmlNode.AppendChild(node);
return xmlDocument;
}
#endregion |
Добрый день @rashidus. <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/xxxxxxxxxx/yyyyyyyyyy>
<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/xxxxxxxxxx/yyyyyyyyyy>MIIKKjCCCdegAwIBAgIRArhHdQC8rLGwS4dSLWF93+EwCgYIKoUDBwEBAwIwggGJMR4wHAYJKoZI......</wsse:BinarySecurityToken>
<Signature xmlns=http://www.w3.org/2000/09/xmldsig#>
<SignedInfo>
<CanonicalizationMethod Algorithm=http://www.w3.org/2001/10/xml-exc-c14n#WithComments />
<SignatureMethod Algorithm="urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34102012-gostr34112012-256" />
<Reference URI="#ELN_yyyyyyyyyy">
<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>+sevX6YOMBoQ5Tra5SAN16dtiAXMJqJc3BXuK3oucu0=</DigestValue>
</Reference>
</SignedInfo>
<SignatureValue>Dzdlhzd7osnrIuExiSOAJD70e/LWBTguMh0I3349hfSqYGFeEukz0pPIjNZu+5m+RjDB4c38PSp2VRo+C5+2mQ==</SignatureValue>
<KeyInfo>
<wsse:SecurityTokenReference>
<wsse:Reference URI="#http://eln.fss.ru/actor/insurer/xxxxxxxxxx/yyyyyyyyyy" />
</wsse:SecurityTokenReference>
</KeyInfo>
</Signature>
</wsse:Security>
<wsse:Security soapenv:actor=http://eln.fss.ru/actor/chief/xxxxxxxxxx/yyyyyyyyyy>
<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/chief/xxxxxxxxxx/yyyyyyyyyy>MIIL1DCCC4GgAwIBAgIRARK1ygAwrBqMTPdiOqGliWUwCgYIKoUDBwEBAwIwggGJMSIwIAYJKoZI.....</wsse:BinarySecurityToken>
<Signature xmlns=http://www.w3.org/2000/09/xmldsig#>
<SignedInfo>
<CanonicalizationMethod Algorithm=http://www.w3.org/2001/10/xml-exc-c14n#WithComments />
<SignatureMethod Algorithm="urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34102012-gostr34112012-256" />
<Reference URI="#ELN_yyyyyyyyyy">
<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>+sevX6YOMBoQ5Tra5SAN16dtiAXMJqJc3BXuK3oucu0=</DigestValue>
</Reference>
</SignedInfo>
<SignatureValue>AGAmFv0m6X7PklJgdx066b9URHYbeNKsgvB5yEWuKm8vM6x456Ow08WWrBPfQvH/aVSivp+Lwzpi0Yf14X+Uew==</SignatureValue>
<KeyInfo>
<wsse:SecurityTokenReference>
<wsse:Reference URI="#http://eln.fss.ru/actor/chief/xxxxxxxxxx/yyyyyyyyyy" />
</wsse:SecurityTokenReference>
</KeyInfo>
</Signature>
</wsse:Security>
<wsse:Security soapenv:actor=http://eln.fss.ru/actor/accountant/xxxxxxxxxx/yyyyyyyyyy>
<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/accountant/xxxxxxxxxx/yyyyyyyyyy>MIINvzCCDWygAwIBAgIRAfNdsQBBrLmATA5OsptSI24wCgYIKoUDBwEBAwIwggGJMSIwIAYJKoZI....</wsse:BinarySecurityToken>
<Signature xmlns=http://www.w3.org/2000/09/xmldsig#>
<SignedInfo>
<CanonicalizationMethod Algorithm=http://www.w3.org/2001/10/xml-exc-c14n#WithComments />
<SignatureMethod Algorithm="urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34102012-gostr34112012-256" />
<Reference URI="#ELN_yyyyyyyyyy">
<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>+sevX6YOMBoQ5Tra5SAN16dtiAXMJqJc3BXuK3oucu0=</DigestValue>
</Reference>
</SignedInfo>
<SignatureValue>rRsNhbQ6/HgIziRC22+6hX2L5Msu4tgQ9noz8Phgvt1gpOfXHzxE2DF8cppoc5ICcdQNYJUB8qo+oabHolVAZw==</SignatureValue>
<KeyInfo>
<wsse:SecurityTokenReference>
<wsse:Reference URI="#http://eln.fss.ru/actor/accountant/xxxxxxxxxx/yyyyyyyyyy" />
</wsse:SecurityTokenReference>
</KeyInfo>
</Signature>
</wsse:Security>
</soapenv:Header>
<soapenv:Body>
<v01:prParseReestrFileRequest xmlns:v01=http://www.fss.ru/integration/types/eln/ins/v01 xmlns:v011=http://www.fss.ru/integration/types/eln/v01 xmlns:wsu=http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance>
<v01:request>
<v01:regNum>xxxxxxxxxx</v01:regNum>
<v01:pXmlFile>
<v01:rowset v011:author="" v011:email="" v011:phone="" v011:software="Microsoft Dynamics AX" v011:version="2.0" v011:version_software="2012 R2">
<v01:row wsu:Id="ELN_yyyyyyyyyy">
.....
</v01:row>
</v01:rowset>
</v01:pXmlFile>
</v01:request>
</v01:prParseReestrFileRequest>
</soapenv:Body>
</soapenv:Envelope> ответ от сервиса ФСС: <soap:Body wsu:Id="OGRN_xxxxxxxxxxxxxxxxxxxxxx">
<prParseReestrFileResponse xmlns="http://www.fss.ru/integration/types/eln/ins/v01" xmlns:ns2="http://www.fss.ru/integration/types/eln/v01" xmlns:ns3="http://www.fss.ru/integration/types/eln/mse/v01" xmlns:ns4="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:ns5="http://www.fss.ru/integration/types/fault/v01" xmlns:ns6="http://www.fss.ru/integration/types/common/v01">
<wsResult>
<ns2:requestId>LNDATAINS_xxxxxxxxxxxx_xxxx_xx_xx_xxxxx</ns2:requestId>
<ns2:status>0</ns2:status>
<ns2:mess>Найдены ошибки при выполнении форматно-логических проверок</ns2:mess>
<ns2:info>
<ns2:infoRowset>
<ns2:infoRow>
<ns2:rowNo>1</ns2:rowNo>
<ns2:lnCode>xxxxxxxxxxxxxx</ns2:lnCode>
<ns2:status>0</ns2:status>
<ns2:errors>
<ns2:error>
<ns2:errCode>ERR_SIGN</ns2:errCode>
<ns2:errMess>Некорректная подпись головной организации: ЭЦП неверна. INVALID_SIGNATURE ЭП недействительна. Обратитесь к разработчику программного обеспечения, на котором осуществлялось подписание данных.</ns2:errMess>
</ns2:error>
<ns2:error>
<ns2:errCode>ERR_SIGN</ns2:errCode>
<ns2:errMess>Некорректная подпись руководителя: ЭЦП неверна. INVALID_SIGNATURE ЭП недействительна. Обратитесь к разработчику программного обеспечения, на котором осуществлялось подписание данных.</ns2:errMess>
</ns2:error>
<ns2:error>
<ns2:errCode>ERR_SIGN</ns2:errCode>
<ns2:errMess>Некорректная подпись Гл.Бухгалтера: ЭЦП неверна. INVALID_SIGNATURE ЭП недействительна. Обратитесь к разработчику программного обеспечения, на котором осуществлялось подписание данных.</ns2:errMess>
</ns2:error>
</ns2:errors>
</ns2:infoRow>
</ns2:infoRowset>
</ns2:info>
</wsResult>
</prParseReestrFileResponse>
</soap:Body> Заранее спасибо. |
Подписание (не менялось с версии 1.1) #region подписание при отправке
public override XmlDocument PrepareMessage()
{
InitRegNum();
PrepareNamespaces(Message);
XmlNodeList rowNode = Message.GetElementsByTagName("row", Xmlns.fssWsdl);
foreach (XmlElement row in rowNode)
{
XmlNodeList lnCode = row.GetElementsByTagName("lnCode", Xmlns.fssWsdl);
if (lnCode != null && lnCode.Count == 1)
{
XmlElement lnCodeTag = lnCode[0] as XmlElement;
string lnNum = lnCodeTag.InnerText;
if (!String.IsNullOrEmpty(lnNum))
{
row.RemoveAllAttributes();
row.SetAttribute("xmlns:wsu", Xmlns.wsu);
row.SetAttribute("Id", Xmlns.wsu, $"ELN_{lnNum}");
AddSecurityToken(Message, InsurerCertificate, $"insurer/{RegNum}/{lnNum}", $"ELN_{lnNum}");
AddSecurityToken(Message, ChiefCertificate, $"chief/{RegNum}/{lnNum}", $"ELN_{lnNum}");
AddSecurityToken(Message, AccountantCertificate, $"accountant/{RegNum}/{lnNum}", $"ELN_{lnNum}");
}
}
}
return Message;
}
#endregion
#region подписание при получении
public override XmlDocument PrepareMessage()
{
InitRegNum();
PrepareNamespaces(Message);
PrepareBody(Message, $"REGNO_{RegNum}");
AddSecurityToken(Message, InsurerCertificate, $"insurer/{RegNum}", $"REGNO_{RegNum}");
return Message;
}
protected void PrepareBody(XmlDocument document, string referenceUri)
{
XmlNodeList bodyNode = document.GetElementsByTagName("Body", Xmlns.soapenv);
if (bodyNode != null && bodyNode.Count == 1)
{
XmlElement body = bodyNode[0] as XmlElement;
body.SetAttribute("xmlns:wsu", Xmlns.wsu);
body.SetAttribute("Id", Xmlns.wsu, referenceUri);
}
}
#endregion
protected virtual void InitRegNum()
{
XmlNodeList nodeList = Message.GetElementsByTagName("regNum", Xmlns.fssWsdl);
if (nodeList != null && nodeList.Count == 1)
{
XmlElement regNumElement = nodeList[0] as XmlElement;
if (String.IsNullOrEmpty(RegNum))
{
RegNum = regNumElement.InnerText;
}
}
}
protected virtual void PrepareNamespaces(XmlDocument document)
{
XmlNamespaceManager ns = new XmlNamespaceManager(document.NameTable);
ns.AddNamespace("soapenv", Xmlns.soapenv);
ns.AddNamespace("ds", Xmlns.ds);
ns.AddNamespace("wsse", Xmlns.wsse);
ns.AddNamespace("wsu", Xmlns.wsu);
ns.AddNamespace("xsd", Xmlns.xsd);
ns.AddNamespace("xsi", Xmlns.xsi);
ns.AddNamespace("xenc", Xmlns.xmlenc);
ns.AddNamespace("sch", Xmlns.sch);
}
public virtual void AddSecurityToken(XmlDocument document, X509Certificate2 certificate, string wsseReferencePostfix, string referenceUri)
{
XmlElement xmlDigitalSignature = GenerateSecurityToken(document, certificate, wsseReferencePostfix, referenceUri);
XmlNodeList nodeList = document.GetElementsByTagName("Header", Xmlns.soapenv);
if (nodeList != null && nodeList.Count == 1)
{
XmlElement security = document.CreateElement("wsse", "Security", Xmlns.wsse);
security.SetAttribute("actor", Xmlns.soapenv, $"{Xmlns.wsseReferenceURI}{wsseReferencePostfix}");
security.SetAttribute("xmlns:wsu", Xmlns.wsu);
security.SetAttribute("xmlns:ds", Xmlns.ds);
nodeList[0].AppendChild(security);
XmlElement binarySecurityToken = document.CreateElement("wsse", "BinarySecurityToken", Xmlns.wsse);
binarySecurityToken.SetAttribute("EncodingType", Xmlns.encodingType);
binarySecurityToken.SetAttribute("ValueType", Xmlns.valueType);
binarySecurityToken.SetAttribute("Id", Xmlns.wsu, $"{Xmlns.wsseReferenceURI}{wsseReferencePostfix}");
binarySecurityToken.InnerText = Convert.ToBase64String(certificate.Export(X509ContentType.Cert));
security.AppendChild(binarySecurityToken);
security.AppendChild(xmlDigitalSignature);
}
}
private static string GetSignatureMethod(X509Certificate2 certificate)
{
// Имя алгоритма вычисляем динамически, чтобы сделать код теста универсальным
using (var publicKey = (GostCryptography.Base.GostAsymmetricAlgorithm)certificate.GetPublicKeyAlgorithm()) //TODO
{
return publicKey.SignatureAlgorithm;
}
}
private XmlElement GenerateSecurityToken(XmlDocument document, X509Certificate2 certificate, string wsseReferencePostfix, string referenceUri)
{
XmlElement keyReference = document.CreateElement("wsse", "Reference", Xmlns.wsse);
keyReference.SetAttribute("URI", $"#{Xmlns.wsseReferenceURI}{wsseReferencePostfix}");
XmlElement keySecurityTokenReference = document.CreateElement("wsse", "SecurityTokenReference", Xmlns.wsse);
keySecurityTokenReference.AppendChild(keyReference);
KeyInfoNode keyInfoData = new KeyInfoNode(keySecurityTokenReference);
KeyInfo keyInfo = new KeyInfo();
keyInfo.AddClause(keyInfoData);
Reference reference = new Reference
{
Uri = $"#{referenceUri}",
DigestMethod = Xmlns.digestMethod
};
reference.AddTransform(new XmlDsigExcC14NTransform());
FSSSignedXml signedXml = new FSSSignedXml(document)
//GostSignedXml signedXml = new GostSignedXml(document)
{
SigningKey = certificate.GetPrivateKeyAlgorithm(), //TODO
KeyInfo = keyInfo,
};
signedXml.AddReference(reference);
signedXml.SignedInfo.CanonicalizationMethod = SignedXml.XmlDsigExcC14NTransformUrl;
#pragma warning disable CS0612
signedXml.SignedInfo.SignatureMethod = GetSignatureMethod(certificate);
#pragma warning restore CS0612
signedXml.ComputeSignature();
return signedXml.GetXml();
} |
Как только закончу рефакторинг проекта, постараюсь выложить. У нас WCF-служба, запущенная в Windows-службе, которая прозрачно подписывает и шифрует запросы и расшифровывает ответы. |
Добрый день. Единственное отличие - подписанный узел - для getPrivateLNData это Body для prParseReestrFile это row. Определяю узлы для подписания поиском в теле документа по Id: internal class FSSSignedXml : SignedXml
{
public FSSSignedXml(XmlDocument document)
: base(document)
{
}
public override XmlElement GetIdElement(XmlDocument document, string idValue)
{
XmlNamespaceManager nsmgr = new XmlNamespaceManager(document.NameTable);
nsmgr.AddNamespace("wsu", Const.xmlns_wsu);
var res = document.SelectSingleNode(String.Format("//*[@wsu:Id='{0}']", idValue), nsmgr) as XmlElement;
return res;
}
} Кто-нибудь сталкивался с подобной проблемой? В чем могут быть вероятные причины проблемы? Да, еще пробовал выкинуть из тела row метода prParseReestrFile все узлы кроме lnCode и подписать - проверил валидатором, все равно подпись некорректная. |
Добрый день. Сервис наконец-то вернул: </soap:Header>
<soap:Body wsu:Id="OGRN_xxxxxxxxxxx">
<prParseReestrFileResponse xmlns="http://www.fss.ru/integration/types/eln/ins/v01" xmlns:ns2="http://www.fss.ru/integration/types/eln/v01" xmlns:ns3="http://www.fss.ru/integration/types/eln/mse/v01" xmlns:ns4="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:ns5="http://www.fss.ru/integration/types/fault/v01" xmlns:ns6="http://www.fss.ru/integration/types/common/v01">
<wsResult>
<ns2:requestId>LNDATAINS_dddddddd_dddd_dd_ee_333333</ns2:requestId>
<ns2:status>1</ns2:status>
<ns2:mess>OK</ns2:mess>
<ns2:info>
<ns2:infoRowset>
<ns2:infoRow>
<ns2:rowNo>1</ns2:rowNo>
<ns2:lnCode>xxxxxxxxxxxx</ns2:lnCode>
<ns2:lnHash>B9866BA94C34734123B745C1C4F301D8</ns2:lnHash>
<ns2:lnState>060</ns2:lnState>
<ns2:status>1</ns2:status>
</ns2:infoRow>
</ns2:infoRowset>
</ns2:info>
</wsResult>
</prParseReestrFileResponse>
</soap:Body> Дело было не в ошибочной подписи, как писал сервис, с подписью как оказалось все нормально. Переделал порядок следования на тот, который указан в образце http://www.api-fss.ru/files/V2_test_900000468164_p2.xml Отдельное спасибо за помощь @rashidus |
Вопрос не совсем в тему, но тут, пожалуй наибольшее количество людей касаемо работы с ФСС, чем на другом ресурсе :) |
Плагин криптопро для браузера |
Добрый день, коллеги. Кто ни будь может объяснить, что означают эти сведения в спецификации: Где брать номер блока для подписи? Спасибо. |
1 - Нарушение режима Примеры:
|
Спасибо огромное! |
а чем закончилось с ошибкой #39 (comment) |
При попытке зашифровать данные xml через GostCryptography.dll, возникает ошибка: ASN.1 encoded byte array contains invalid structure 'GostCrypography.Asn1.PKI.GostR34102001.GostR34102001 PublicKeyParameters |
Здравствуйте, коллеги!
С 2017 года используем GostCryptography для взаимодействия с ФСС в части обмена данными ЭЛН. За библиотеку Автору отдельное спасибо. Все прекрасно работало, до появления сервиса версии 2.0.
С появлением нового сервиса, на запрос ЭЛН по № и СНИЛС (в тестовый контур https://docs-test.fss.ru/ws-insurer-crypto-v20/FileOperationsLnService), всегда возвращается ошибка: "ru.fss.integration.ws.fault.v01.InternalException: Не удалось расшифровать сообщение. Возможно сообщение зашифровано на ключе отличном от ключа уполномоченного лица ФСС. Проверьте правильность и актуальность ключа уполномоченного лица ФСС. class ru.ibs.cryptopro.jcp.eln.crypt.CryptoException".
В процессе отладки удалось выяснить, что тестовый контур ЭЛН 2.0 не принимает сертификат уполномоченного лица ФСС для тестового контура (https://cabinets-test.fss.ru/FSS_TEST_CERT_2021.cer), а только сертификат для рабочего контура (https://cabinets.fss.ru/FSS_PROD_CERT_2021.cer). Также тестовый контур 2.0 (в отличии от тестового контура 1.1) не принимает тестовые сертификаты (выданные тестовыми УЦ), а только выданные акредитованными УЦ (т.е. полноценные сертификаты).
При выполнении этих условий АРМ ФСС выполняет запрос ЭЛН по № и СНИЛС и ему сервис возвращает: "Ошибка: ORA-20001: Некорректные параметры: Рег. номер в запросе и ОГРН в сертификате ЭП. Не найден страхователь с такими параметрами, а также отсутствует уполномоченный представитель с таким сертификатом ЭП". Что, в общем корректно (если не обращать внимание, что контур тестовый), так как используется сертификат страхователя, который не участвует в обмене данными ЭЛН.
Запрос в тестовый контур ЭЛН 2.0 без шифрования данных (https://docs-test.fss.ru/ws-insurer-v20/FileOperationsLnService) выполняется и сервис возвращает: "ORA-20001: Номер 306735316028 принадлежит к ЛН на бумажном бланке". Что тоже выглядит корректно. То есть, на лицо проблема с шифрованием (или расшифровыванием на стороне ФСС) сообщения.
Код метода и текст сообщения, передаваемое сервису ФСС в следующих сообщениях.
Кто ни будь подскажите, в чем моя ошибка.
The text was updated successfully, but these errors were encountered: