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

Уведомление

Icon
Error

7 Страницы«<34567>
Опции
К последнему сообщению К первому непрочитанному
Offline Alexcrool  
#41 Оставлено : 21 июля 2021 г. 12:01:14(UTC)
Alexcrool

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

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

Сказал «Спасибо»: 3 раз
Поблагодарили: 9 раз в 3 постах
Ну это прям последнее из последних ...
Если в процедуре DecryptSOAPResponse все проходит до конца. обрати внимание на CreateDecryptedContent(decryptedData) - тут устранение последствий паддинга и т.п. Если там чтото есть. сохрани на диск и посмотри что там. тут должен быть ответ расшифрованный. Но может оказаться кривой. Т.е. не соответствовать схеме xml и соответственно не подменяться в FssOnAfterExecute.
Если все прошло на ура, то дальше идет процедура сохранения ответа на диск responseDoc.SaveToFile('Resp'+MethodName+'Decrypt.xml'); смотри ее.
после расшифрованный ответ подсовывается в объявленный сервис, откуда получается номер и выводиться в поле главной формы Edit1.Text := resCryp.data
Offline Alexcrool  
#42 Оставлено : 21 июля 2021 г. 12:07:37(UTC)
Alexcrool

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

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

Сказал «Спасибо»: 3 раз
Поблагодарили: 9 раз в 3 постах
ну точно!
я в строке CertUser := GetCertificate(FCryptoProvider, 'твой сертификат'); подсунул сертификат от фсс и получил шифрованный ответ и ошибку "Плохие данные" там на том месте где ты писал.
Тут нужно указать ТВОЙ сертификат, не фcc!!!

Отредактировано пользователем 21 июля 2021 г. 12:09:10(UTC)  | Причина: Не указана

Offline evarlamov  
#43 Оставлено : 21 июля 2021 г. 14:50:21(UTC)
evarlamov

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

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

Сказал(а) «Спасибо»: 2 раз
Alexcrool, спасибо за терпение :)
Запустил скомпилированный exe на рабочей станции коллеги, который имеет реальный сертификат, все сработало.
Получаю номер ЭЛН.
У меня, с моим тестовым, все еще ругается на "плохие данные". Попробую что-нибудь придумать.
Offline Alexcrool  
#44 Оставлено : 22 июля 2021 г. 4:08:05(UTC)
Alexcrool

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

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

Сказал «Спасибо»: 3 раз
Поблагодарили: 9 раз в 3 постах
Очень рад за вас.
И ничего тут думать не надо. Иди и сделай себе сертификат с квалифицированной цифровой подписью, все равно пригодиться для подписи. Ну или оформи на организацию для которой делаешь взаимодействие с ФСС. Им она точно понадобиться! Сейчас делают обезличенные сертификаты на юр. лицо (без привязки к ФИО руководителя)
Offline evarlamov  
#45 Оставлено : 30 июля 2021 г. 9:55:07(UTC)
evarlamov

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

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

Сказал(а) «Спасибо»: 2 раз
Возникли трудности с отправкой ЛН на тестовый контур (при помощи prParseFilelnlpuRequest).
В ответ получаю две ошибки:
- Отсутствует подпись головной организации
- Отсутствует ЭП-1 (нарушение режима, стационар)

Правильно ли я понимаю, что для подобного запроса одной моей подписи уже недостаточно и требуется подпись МО?
Как это можно обойти в тестовых целях?
Offline Alexcrool  
#46 Оставлено : 9 августа 2021 г. 5:17:54(UTC)
Alexcrool

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

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

Сказал «Спасибо»: 3 раз
Поблагодарили: 9 раз в 3 постах
К сожалению дальше получения номера ЭЛН я не разбирался. Но вы правы, для некоторых операций с ЭЛН требуется подпись сертификатом от организации (руководителя). Так же необходим доступ к сертификатам лечащих врачей, которые выписывают БЛ.
Для примера установите АРМ ФСС и настройте его на тестовый контур. Так вы сможете увидеть, что будет работать с вашими сертификатами, а что нет и что необходимо указать в настройках АРМ. Тоже самое нужно и для работы вашего ПО
Offline Qulac  
#47 Оставлено : 15 сентября 2021 г. 12:47:57(UTC)
Qulac

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

