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

Уведомление

Icon
Error

4 Страницы<1234>
Опции
К последнему сообщению К первому непрочитанному
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.
Offline petrpeprovich  
#51 Оставлено : 8 мая 2022 г. 20:41:34(UTC)
petrpeprovich

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

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

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

Предположу, что надо другие хитрые байты в APublicKeyBlob и ASessionKeyBlob.


В итоге подобрали эти байты? Как то смогли решить этот вопрос?
Offline thpg  
#52 Оставлено : 9 мая 2022 г. 7:38:14(UTC)
thpg

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

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

Сказал(а) «Спасибо»: 3 раз
Поблагодарили: 4 раз в 4 постах
Автор: petrpeprovich Перейти к цитате
В итоге подобрали эти байты? Как то смогли решить этот вопрос?


Тогда было другое, а "байты" поменялись сейчас в Мае при обновлении ПО у ФСС.
Там, по уму, надо разбирать ASN.1 и копировать параметр из транспортной строки.
Если же тупо, просто под текущий рабочий вариант (на тестовом осталось старое ПО) в ФСС, то так:


publicKey := Copy(transport, 108, 64); // открытый ключ отправителя
sessionSV := Copy(transport, 174, 8); // синхропосылка (UKM)

APublicKeyBlob :=
[
$06, // bType = PUBLICKEYBLOB
$20, // bVersion = 0x20
$00, $00,
$23, $2E, $00, $00, // KeyAlg = ALG_SID_GR3410EL
$4D, $41, $47, $31, //Magic = GR3410_1_MAGIC
$00, $02, $00, $00, // BitLen = 512
$30, $1C,
$06, $07, $2A, $85, $03, $02, $02, $23, $01,
$06, $08, $2A, $85, $03, $07, $01, $01, $02, $02,
$06, $07, $2A, $85, $03, $02, $02, $1F, $01
] + publicKey;

Отредактировано пользователем 9 мая 2022 г. 7:39:21(UTC)  | Причина: Не указана

thanks 1 пользователь поблагодарил thpg за этот пост.
petrpeprovich оставлено 10.05.2022(UTC)
Offline petrpeprovich  
#53 Оставлено : 11 мая 2022 г. 9:25:39(UTC)
petrpeprovich

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

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

Сказал(а) «Спасибо»: 1 раз
К сожалению, с этим вариантом, ответ от ФСС:
Цитата:
Не удалось расшифровать сообщение. Возможно сообщение зашифровано на ключе отличном от ключа уполномоченного лица ФСС. Проверьте правильность и актуальность ключа уполномоченного лица ФСС.
Offline thpg  
#54 Оставлено : 11 мая 2022 г. 9:28:10(UTC)
thpg

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

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

Сказал(а) «Спасибо»: 3 раз
Поблагодарили: 4 раз в 4 постах
Автор: petrpeprovich Перейти к цитате
К сожалению, с этим вариантом, ответ от ФСС:
Цитата:
Не удалось расшифровать сообщение. Возможно сообщение зашифровано на ключе отличном от ключа уполномоченного лица ФСС. Проверьте правильность и актуальность ключа уполномоченного лица ФСС.


Те байты - это расшифровка ответа, полученного от ФСС. На отправляемое сообщение они не влияют. У вас, скорее всего, делается шифрование не тем сертификатом.

Отредактировано пользователем 11 мая 2022 г. 9:28:56(UTC)  | Причина: Не указана

Offline medsoft  
#55 Оставлено : 12 мая 2022 г. 11:02:14(UTC)
medsoft

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

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

Сказал(а) «Спасибо»: 3 раз
Автор: thpg Перейти к цитате
Автор: petrpeprovich Перейти к цитате
В итоге подобрали эти байты? Как то смогли решить этот вопрос?


Тогда было другое, а "байты" поменялись сейчас в Мае при обновлении ПО у ФСС.
Там, по уму, надо разбирать ASN.1 и копировать параметр из транспортной строки.
Если же тупо, просто под текущий рабочий вариант (на тестовом осталось старое ПО) в ФСС, то так:


publicKey := Copy(transport, 108, 64); // открытый ключ отправителя
sessionSV := Copy(transport, 174, 8); // синхропосылка (UKM)

