Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Криптография, как подписывать XML ?

Криптография, как подписывать XML ?
Я
   DES
 
28.07.16 - 13:27
Есть Файл XML. Получатель требует его подписать, дает пример.
В начале идет этот XML , а за ним должен следовать такой кусок
<SignatureContent>
    <SignedDoc>
        <hash Id="SignedContent">--------?---------</hash>
        <Signature xmlns="http://www.w3.org/2000/09/xmldsig#">;
            <SignedInfo>
                <CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"; />
                <SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"; />
                <Reference URI="#SignedContent">
                    <Transforms>
                        <Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"; />
                    </Transforms>
                    <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"; />
                    <DigestValue>--------?---------=</DigestValue>
                </Reference>
            </SignedInfo>
            <SignatureValue>--------?---------</SignatureValue>
            <KeyInfo>
                <X509Data>
                    <X509SubjectName>------------тут понятно что писать ----------</X509SubjectName>
                    <X509Certificate>--------?---------</X509Certificate>
                </X509Data>
            </KeyInfo>
        </Signature>
    </SignedDoc>
</SignatureContent>

что нужно вписывать вместо "-----?-------" ? и можно ли это получить посредством 1с8 ?
   Serginio1
 
1 - 28.07.16 - 13:37
   Serginio1
 
2 - 28.07.16 - 13:38
   Garykom
 
3 - 28.07.16 - 13:39
   Serginio1
 
4 - 28.07.16 - 13:40
   Garykom
 
5 - 28.07.16 - 13:43
(4) оттуда "есть два варианта
1. высокоуровневый криптопро.net
2. низкоуровневый crypto api

выбирайте"

криптопро не обязателен
   Кирпич
 
6 - 28.07.16 - 14:03
(0) прежде чем броситься в глубины дотнетов, сишарпов и java, советую спросить этот вопрос у самого получателя. Уж он то точно знает.
   DES
 
7 - 28.07.16 - 14:16
неужели нет нигде обработки по подписанию XML ?
   Кирпич
 
8 - 28.07.16 - 14:26
(7) сделай. пример в (2)
   DES
 
9 - 28.07.16 - 14:35
делаю.
сразу ругается на using System.Security.Cryptography.Xml;
Ошибка    1    Имя типа или пространства имен "Xml" отсутствует в пространстве имен "System.Security.Cryptography" (пропущена ссылка на сборку?)    D:\ServiceEfactura5\ConsoleApplication1\ConsoleApplication1\Program.cs    7    36    ConsoleApplication1
   Gary417
 
10 - 28.07.16 - 14:37
(9) ну читайте подробнее пример то

To compile this example, you need to include a reference to System.Security.dll.
   DES
 
11 - 28.07.16 - 14:43
Ошибка    1    Имя "rsaKey" отсутствует в текущем контексте    D:\ServiceEfactura5\ConsoleApplication1\ConsoleApplication1\Program.cs    66    36    ConsoleApplication1
   DES
 
12 - 28.07.16 - 14:45
для проверки делать в VS тип проекта консольное приложение ?
   Кирпич
 
13 - 28.07.16 - 14:49
(11) напиши просто Key
   DES
 
14 - 28.07.16 - 14:52
да уже догнался, а как в этом примере подкинуть свой ключ из хранилища ?
   Кирпич
 
15 - 28.07.16 - 14:54
   Garykom
 
16 - 28.07.16 - 14:59
(15) Кста да тока хотел сказать что нафуя сторонник когда можно из 1С сразу http://catalog.mista.ru/public/199912/
   Garykom
 
17 - 28.07.16 - 15:00
   Кирпич
 
18 - 28.07.16 - 15:11
   DES
 
19 - 28.07.16 - 15:15
(16) просят че то за скачку, не пойму.
   Garykom
 
20 - 28.07.16 - 15:21
(19) СП продать? Раздел МенеджерКриптографии.
   DES
 
21 - 28.07.16 - 15:28
(20) что такое СП ?
У меня книжки есть, из коробки.
   DES
 
22 - 28.07.16 - 15:40
кто может качнуть http://catalog.mista.ru/public/199912/ для меня ?
   Кирпич
 
23 - 28.07.16 - 18:47
(22) Да там фигня. Тебе не поможет.
   DES
 
24 - 28.07.16 - 18:54
как так, пишет же что все путем из 1с
   H A D G E H O G s
 
25 - 28.07.16 - 19:26
1С при подписи не включает в результат исходный файл.
   Garykom
 