Группы: Участники
Зарегистрирован: 09.09.2021(UTC)
Сообщений: 5

Пытаюсь адаптировать код взятый от сюда: https://www.cyberforum.ru/web-se...s-wcf/thread2078783.html для шифрования отправляемых сообщений. Вот код:
Код:

 public XmlDocument EncryptionXML(XmlDocument document, X509Certificate2 fssCertificate, X509Certificate2 clinicCertificate)
        {
            XmlNode elementBody = document.GetElementsByTagName("Envelope", xmlns_soapenv)[0];

            // Создаем новый XML документ.
            XmlDocument doc = new XmlDocument();
            XmlNamespaceManager ns = new XmlNamespaceManager(doc.NameTable);
            ns.AddNamespace("soapenv", xmlns_soapenv);
            ns.AddNamespace("xenc", xmlns_xenc);
            ns.AddNamespace("ds", xmlns_ds);
            ns.AddNamespace("sch", xmlns_sch);
            ns.AddNamespace("wsse", xmlns_wsse);
            ns.AddNamespace("wsu", xmlns_wsu);

            MemoryStream newRequestStream = new MemoryStream();
            XmlWriter writer = XmlWriter.Create(newRequestStream, new XmlWriterSettings { Encoding = Encoding.UTF8 });
            writer.WriteStartDocument();
            /* Envelope */
            writer.WriteStartElement("soapenv", "Envelope", xmlns_soapenv);
            /* Header */
            writer.WriteStartElement("soapenv", "Header", xmlns_soapenv);
            writer.WriteEndElement(); // Header
            writer.WriteStartElement("soapenv", "Body", xmlns_soapenv); // Body
            /************************************************************** EncryptedData **************************************************************************/
            writer.WriteRaw(elementBody.OuterXml);
            /*******************************************************************************************************************************************************/
            writer.WriteEndElement(); // Body
            writer.WriteEndElement(); // Envelope
            writer.WriteEndDocument();
            writer.Flush();

            string xmlText = Encoding.GetEncoding("UTF-8").GetString(newRequestStream.ToArray());
            XmlDocument xml = new XmlDocument();
            newRequestStream.Position = 0;
            xml.Load(newRequestStream);
            writer.Close();

            // Ищем заданный элемент для заширования. Envelope
            XmlElement elementToEncrypt = xml.GetElementsByTagName("Envelope", xmlns_soapenv)[1] as XmlElement;

            // Создаем объект EncryptedData и заполняем его необходимой информацией.
            EncryptedData edElement = new EncryptedData();
            edElement.Type = EncryptedXml.XmlEncElementUrl;

            // Созданный элемент помечаем EncryptedElement1
            //edElement.Id = "EncryptedElement1";
            // Заполняем алгоритм зашифрования данных.  Он будет использован при расшифровании.
            edElement.EncryptionMethod = new EncryptionMethod(CPEncryptedXml.XmlEncGost28147Url);

            // Создаем новую ссылку на ключ.
            edElement.KeyInfo = new KeyInfo();

            // Создаем случайный симметричный ключ.
            // В целях безопасности удаляем ключ из памяти после использования.
            using (Gost28147CryptoServiceProvider sessionKey = new Gost28147CryptoServiceProvider())
            {
                // Создаем объект класса EncryptedXml
                EncryptedXml eXml = new EncryptedXml();
             
                // Зашифроваем узел на симметричном ключе.
                byte[] encryptedElement = eXml.EncryptData(elementToEncrypt, sessionKey, false);

                // Зашифровываем сессионный ключ и добавляем эти зашифрованные данные к узлу EncryptedKey.
                EncryptedKey ek = new EncryptedKey();
                byte[] encryptedKey = CPEncryptedXml.EncryptKey(sessionKey, (Gost3410_2012_256CryptoServiceProvider)fssCertificate.PublicKey.Key);

                ek.CipherData = new CipherData(encryptedKey);
                ek.EncryptionMethod = new EncryptionMethod(CPEncryptedXml.XmlEncGostKeyTransportUrl);

                
                KeyInfoX509Data data = new KeyInfoX509Data(fssCertificate);
                ek.KeyInfo.AddClause(data);

                // Добавляем ссылку на зашифрованный ключ к зашифрованным данным.
                edElement.KeyInfo.AddClause(new KeyInfoEncryptedKey(ek));

                // Добавляем зашифрованные данные к объекту EncryptedData.
                edElement.CipherData.CipherValue = encryptedElement;
            }

            // Заменяем исходный узел на зашифрованный.
            EncryptedXml.ReplaceElement(elementToEncrypt, edElement, false);
            
            return xml;
        }


