![]() |
![]() |
![]() |
|
Криптография, как подписывать XML ? | ☑ | ||
---|---|---|---|---|
0
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 ? |
|||
1
Serginio1
28.07.16
✎
13:37
|
||||
2
Serginio1
28.07.16
✎
13:38
|
||||
3
Garykom
гуру
28.07.16
✎
13:39
|
(1) Как знал ))
(0) Можно, выбор офигительный например C#/.net https://msdn.microsoft.com/ru-ru/library/system.security.cryptography.x509certificates.x509certificate(v=vs.110).aspx или java https://docs.oracle.com/javase/7/docs/api/java/security/cert/X509Certificate.html |
|||
4
Serginio1
28.07.16
✎
13:40
|
||||
5
Garykom
гуру
28.07.16
✎
13:43
|
(4) оттуда "есть два варианта
1. высокоуровневый криптопро.net 2. низкоуровневый crypto api выбирайте" криптопро не обязателен |
|||
6
Кирпич
28.07.16
✎
14:03
|
(0) прежде чем броситься в глубины дотнетов, сишарпов и java, советую спросить этот вопрос у самого получателя. Уж он то точно знает.
|
|||
7
DES
28.07.16
✎
14:16
|
неужели нет нигде обработки по подписанию XML ?
|
|||
8
Кирпич
28.07.16
✎
14:26
|
(7) сделай. пример в (2)
|
|||
9
DES
28.07.16
✎
14:35
|
делаю.
сразу ругается на using System.Security.Cryptography.Xml; Ошибка 1 Имя типа или пространства имен "Xml" отсутствует в пространстве имен "System.Security.Cryptography" (пропущена ссылка на сборку?) D:\ServiceEfactura5\ConsoleApplication1\ConsoleApplication1\Program.cs 7 36 ConsoleApplication1 |
|||
10
Gary417
28.07.16
✎
14:37
|
(9) ну читайте подробнее пример то
To compile this example, you need to include a reference to System.Security.dll. |
|||
11
DES
28.07.16
✎
14:43
|
Ошибка 1 Имя "rsaKey" отсутствует в текущем контексте D:\ServiceEfactura5\ConsoleApplication1\ConsoleApplication1\Program.cs 66 36 ConsoleApplication1
|
|||
12
DES
28.07.16
✎
14:45
|
для проверки делать в VS тип проекта консольное приложение ?
|
|||
13
Кирпич
28.07.16
✎
14:49
|
(11) напиши просто Key
|
|||
14
DES
28.07.16
✎
14:52
|
да уже догнался, а как в этом примере подкинуть свой ключ из хранилища ?
|
|||
15
Кирпич
28.07.16
✎
14:54
|
вот еще умный чувак пишет на 1с
http://1centerprise8.blogspot.ru/2015/04/soap-xmldsig-wssecurity-template.html#uds-search-results |
|||
16
Garykom
гуру
28.07.16
✎
14:59
|
(15) Кста да тока хотел сказать что нафуя сторонник когда можно из 1С сразу http://catalog.mista.ru/public/199912/
|
|||
17
Garykom
гуру
28.07.16
✎
15:00
|
||||
18
Кирпич
28.07.16
✎
15:11
|
||||
19
DES
28.07.16
✎
15:15
|
(16) просят че то за скачку, не пойму.
|
|||
20
Garykom
гуру
28.07.16
✎
15:21
|
(19) СП продать? Раздел МенеджерКриптографии.
|
|||
21
DES
28.07.16
✎
15:28
|
(20) что такое СП ?
У меня книжки есть, из коробки. |
|||
22
DES
28.07.16
✎
15:40
|
кто может качнуть http://catalog.mista.ru/public/199912/ для меня ?
|
|||
23
Кирпич
28.07.16
✎
18:47
|
(22) Да там фигня. Тебе не поможет.
|
|||
24
DES
28.07.16
✎
18:54
|
как так, пишет же что все путем из 1с
|
|||
25
H A D G E H O G s
28.07.16
✎
19:26
|
1С при подписи не включает в результат исходный файл.
|
|||
26
Garykom
гуру
28.07.16
✎
19:46
|
(25) ТСу нуна взять хеш от файла (исходного XML) и подписать его ЭП, затем все это засунуть в одну XMLину.
|
|||
27
Garykom
гуру
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#.
|
|||
30
DES
29.07.16
✎
10:02
|
Вся эта лабудень делается через IE и JAVA на локальном компе. Может как то можно это выдрать и закинуть в 1С. Ну или хотя бы алгоритм расковырять.
|
|||
31
Serginio1
29.07.16
✎
10:07
|
(30) В кой то веки я согласен с Кирпичом. Спрашивай у получателя алгоритс.
В 4 приведен пример поиска ключа, алгоритм хэширования и подпись этим ключом. В большинстве случаев достаточно 2. Ты бы взял и попробовал. |
|||
32
DES
29.07.16
✎
10:18
|
(29) как в (2) присобачить свой RSA key ?
|
|||
33
DES
29.07.16
✎
10:18
|
(31) взял, попробовал, почто то что нужно
|
|||
34
DES
29.07.16
✎
10:19
|
(31) получатель недоступен для консультирования, все что есть это pdf от eFactura.
|
|||
35
Кирпич
29.07.16
✎
10:39
|
(34) так ты всё молдавские фактуры грызёшь? :)
у тебя же вроде какая то либа была. она наверное и подписывать умеет. не? |
|||
36
Кирпич
29.07.16
✎
10:43
|
+(35) ну и в PDF загляни. обычно алгоритм подписи описывают подробно.
|
|||
37
DES
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 ? |
|||
38
Serginio1
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 |
|||
39
Serginio1
29.07.16
✎
11:16
|
||||
40
Serginio1
29.07.16
✎
11:21
|
Обратись к ЭЦП, Сертификат, Подпись. Продолжение.
|
|||
41
Serginio1
29.07.16
✎
11:22
|
Проси алгоритм подписи на C#.
|
|||
42
DES
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" /> насколько это критично ? |
|||
43
Serginio1
29.07.16
✎
11:57
|
Наверное другой XmlDsigC14NTransform
XmlDsigExcC14NTransform https://msdn.microsoft.com/ru-ru/library/system.security.cryptography.xml.xmldsigexcc14ntransform(v=vs.110).aspx |
|||
44
DES
29.07.16
✎
16:03
|
ДА, строчка получилась та что нужно, а формат стал другой
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |