| 
	Статус: Участник
 Группы: Участники
 Зарегистрирован: 25.01.2019(UTC) Сообщений: 27  Сказал «Спасибо»: 3 разПоблагодарили: 9 раз в 3 постах
 
 | 
            
		      
                Ну это прям последнее из последних ...Если в процедуре DecryptSOAPResponse все проходит до конца. обрати внимание на CreateDecryptedContent(decryptedData) - тут устранение последствий паддинга и т.п. Если там чтото есть. сохрани на диск и посмотри что там. тут должен быть ответ расшифрованный. Но может оказаться кривой. Т.е. не соответствовать схеме xml и соответственно не подменяться в FssOnAfterExecute.
 Если все прошло на ура, то дальше идет процедура сохранения ответа на диск responseDoc.SaveToFile('Resp'+MethodName+'Decrypt.xml'); смотри ее.
 после расшифрованный ответ подсовывается в объявленный сервис, откуда получается номер и выводиться в поле главной формы Edit1.Text := resCryp.data
 | 
    | 
             | 
            
         | 
    |  | 
        
        
        
            
        
            
            
    | 
	Статус: Участник
 Группы: Участники
 Зарегистрирован: 25.01.2019(UTC) Сообщений: 27  Сказал «Спасибо»: 3 разПоблагодарили: 9 раз в 3 постах
 
 | 
            
		      
                ну точно!  я в строке CertUser := GetCertificate(FCryptoProvider, 'твой сертификат'); подсунул сертификат от фсс и получил шифрованный ответ и ошибку "Плохие данные" там на том месте где ты писал.  Тут нужно указать ТВОЙ сертификат, не фcc!!! Отредактировано пользователем 21 июля 2021 г. 12:09:10(UTC)
 | Причина: Не указана | 
    | 
             | 
            
         | 
    |  | 
        
        
        
    
        
            
            
    | 
	Статус: Участник
 Группы: Участники
 Зарегистрирован: 06.11.2015(UTC) Сообщений: 13 Сказал(а) «Спасибо»: 2 раз
 | 
            
		      
                Alexcrool, спасибо за терпение :)Запустил скомпилированный exe на рабочей станции коллеги, который имеет реальный сертификат, все сработало.
 Получаю номер ЭЛН.
 У меня, с моим тестовым, все еще ругается на "плохие данные". Попробую что-нибудь придумать.
 
 | 
    | 
             | 
            
         | 
    |  | 
        
        
        
            
        
            
            
    | 
	Статус: Участник
 Группы: Участники
 Зарегистрирован: 25.01.2019(UTC) Сообщений: 27  Сказал «Спасибо»: 3 разПоблагодарили: 9 раз в 3 постах
 
 | 
            
		      
                Очень рад за вас. И ничего тут думать не надо. Иди и сделай себе сертификат с квалифицированной цифровой подписью, все равно пригодиться для подписи. Ну или оформи на организацию для которой делаешь взаимодействие с ФСС. Им она точно понадобиться! Сейчас делают обезличенные сертификаты на юр. лицо (без привязки к ФИО руководителя)
 | 
    | 
             | 
            
         | 
    |  | 
        
        
        
    
        
            
            
    | 
	Статус: Участник
 Группы: Участники
 Зарегистрирован: 06.11.2015(UTC) Сообщений: 13 Сказал(а) «Спасибо»: 2 раз
 | 
            
		      
                Возникли трудности с отправкой ЛН на тестовый контур (при помощи prParseFilelnlpuRequest). В ответ получаю две ошибки:
 - Отсутствует подпись головной организации
 - Отсутствует ЭП-1 (нарушение режима, стационар)
 
 Правильно ли я понимаю, что для подобного запроса одной моей подписи уже недостаточно и требуется подпись МО?
 Как это можно обойти в тестовых целях?
 | 
    | 
             | 
            
         | 
    |  | 
        
        
        
            
        
            
            
    | 
	Статус: Участник
 Группы: Участники
 Зарегистрирован: 25.01.2019(UTC) Сообщений: 27  Сказал «Спасибо»: 3 разПоблагодарили: 9 раз в 3 постах
 
 | 
            
		      
                К сожалению дальше получения номера ЭЛН я не разбирался. Но вы правы, для некоторых операций с ЭЛН требуется подпись сертификатом от организации (руководителя). Так же необходим доступ к сертификатам лечащих врачей, которые выписывают БЛ.Для примера установите АРМ ФСС и настройте его на тестовый контур. Так вы сможете увидеть, что будет работать с вашими сертификатами, а что нет и что необходимо указать в настройках АРМ. Тоже самое нужно и для работы вашего ПО
 | 
    | 
             | 
            
         | 
    |  | 
        
        
        
    
        
            
            
    | 
	Статус: Новичок
 Группы: Участники
Зарегистрирован: 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 шифруем и заменяем его на зашифрованный результат. Результат к сожалению не удовлетворительный, ФСС возвращает:"Не удалось расшифровать сообщение. Возможно сообщение зашифровано на ключе отличном от ключа уполномоченного лица ФСС. Проверьте правильность и актуальность ключа уполномоченного лица ФСС." Ихняя ФСС АРМ ЛПУ работает нормально на тестовом сертификате и с шифрованием.  Подскажите пожалуйста в какую сторону мне копать? | 
    | 
             | 
            
         | 
    |  | 
        
        
        
            
        
            
            
    | 
	Статус: Новичок
 Группы: Участники
Зарегистрирован: 09.09.2021(UTC)
 Сообщений: 5
 
 | 
            
		      
                Коллеги, кто ни будь знает, что означает это в спецификации:"
 2. Для ЭП врача:
 «http://eln.fss.ru/actor/doc/[№ ЭЛН]_[№ подписываемого блока*]_doc
 3. Для ЭП председателя ВК:
 «http://eln.fss.ru/actor/doc/[№ ЭЛН]_[№ подписываемого блока*]_vk
 "
 
 Имеется ввиду [№ подписываемого блока*]. Подписание у меня работает, но номера блоков зашиты в коде, т.е. могу только отправлять БЛ с конкретным содержанием. Нужен общий подход с генерацией этого номера. Спасибо.
 | 
    | 
             | 
            
         | 
    |  | 
        
        
        
    
        
            
            
    | 
	Статус: Новичок
 Группы: Участники
Зарегистрирован: 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)
 | Причина: Не указана | 
    | 
             | 
            
         | 
    |  | 
        
        
        
            
        
            
            
    | 
	Статус: Участник
 Группы: Участники
 Зарегистрирован: 10.11.2017(UTC) Сообщений: 10 Сказал(а) «Спасибо»: 3 разПоблагодарили: 4 раз в 4 постах
 
 | 
            
		      
                На новых версиях CSP перестала работать расшифровка данных.На 5.0.11455 еще работает, c 5.0.12000 и дальше уже нет.
 
 Предположу, что надо другие хитрые байты в APublicKeyBlob и ASessionKeyBlob.
 
 | 
    | 
             | 
            
         | 
    |  | 
        
        
        
    
	                           
	
    
        Быстрый переход
         
	
    
    Вы не можете создавать новые темы в этом форуме.
	
	Вы не можете отвечать в этом форуме.
	
	Вы не можете удалять Ваши сообщения в этом форуме.
	
	Вы не можете редактировать Ваши сообщения в этом форуме.
	
	Вы не можете создавать опросы в этом форуме.
	
	Вы не можете голосовать в этом форуме.
	
	
    
    
        Important Information:
        The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
        
        
More Details
        Close