Идея простая: создаем новый xml, в его Body "заливаем" содержимое подписанного отправляемого документа, затем этот Body шифруем и заменяем его на зашифрованный результат. Результат к сожалению не удовлетворительный, ФСС возвращает:"Не удалось расшифровать сообщение. Возможно сообщение зашифровано на ключе отличном от ключа уполномоченного лица ФСС. Проверьте правильность и актуальность ключа уполномоченного лица ФСС." Ихняя ФСС АРМ ЛПУ работает нормально на тестовом сертификате и с шифрованием. Подскажите пожалуйста в какую сторону мне копать?
Offline Qulac  
#48 Оставлено : 20 октября 2021 г. 12:02:58(UTC)
Qulac

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

Группы: Участники
Зарегистрирован: 09.09.2021(UTC)
Сообщений: 5

Коллеги, кто ни будь знает, что означает это в спецификации:
"
2. Для ЭП врача:
«http://eln.fss.ru/actor/doc/[№ ЭЛН]_[№ подписываемого блока*]_doc
3. Для ЭП председателя ВК:
«http://eln.fss.ru/actor/doc/[№ ЭЛН]_[№ подписываемого блока*]_vk
"

Имеется ввиду [№ подписываемого блока*]. Подписание у меня работает, но номера блоков зашиты в коде, т.е. могу только отправлять БЛ с конкретным содержанием. Нужен общий подход с генерацией этого номера. Спасибо.
Offline Дима2505  
#49 Оставлено : 2 ноября 2021 г. 8:33:34(UTC)
Дима2505

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

Группы: Участники
Зарегистрирован: 25.02.2021(UTC)
Сообщений: 1

Сказал(а) «Спасибо»: 1 раз
При отправке ЛН на тестовый контур (при помощи prParseFilelnlpuRequest), проект который выложил выше Alexcrool.
заполняю ЛН так:

reqCryp2 := WSLnCryptoV20.prParseFilelnlpuRequest.Create;
reqCryp2.ogrn := ogrn;
reqCryp2.pXmlFile :=WSLnCryptoV20.pXmlFile.Create;

rs:=WSLnCryptoV20.rowset.Create;
reqCryp2.pXmlFile.rowset:=rs;

rs.author := '';
rs.email := '';
rs.phone := '';
rs.software := 'test';
rs.version := '2.0';
rs.version_software := '2.01.01.2020082103';


SetLength(ARW,1);
rs.row:=ARW;
rw:=WSLnCryptoV20.row.Create;
ARW[0]:=rw;

rw.Id := FormatDateTime('yyyy-mm-dd', now);
rw.unconditional := False;

ну и далее в таком ключе.

Получаю raised exception class ESOAPDomConvertError with message 'Must enable multiref output for objects when serializing a graph of objects - (row)'.
Как переключить эту самую сериализацию, или как можно выложить данным элементом по другому? Спасибо.

Отредактировано пользователем 2 ноября 2021 г. 11:31:33(UTC)  | Причина: Не указана

Offline thpg  
#50 Оставлено : 9 февраля 2022 г. 15:09:15(UTC)
thpg

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

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

Сказал(а) «Спасибо»: 3 раз
Поблагодарили: 4 раз в 4 постах
На новых версиях CSP перестала работать расшифровка данных.
На 5.0.11455 еще работает, c 5.0.12000 и дальше уже нет.

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