26 - 28.07.16 - 19:46
(25) ТСу нуна взять хеш от файла (исходного XML) и подписать его ЭП, затем все это засунуть в одну XMLину.
   Garykom
 
27 - 28.07.16 - 19:47
(26)+ Если честно то проблеммка на максимум пару дней (при наличии связи с кто проверяет или способа проверки) и 4-8 нормочасов.
   Кирпич
 
28 - 28.07.16 - 19:50
(24) тебе нужна подпись типа XMLDSIG, про которую пример в (2)
В 1С это можно сделать (сам не пробовал), но надо самому генерить хеши и шифровать и в XML всё это запихивать. В (2) применяется класс SignedXml, который умеет это делать.
   Кирпич
 
29 - 28.07.16 - 19:55
+(28) могут быть еще заморочки со стороны Получателя, чтобы твой алгоритм выдавал ровно то, что ожидает Получатель, байт в байт. Не факт, что даже пример из (2) сгенерит правильный файл, но скорее всего сгенерит. У Получателя твоего наверное тоже всё на C# сделано. Так что ковыряй пока лучше C#.
   DES
 
30 - 29.07.16 - 10:02
Вся эта лабудень делается через IE и JAVA на локальном компе. Может как то можно это выдрать и закинуть в 1С. Ну или хотя бы алгоритм расковырять.
 
 Рекламное место пустует
   Serginio1
 
31 - 29.07.16 - 10:07
(30) В кой то веки я согласен с Кирпичом. Спрашивай у получателя алгоритс.
В 4 приведен пример поиска ключа, алгоритм хэширования и подпись этим ключом.
В большинстве случаев достаточно 2. Ты бы взял и попробовал.
   DES
 
32 - 29.07.16 - 10:18
(29) как в (2) присобачить свой RSA key ?
   DES
 
33 - 29.07.16 - 10:18
(31) взял, попробовал, почто то что нужно
   DES
 
34 - 29.07.16 - 10:19
(31) получатель недоступен для консультирования, все что есть это pdf от eFactura.
   Кирпич
 
35 - 29.07.16 - 10:39
(34) так ты всё молдавские фактуры грызёшь? :)
у тебя же вроде какая то либа была. она наверное и подписывать умеет. не?
   Кирпич
 
36 - 29.07.16 - 10:43
+(35) ну и в PDF загляни. обычно алгоритм подписи описывают подробно.
   DES
 
37 - 29.07.16 - 10:56
не могу заглянуть в pdf, я его распечатал и протер до дыр.
Алгоритм описан в виде исходные данные и требуемые результаты.

сделал поиск ключа в хранилище
                string certThumbprint = @"CDA379DF091A7541FD5152DF4736449E7948FF5A";
                X509Store storeMy = new X509Store(StoreName.My, StoreLocation.CurrentUser);
                storeMy.Open(OpenFlags.OpenExistingOnly | OpenFlags.ReadOnly);
                X509CertificateCollection foundCertColl = storeMy.Certificates.Find(X509FindType.FindByThumbprint, certThumbprint, false);

как его преобразовать в RSA key ?
   Serginio1
 
38 - 29.07.16 - 11:14
(37) Смотри 4. Там все есть
X509Certificate cert = foundCertColl[0];

KeyInfo keyInfo = new KeyInfo();
keyInfo.AddClause(new KeyInfoX509Data(cert));

// Добавляем KeyInfo в SignedXml.

signedXml.KeyInfo = keyInfo;

// Вычисляем подпись.

signedXml.ComputeSignature();//Здесь возникает exception
   Serginio1
 
39 - 29.07.16 - 11:16
   Serginio1
 
40 - 29.07.16 - 11:21
   Serginio1
 
41 - 29.07.16 - 11:22
Проси алгоритм подписи на C#.
   DES
 
42 - 29.07.16 - 11:52
(39) сделал по (39)
структура получилась соответствующая, только значения слегка отличаются
Нужно
<CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"; />

а выдает
<CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"; />

насколько это критично ?
   Serginio1
 
43 - 29.07.16 - 11:57
Наверное другой XmlDsigC14NTransform

XmlDsigExcC14NTransform

https://msdn.microsoft.com/ru-ru/library/system.security.cryptography.xml.xmldsigexcc14ntransform(v=vs.110).aspx
   DES
 
44 - 29.07.16 - 16:03
ДА, строчка получилась та что нужно, а формат стал другой


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.