APublicKeyBlob :=
[
$06, // bType = PUBLICKEYBLOB
$20, // bVersion = 0x20
$00, $00,
$23, $2E, $00, $00, // KeyAlg = ALG_SID_GR3410EL
$4D, $41, $47, $31, //Magic = GR3410_1_MAGIC
$00, $02, $00, $00, // BitLen = 512
$30, $1C,
$06, $07, $2A, $85, $03, $02, $02, $23, $01,
$06, $08, $2A, $85, $03, $07, $01, $01, $02, $02,
$06, $07, $2A, $85, $03, $02, $02, $1F, $01
] + publicKey;



Используя данный вариант возникает ошибка: "Набор ключей не определён"

Наверное ещё нужен новый вариант для ASessionKeyBlob ?
Offline thpg  
#56 Оставлено : 12 мая 2022 г. 12:24:23(UTC)
thpg

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

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

Сказал(а) «Спасибо»: 3 раз
Поблагодарили: 4 раз в 4 постах
Автор: medsoft Перейти к цитате
Используя данный вариант возникает ошибка: "Набор ключей не определён"

Наверное ещё нужен новый вариант для ASessionKeyBlob ?


Вы на рабочем подключении пробуете? На тестовом не будет работать - там осталось старое ПО.
Offline medsoft  
#57 Оставлено : 12 мая 2022 г. 12:48:39(UTC)
medsoft

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

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

Сказал(а) «Спасибо»: 3 раз
Да, пробую на рабочем.

Если использовать, ваш набор байтов:
Цитата:
APublicKeyBlob :=
[
$06, // bType = PUBLICKEYBLOB
$20, // bVersion = 0x20
$00, $00,
$23, $2E, $00, $00, // KeyAlg = ALG_SID_GR3410EL
$4D, $41, $47, $31, //Magic = GR3410_1_MAGIC
$00, $02, $00, $00, // BitLen = 512
$30, $1C,
$06, $07, $2A, $85, $03, $02, $02, $23, $01,
$06, $08, $2A, $85, $03, $07, $01, $01, $02, $02,
$06, $07, $2A, $85, $03, $02, $02, $1F, $01
] + publicKey;

ошибка "Набор ключей не определён",
если использовать:

Цитата:
APublicKeyBlob :=
[
$06, // bType = PUBLICKEYBLOB
$20, // bVersion = 0x20
$00, $00,
$23, $2E, $00, $00, // KeyAlg = ALG_SID_GR3410EL
$4D, $41, $47, $31, //Magic = GR3410_1_MAGIC
$00, $02, $00, $00, // BitLen = 512
// bASN1GostR3410_94_PublicKeyParameters
$30, $13,
$06, $07, $2A, $85, $03, $02, $02, $24, $00,
$06, $08, $2A, $85, $03, $07, $01, $01, $02, $02
] + publicKey;

ошибка - "Плохие данные"
Offline thpg  
#58 Оставлено : 12 мая 2022 г. 12:57:39(UTC)
thpg

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

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

Сказал(а) «Спасибо»: 3 раз
Поблагодарили: 4 раз в 4 постах
Автор: medsoft Перейти к цитате
ошибка "Набор ключей не определён"


Вы первые две строки из примера не забыли взять?

Сертификат и цепочку к нему проверьте.

Строка transport в ASN.1. Тут видно что поменялось, видно с какого байта и что копируется:

Было:
https://lapo.it/asn1js/#...sJlhBwt0T8BAgwWKKeEE_0Sg

Стало:
https://lapo.it/asn1js/#...slNDqoXlTeQQIVmW6AId5LCY
thanks 1 пользователь поблагодарил thpg за этот пост.
medsoft оставлено 12.05.2022(UTC)
Offline medsoft  
#59 Оставлено : 12 мая 2022 г. 13:31:40(UTC)
medsoft

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

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

Сказал(а) «Спасибо»: 3 раз

Цитата:
Вы первые две строки из примера не забыли взять?



Да эти строки использую:

Цитата:
publicKey := Copy(transport, 108, 64); // открытый ключ отправителя
sessionSV := Copy(transport, 174, 8); // синхропосылка (UKM)


"Набор ключей не определён"
Offline medsoft  
#60 Оставлено : 12 мая 2022 г. 13:41:14(UTC)
medsoft

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

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

Сказал(а) «Спасибо»: 3 раз
У меня вот такая строка transport:

https://lapo.it/asn1js/#...78xmMuSdg8BAjLUauzi5Mg6w

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

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