Форум программистов, компьютерный форум, киберфорум
C#: Веб-сервисы, WCF
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.61/847: Рейтинг темы: голосов - 847, средняя оценка - 4.61
1 / 1 / 0
Регистрация: 16.12.2015
Сообщений: 1
.NET 4.x

Интеграция с ГИС ЖКХ. Подпись SOAP и защита канала по ГОСТ

16.12.2015, 11:46. Показов 175170. Ответов 999

Студворк — интернет-сервис помощи студентам
Здравствуйте!

Передо мной стоит задача интеграции с системой ГИС ЖКХ (https://dom.gosuslugi.ru/) программой, написанной на языке C#, .NET Framework 4
Данный сервис предоставляет SOAP веб-сервисы для приема и передачи информации, соединение защищается сертификатом по алгоритму ГОСТ. Каждый элемент внутри тела SOAP сообщения подписывается сигнатурой XAdES-BES.
На данный момент для осуществления защищённого соединения я использую «МагПро КриптоТуннель» (stunnel) со следующими настройками:
Конфигурация stunnel (stunnel.conf)
verify=2
client=yes
CAFile=CA-test2-cryptopro.pem
engine=gost
usb_eject=yes
sslVersion=TLSv1
taskbar=yes
DEBUG=7

[pseudo-https]
protocol = http
accept = 127.0.0.1:8754
connect = 54.76.42.99:60045
ciphers = GOST2001-GOST89-GOST89
TIMEOUTclose = 0
cert=test.pem
key=test.key

Для обмена SOAP сообщениями я использую стандартный сервис WCF с прокси-классами, сгенерированные из WSDL файлов. Для подписи SOAP сообщений сигнатурой использую ниже представленный класс:
C#. Класс для подписи исходного SOAP сообщения
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
class ServiceClientBehavior : IEndpointBehavior, IClientMessageInspector
{
    public object BeforeSendRequest(ref Message request, IClientChannel channel)
    {
        XmlDocument doc = new XmlDocument();
        MemoryStream ms = new MemoryStream();
        XmlWriter writer = XmlWriter.Create(ms);
        request.WriteMessage(writer);
        writer.Flush();
        ms.Position = 0;
        doc.Load(ms);
        
        SignXml(doc);
        
        ms.SetLength(0);
        writer = XmlWriter.Create(ms);
        doc.WriteTo(writer);
        writer.Flush();
        ms.Position = 0;
        XmlReader reader = XmlReader.Create(ms);
        request = Message.CreateMessage(reader, int.MaxValue, request.Version);
 
        return null;
    }
    
    void SignXml(XmlDocument doc)
    {
        doc.PreserveWhitespace = true;
 
        // Получение элемента из тела сообщения
        var requestNode = doc.DocumentElement.ChildNodes[1].ChildNodes[0];
        var signRequestNode = SignRequest(requestNode);
 
        var body = requestNode.ParentNode;
        body.RemoveChild(requestNode);
        body.AppendChild(signRequestNode);
    }
    XmlNode SignRequest(XmlNode reqNode)
    {
        XmlDocument xmlDoc = new XmlDocument();
        xmlDoc.PreserveWhitespace = true;
        xmlDoc.AppendChild(xmlDoc.ImportNode(reqNode, true));
 
        var signedXml = new SignedXML(xmlDoc);
        signedXml.SigningKey = certificate.PrivateKey;
 
        KeyInfo keyInfo = new KeyInfo();
        keyInfo.AddClause(new KeyInfoX509Data(certificate));
        signedXml.KeyInfo = keyInfo;
 
        signedXml.Signature.Id = "SignatureId";
 
        #region Создание DataObject
        {
            XmlElement SignaturePropertiesRoot;
            XmlElement QualifyingPropertiesRoot;
            string xadesURI = "http://uri.etsi.org/01903/v1.3.2#";
            string dsURI = "http://www.w3.org/2000/09/xmldsig#";
 
            QualifyingPropertiesRoot = xmlDoc.CreateElement("xades", "QualifyingProperties", xadesURI);
            QualifyingPropertiesRoot.SetAttribute("Target", "#SignatureId");
 
            SignaturePropertiesRoot = xmlDoc.CreateElement("xades", "SignedProperties", xadesURI);
            SignaturePropertiesRoot.SetAttribute("Id", "SignedPropertiesId");
 
            XmlElement SignedSignatureProperties = xmlDoc.CreateElement("xades", "SignedSignatureProperties", xadesURI);
 
            XmlElement timestamp = xmlDoc.CreateElement("xades", "SigningTime", xadesURI);
            timestamp.InnerText = XmlConvert.ToString(DateTimeOffset.Now);
            SignedSignatureProperties.AppendChild(timestamp);
 
            XmlElement SigningCertificate = xmlDoc.CreateElement("xades", "SigningCertificate", xadesURI);
            XmlElement Cert = xmlDoc.CreateElement("xades", "Cert", xadesURI);
            XmlElement CertDigest = xmlDoc.CreateElement("xades", "CertDigest", xadesURI);
 
            XmlElement DigestMethod = xmlDoc.CreateElement("ds", "DigestMethod", dsURI); DigestMethod.SetAttribute("Algorithm", "http://www.w3.org/2001/04/xmldsig-more#gostr3411");
            XmlElement DigestValue = xmlDoc.CreateElement("ds", "DigestValue", dsURI); DigestValue.InnerText = ComputeGostHash(this.ClientCertificate.RawData);
            CertDigest.AppendChild(DigestMethod);
            CertDigest.AppendChild(DigestValue);
            Cert.AppendChild(CertDigest);
 
            XmlElement IssuerSerial = xmlDoc.CreateElement("xades", "IssuerSerial", xadesURI);
            XmlElement X509IssuerName = xmlDoc.CreateElement("ds", "X509IssuerName", dsURI); X509IssuerName.InnerText = GetIssuerName(certificate);
            XmlElement X509SerialNumber = xmlDoc.CreateElement("ds", "X509SerialNumber", dsURI); X509SerialNumber.InnerText = GetSerialNumber(certificate);
            IssuerSerial.AppendChild(X509IssuerName);
            IssuerSerial.AppendChild(X509SerialNumber);
            Cert.AppendChild(IssuerSerial);
 
            SigningCertificate.AppendChild(Cert);
            SignedSignatureProperties.AppendChild(SigningCertificate);
 
            SignaturePropertiesRoot.AppendChild(SignedSignatureProperties);
            QualifyingPropertiesRoot.AppendChild(SignaturePropertiesRoot);
            DataObject dataObject = new DataObject
            {
                Data = QualifyingPropertiesRoot.SelectNodes("."),
            };
            signedXml.AddObject(dataObject);
        }
        #endregion
 
        signedXml.SignedInfo.SignatureMethod = "http://www.w3.org/2001/04/xmldsig-more#gostr34102001-gostr3411";
        signedXml.SignedInfo.CanonicalizationMethod = "http://www.w3.org/TR/2001/REC-xml-c14n-20010315";
 
        var reference = new Reference();
        reference.Uri = "#RequestId";
        reference.DigestMethod = "http://www.w3.org/2001/04/xmldsig-more#gostr3411";
        reference.AddTransform(new XmlDsigEnvelopedSignatureTransform());
        reference.AddTransform(new XmlDsigExcC14NTransform());
        signedXml.AddReference(reference);
 
        reference = new Reference();
        reference.Uri = "#SignedPropertiesId";
        reference.DigestMethod = "http://www.w3.org/2001/04/xmldsig-more#gostr3411";
        reference.Type = "http://uri.etsi.org/01903#SignedProperties";
        reference.AddTransform(new XmlDsigEnvelopedSignatureTransform());
        reference.AddTransform(new XmlDsigExcC14NTransform());
        signedXml.AddReference(reference);
 
        signedXml.ComputeSignature();
 
        XmlElement signatureNode = signedXml.GetXml();
        xmlDoc.DocumentElement.PrependChild(xmlDoc.ImportNode(signatureNode, true));
 
        if (!VerifyXml(xmlDoc))
            throw new Exception("Подпись не проходит проверку.");
        return reqNode.OwnerDocument.ImportNode(xmlDoc.DocumentElement, true);
    }
}

В результате после подписи элемента "exportNsiItemRequest" SOAP-сообщение выглядит следующим образом:
XML. Подписанное SOAP сообщение
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
<?xml version="1.0" encoding="utf-8"?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
    <s:Header>
        <Action s:mustUnderstand="1" xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none">urn:exportNsiItem</Action>
        <h:RequestHeader xmlns="http://dom.gosuslugi.ru/schema/integration/7.1.0.2/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:h="http://dom.gosuslugi.ru/schema/integration/7.1.0.2/">
            <Date>2015-12-16T16:12:47.9885439+10:00</Date>
            <MessageGUID>c7a1d946-9fcf-4ebc-9c08-20ebe81179cf</MessageGUID>
            <SenderID>387142bd-4ff7-4d15-ab09-18b3d99fd9bd</SenderID>
        </h:RequestHeader>
    </s:Header>
    <s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
        <exportNsiItemRequest Id="RequestId" xmlns="http://dom.gosuslugi.ru/schema/integration/7.1.0.2/nsi/">
            <Signature Id="SignatureId" 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/2001/04/xmldsig-more#gostr34102001-gostr3411" />
                    <Reference URI="#RequestId">
                        <Transforms>
                            <Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" />
                            <Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
                        </Transforms>
                        <DigestMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#gostr3411" />
                        <DigestValue>fpTlCLCz9/78q4Zpng9eAiCZuaHP51fCXfllN2TeFPw=</DigestValue>
                    </Reference>
                    <Reference URI="#SignedPropertiesId" Type="http://uri.etsi.org/01903#SignedProperties">
                        <Transforms>
                            <Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" />
                            <Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
                        </Transforms>
                        <DigestMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#gostr3411" />
                        <DigestValue>9sBDvpcyxJLVxibQGy280Rz/MlcESescb6k6MEGKreQ=</DigestValue>
                    </Reference>
                </SignedInfo>
                <SignatureValue>...</SignatureValue>
                <KeyInfo>
                    <X509Data>
                        <X509Certificate>...</X509Certificate>
                    </X509Data>
                </KeyInfo>
                <Object>
                    <xades:QualifyingProperties Target="#SignatureId" xmlns:xades="http://uri.etsi.org/01903/v1.3.2#">
                        <xades:SignedProperties Id="SignedPropertiesId">
                            <xades:SignedSignatureProperties>
                                <xades:SigningTime>2015-12-16T16:13:13.4750017+10:00</xades:SigningTime>
                                <xades:SigningCertificate>
                                    <xades:Cert>
                                        <xades:CertDigest>
                                            <ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#gostr3411" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" />
                                            <ds:DigestValue xmlns:ds="http://www.w3.org/2000/09/xmldsig#">B2/4UjEeZwUG0c+mlEfnAZIy8mlbGpkOp4L+jPkgcVY=</ds:DigestValue>
                                        </xades:CertDigest>
                                        <xades:IssuerSerial>
                                            <ds:X509IssuerName xmlns:ds="http://www.w3.org/2000/09/xmldsig#">cn=CRYPTO-PRO Test Center 2,o=CRYPTO-PRO LLC,l=Moscow,c=RU,1.2.840.113549.1.9.1=support@cryptopro.ru</ds:X509IssuerName>
                                            <ds:X509SerialNumber xmlns:ds="http://www.w3.org/2000/09/xmldsig#">401416565317479933092244230678231137456309019</ds:X509SerialNumber>
                                        </xades:IssuerSerial>
                                    </xades:Cert>
                                </xades:SigningCertificate>
                            </xades:SignedSignatureProperties>
                        </xades:SignedProperties>
                    </xades:QualifyingProperties>
                </Object>
            </Signature>
            <RegistryNumber>221</RegistryNumber>
        </exportNsiItemRequest>
    </s:Body>
</s:Envelope>

Проблема заключается в том, что ответ от сервера приходит следующий:
ru.lanit.security.crypto.CryptoException : ЭП не прошла проверку: Invalid XML Signature
Текст ответного сообщения следующий:
XML. SOAP-ответ от сервера
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
<soap:Envelope xmlns:ns2="http://dom.gosuslugi.ru/schema/integration/7.1.0.2/" xmlns:ns3="http://www.w3.org/2000/09/xmldsig#" xmlns:ns5="http://dom.gosuslugi.ru/schema/integration/7.1.0.2/nsi/" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
    <soap:Header>
        <ns2:ResultHeader>
            <ns2:Date>2015-12-16T09:14:28.819+03:00</ns2:Date>
            <ns2:MessageGUID>c7a1d946-9fcf-4ebc-9c08-20ebe81179cf</ns2:MessageGUID>
        </ns2:ResultHeader>
    </soap:Header>
    <soap:Body>
        <ns5:exportNsiItemResult Id="signed-data-container">
            <ds:Signature Id="xmldsig-3208628d-03cc-4576-895d-ea6d78b1b6dd" xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
                <ds:SignedInfo>
                    <ds:CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" />
                    <ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#gostr34102001-gostr3411" />
                    <ds:Reference URI="#signed-data-container">
                        <ds:Transforms>
                            <ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" />
                            <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
                        </ds:Transforms>
                        <ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#gostr3411" />
                        <ds:DigestValue>iqCeIlUfsqxdZRuMTjvYKWBTVOtSNrJIYledBG8LrWA=</ds:DigestValue>
                    </ds:Reference>
                    <ds:Reference Type="http://uri.etsi.org/01903#SignedProperties" URI="#xmldsig-3208628d-03cc-4576-895d-ea6d78b1b6dd-signedprops">
                        <ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#gostr3411" />
                        <ds:DigestValue>yASmvpbUBqEPr1Vp+qzYjXhzzXymC9ggqUZZ8GbBVkI=</ds:DigestValue>
                    </ds:Reference>
                </ds:SignedInfo>
                <ds:SignatureValue>...</ds:SignatureValue>
                <ds:KeyInfo>
                    <ds:X509Data>
                        <ds:X509Certificate>...</ds:X509Certificate>
                    </ds:X509Data>
                </ds:KeyInfo>
                <ds:Object>
                    <xades:QualifyingProperties Target="#xmldsig-3208628d-03cc-4576-895d-ea6d78b1b6dd" xmlns:xades="http://uri.etsi.org/01903/v1.3.2#">
                        <xades:SignedProperties Id="xmldsig-3208628d-03cc-4576-895d-ea6d78b1b6dd-signedprops">
                            <xades:SignedSignatureProperties>
                                <xades:SigningTime>2015-12-16T09:14:28.870+03:00</xades:SigningTime>
                                <xades:SigningCertificate>
                                    <xades:Cert>
                                        <xades:CertDigest>
                                            <ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#gostr3411" />
                                            <ds:DigestValue>Sz5+eJyswooXj8h3A5bhMbPG61QPExSKXuw+ZLzyeQ8=</ds:DigestValue>
                                        </xades:CertDigest>
                                        <xades:IssuerSerial>
                                            <ds:X509IssuerName>cn=CRYPTO-PRO Test Center 2,o=CRYPTO-PRO LLC,l=Moscow,c=RU,1.2.840.113549.1.9.1=support@cryptopro.ru</ds:X509IssuerName>
                                            <ds:X509SerialNumber>401416477754091206680439394611221196150735163</ds:X509SerialNumber>
                                        </xades:IssuerSerial>
                                    </xades:Cert>
                                </xades:SigningCertificate>
                            </xades:SignedSignatureProperties>
                        </xades:SignedProperties>
                    </xades:QualifyingProperties>
                </ds:Object>
            </ds:Signature>
            <ns2:ErrorMessage>
                <ns2:ErrorCode>AUTH01105</ns2:ErrorCode>
                <ns2:Description>Ошибка формата подписи запроса</ns2:Description>
                <ns2:StackTrace>ru.lanit.hcs.integration.common.exception.OperationProcessorException: ЭП не прошла проверку: Invalid XML Signature</ns2:StackTrace>
            </ns2:ErrorMessage>
        </ns5:exportNsiItemResult>
    </soap:Body>
</soap:Envelope>


Подскажите пожалуйста:
1) Как сделать валидную подпись, которая будет проходить проверку сервером, используя WCF ?
2) Как с помощью средств CryptoPro.NET отказаться от использования «МагПро КриптоТуннель» ?
1
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.12.2015, 11:46
Ответы с готовыми решениями:

Интеграция с ГИС ЖКХ. Подпись SOAP и защита канала по ГОСТ (3)
Предыдущая тема: https://www.cyberforum.ru/web-services-wcf/thread1776736.html Кто нибудь знает откуда брать справочники NsiRef по...

Интеграция с ГИС ЖКХ. Подпись SOAP и защита канала по ГОСТ (5)
Предыдущая тема: https://www.cyberforum.ru/web-services-wcf/thread1840159.html И так мы Я и umatkot, Берёмся за реализацию всего этого...

Интеграция с ГИС ЖКХ. Подпись SOAP и защита канала по ГОСТ (4)
Предыдущая тема: https://www.cyberforum.ru/web-services-wcf/thread1800721.html Здравствуйте. Подскажите, пожалуйста: делаю getState...

999
 Аватар для NaGuWaL
17 / 14 / 0
Регистрация: 22.04.2016
Сообщений: 287
30.05.2016, 09:19
Студворк — интернет-сервис помощи студентам
umatkot, Благодарю вас.

Добавлено через 1 минуту
loot hoarder, Должно быть так.... exportOrgRegistryRequest.Id = "signed-data-container";

Добавлено через 11 минут
У ланита опять критические дни,
C#
1
EXP001000: Внутренняя ошибка
? Опять тестовый стенд тот который 54.76.42.99:60045, не работает(((
0
0 / 0 / 0
Регистрация: 26.03.2016
Сообщений: 51
30.05.2016, 09:40
Цитата Сообщение от hhmm Посмотреть сообщение
Возможно сертификат установлен, но соответствующий ему закрытый ключ не доступен.
Так и было, закрытый ключ был недоступен

Цитата Сообщение от NaGuWaL Посмотреть сообщение
Опять тестовый стенд тот который 54.76.42.99:60045, не работает(((
Похоже, у меня та же ошибка
0
 Аватар для NaGuWaL
17 / 14 / 0
Регистрация: 22.04.2016
Сообщений: 287
30.05.2016, 11:15
кто знает эндпоинт по выгрузке в ланит файлов...?

Добавлено через 1 час 26 минут
перефразирую... Кто знает как залимать документы на тестовые сервера ГИС ЖКХ? Через WebHttpRequest или каким-то иным, более Волшебным способом?
0
6 / 6 / 0
Регистрация: 24.12.2015
Сообщений: 41
30.05.2016, 11:19
NaGuWaL, в методических рекомендациях и в альбоме ТФФ описано. Грузится через REST на адрес https://54.76.42.99:60045 или https://217.107.108.147:10081 в зависимости от стенда
0
 Аватар для hhmm
67 / 58 / 1
Регистрация: 01.04.2016
Сообщений: 346
30.05.2016, 11:51
Цитата Сообщение от NaGuWaL Посмотреть сообщение
Опять тестовый стенд тот который 54.76.42.99:60045, не работает(((
Судя по данным вот этого сайта адрес 54.76.42.99 находится в США.
Поможе, что это ферма Амазона, о чем говорит приезжающий с сервера сертификат (см. в приложении).

Таким образом наши 'партнеры' из Ланита при помощи тестового стенда
все тщательно зашифрованные по ГОСТ данные сливают нашим зарубежным 'партнерам' за океан.



Сейчас в США ночь, ведутся регламентные работы.
Вложения
Тип файла: zip sit2.amazon-14.01.2016.cer.zip (1.7 Кб, 9 просмотров)
0
 Аватар для hhmm
67 / 58 / 1
Регистрация: 01.04.2016
Сообщений: 346
30.05.2016, 12:29
Возник очередной вопрос:

В пятницу для регистрации на рабочем сервере выполнил ритуальные приседания на СИТ2, результаты упражнений записал в файлы, отправил в саппорт.
Сегодня прислали положительный ответ.

В ответе список конечных точек, которые не совпадают с конечными точками генерируемыми утилитой.
Получается, что файл генерируемый утилитой можно сразу выкидывать на помойку и составлять файл конфигурации руками.

В присланном списке вроде как есть ошибки:

Прислано:
Сервис обмена сведениями о поставщиках информации
https://api.dom.gosuslugi.ru/e... rgRegistry

при попытке дернуть exportOrgRegistry получаем There was no endpoint listening at https://api.dom.gosuslugi.ru/e... rgRegistry that could accept the message

Но эту конечную точку удалось подобрать по аналогии с тестовым стендом, если взять адрес https://api.dom.gosuslugi.ru/e... stryCommon
то получаем нормальный ответ.


Так же есть проблема с конечной точкой для exportDataProvider, при вызове на присланной
возвращает ошибку INT002012 - Нет объектов для экспорта.

Хотя эти методы на тестовом стенде находятся на одной конечной точке.


Пока подозреваю, что на рабочем сервере регистрация нового участника проходит так же криво как и на тестовом.



Может кто-нибудь кинуть рабочую конечную точку для exportDataProvider на ППАК?
0
 Аватар для NaGuWaL
17 / 14 / 0
Регистрация: 22.04.2016
Сообщений: 287
30.05.2016, 16:46
делаю следующее:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
            var url = new Uri($"http://127.0.0.1:8080");
            var sstr = @"D:\Downloads\oplodd.doc";
 
 
 
            using (var fileContent = new FileStream(sstr, FileMode.Open))
            using (var client = new HttpClient())
            {
                
                var flen = fileContent.Length;
                byte[] xx;
                using (var md5 = MD5.Create())
                {
                    xx = md5.ComputeHash(fileContent);
                }
                var culture = new CultureInfo("en-US");
                var today = DateTime.Now.ToString("ddd,' 'dd' 'MMM' 'yyyy' 'HH':'mm':'ss' 'K", culture);
                var rr = new FileInfo(sstr);
                var content = new StreamContent(fileContent);
                //content.Headers.Add("Host", "127.0.0.1:8080");
                //content.Headers.Add("Host", "127.0.0.1:8080");
                content.Headers.ContentType = new MediaTypeHeaderValue(MIMEAssistant.GetMIMEType(sstr));
 
                content.Headers.ContentLength = flen;
                content.Headers.ContentMD5 = xx;
                content.Headers.Add("X-Upload-Dataprovider", "C132AFE2-63D5-4F1C-B52F-44D78C15C0CE");
                content.Headers.Add("X-Upload-Filename", rr.Name);
                client.BaseAddress = url;
                
 
                var response =
                     client.PutAsync($"/ext-bus-file-store-service/rest/{home}/", content);
 
                var rrm = response.Result.Content.ReadAsStringAsync();
 
                Console.WriteLine(rrm);
                Console.Read();
получаю ответ : X-Upload-Error: DataProviderValidationException

кто сталкивался? Подскажите что не так?
1
0 / 0 / 0
Регистрация: 26.03.2016
Сообщений: 51
31.05.2016, 07:12
Опять что-то с сервером 54.76.42.99:60046? При любом запросе отвечает мне: "FMT001300: Некорректный XML".
0
187 / 100 / 19
Регистрация: 15.09.2011
Сообщений: 801
31.05.2016, 07:29
hhmm, это просто майкрософтовские облака Azure. Мы же ничего не шифруем, а подписываем, да и данных там важных по особому счёту нет.
0
0 / 0 / 0
Регистрация: 26.03.2016
Сообщений: 51
31.05.2016, 07:38
В общем вышло обновление 8.7.2.2, будьте внимательны
0
 Аватар для NaGuWaL
17 / 14 / 0
Регистрация: 22.04.2016
Сообщений: 287
31.05.2016, 08:11
hhmm, hhmm, Обновил...
Вот то что просил -
Вложения
Тип файла: zip Reference.zip (7.1 Кб, 36 просмотров)
0
0 / 0 / 0
Регистрация: 26.05.2016
Сообщений: 2
31.05.2016, 09:49
Подскажите, а где можно посмотреть рабочий пример работы по отправке - получению данных?
Или поделитесь, кому не жалко...
0
 Аватар для NaGuWaL
17 / 14 / 0
Регистрация: 22.04.2016
Сообщений: 287
31.05.2016, 10:22
Обновили стенд, и ВОТ:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Ошибка формата подписи запроса:AUT011005:ru.lanit.hcs.integration.common.excepti
on.OperationProcessorException: ЭП не прошла проверку: OCSP server returned stat
us 2
        at ru.lanit.hcs.integration.common.spring.service.impl.ValidationService
Impl.validateSignatureItself(ValidationServiceImpl.java:162)
        at ru.lanit.hcs.integration.common.spring.service.impl.ValidationService
Impl.validateSignature(ValidationServiceImpl.java:112)
        at ru.lanit.hcs.integration.common.spring.mdp.OperationProcessorInvokerM
DP.process(OperationProcessorInvokerMDP.java:279)
        at ru.lanit.hcs.integration.common.spring.mdp.OperationProcessorInvokerM
DP.internalOnMessage(OperationProcessorInvokerMDP.java:173)
        at ru.lanit.hcs.integration.common.spring.mdp.OperationProcessorInvokerM
DP.onMessage(OperationProcessorInvokerMDP.java:85)
        at org.springframework.jms.listener.AbstractMessageListenerContainer.doI
nvokeListener(AbstractMessageListenerContainer.java:699)
        at org.springframework.jms.listener.AbstractMessageListenerContainer.inv
okeListener(AbstractMessageListenerContainer.java:637)
...
Добавлено через 1 минуту
zelifax, на 27ой выложено https://www.cyberforum.ru/atta... 1464304794
0
 Аватар для hhmm
67 / 58 / 1
Регистрация: 01.04.2016
Сообщений: 346
31.05.2016, 10:31
Цитата Сообщение от NaGuWaL Посмотреть сообщение
Вот то что просил -
Спасибо, хотя это не то, о чем я спрашивал.
Я спрашивал о верном адресе конечной точки на ППАК (т.е. одну строчку вида: https://api.dom.gosuslugi.ru/e... stryCommon).

При регистрации на рабочем сервере одну из рабочих точек ППАК прислали: https://api.dom.gosuslugi.ru/e... rgRegistry

Ее там нет.

По аналогии с тестовым стендом, изменив окончание ссылки, удалось подобрать вроде как верную конечную точку: https://api.dom.gosuslugi.ru/e... stryCommon

На ней успешно дергается метод exportOrgRegistry , но метод exportDataProvider, при вызове возвращает ошибку INT002012 - Нет объектов для экспорта.

Вчера вечером удалось выгрузить wsdl этой конечной точки c рабочего сервера - там метод exportDataProvider есть.

Делаю вывод - регистрация на ППАК выполнена криво.
Написал письмо в саппорт - он молчит.

Сегодня на ППАК на любой вызов заканчивается "FMT001300: Некорректный XML"
0
 Аватар для NaGuWaL
17 / 14 / 0
Регистрация: 22.04.2016
Сообщений: 287
31.05.2016, 10:45
hhmm, А с подписью сообщений всё нормально? Я ничего не менял... а тестовый стенд меня шлёт лесом именно тогода когда я запускаю механизм подписи сообщений... вырубаю - всё нормально....
0
 Аватар для hhmm
67 / 58 / 1
Регистрация: 01.04.2016
Сообщений: 346
31.05.2016, 10:51
Цитата Сообщение от NaGuWaL Посмотреть сообщение
Я ничего не менял... а тестовый стенд меня шлёт лесом именно тогода когда я запускаю механизм подписи сообщений... вырубаю - всё нормально
Я тоже ничего не менял.
Так судя по сообщению
Цитата Сообщение от NaGuWaL Посмотреть сообщение
ЭП не прошла проверку: OCSP server returned status 2
у сервера проблемы с тем, что он не может проверить списки отзыва сертификата, поэтому ничего не хочет делать.

https://en.wikipedia.org/wiki/... s_Protocol
0
 Аватар для NaGuWaL
17 / 14 / 0
Регистрация: 22.04.2016
Сообщений: 287
31.05.2016, 11:15
+ не могу разобраться как залить файлы... пробую через HttpClient
вот пример:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
        public async Task<string> HttpPut(string url, string fPatch)
        {
            var rr = new FileInfo(fPatch);
 
            using (var client = new HttpClient())
            {
                var stream = File.OpenRead(fPatch);
                var md = MD5.Create().ComputeHash(stream);
                using (var content = new StreamContent(stream))
                {
                    content.Headers.Remove("Content-Type");
                    content.Headers.Add("Content-Type", "application/octet-stream");
                    content.Headers.ContentMD5 = md;
                    content.Headers.Add("X-Upload-Dataprovider", "C132AFE2-63D5-4F1C-B52F-44D78C15C0CE");
                    content.Headers.Add("X-Upload-Filename", rr.Name);
 
                    using (var req = new HttpRequestMessage(HttpMethod.Put, $"{url}/ext-bus-file-store-service/rest/{home}/"))
                    {
                        var auth = Encoding.ASCII.GetBytes("[test]:[SDldfls4lz5@!82d]");
                        var authI = Convert.ToBase64String(auth);
                        req.Headers.Authorization = new AuthenticationHeaderValue("Basic",authI);
                        req.Headers.Remove("Expect");
                        req.Headers.Add("Expect", "");
 
                        req.Content = content;
                        ServicePointManager.ServerCertificateValidationCallback = ((sender, certificate, chain, sslPolicyErrors) => true);
 
                        using (var resp = await client.SendAsync(req))
                        {
                            try
                            {
                                resp.EnsureSuccessStatusCode();
 
                                return await resp.Content.ReadAsStringAsync();
                            }
                            catch (Exception ex)
                            {
                                Console.WriteLine(ex.Message);
                                return null;
                            }
 
                        }
 
                    }
                }
            }
        }
    }
черес тунель пишет Bat Gataway а при прямом подключении тупо не авторезует... На прямую пробую сюда : http://54.76.42.99:60046
через тоннель 54.76.42.99:60045, на стандартный айпи http://127.0.0.1:8080

Добавлено через 3 минуты
hhmm, Молодцы поцоны из Ланита... Они хорошо работают... Качественно... А завтра 1ое... и по идее всё должно быть готово на 99% а у нас если до 40 дотягивает то это просто Замечательно...

Добавлено через 2 минуты
hhmm, По мимо этого пытаюсь зангнать файл из фидлера... Но, увы, всё чётно...

Добавлено через 59 секунд
PUT http://127.0.0.1:8080/ext-bus-... anagement/ HTTP/1.1

Content-Type: application/msword
Host: 127.0.0.1:8080
Date: Mon, 30 May 2016 16:22:32 GMT
Content-Length: 46424
Content-MD5: t+8gQAvaLeu6InaJ/OhPFQ==
X-Upload-Dataprovider: C132AFE2-63D5-4F1C-B52F-44D78C15C0CE
X-Upload-Filename: oplodd.doc
0
 Аватар для hhmm
67 / 58 / 1
Регистрация: 01.04.2016
Сообщений: 346
31.05.2016, 11:43
Цитата Сообщение от NaGuWaL Посмотреть сообщение
Качественно... А завтра 1ое... и по идее всё должно быть готово на 99%
Первого числа рухнет все:

Не по теме:


Генеральский эффект или закон подлости


...
Если в течении жизни, у человека присутствовал похожий опыт, то он скорее всего произошедшее негативное событие спишет на закономерность и посчитает его законом подлости, что не позволит ему увидеть собственных ошибок. Закрепление этой мысли, приведет к безразличию к своим результатам и появлению большего числа ошибок.
...

0
0 / 0 / 0
Регистрация: 26.03.2016
Сообщений: 51
31.05.2016, 11:51
Кто-нибудь может показать работающий кусок с подписью запросов в WCF? У меня пишет "ЭП не прошла проверку: Invalid XML Signature".
Подписываю сообщение в ClientMessageInspector следующим способом:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
private Message GetSignRequest(MessageBuffer oldMessageBuffer, string elemId)
        {
            Message oldMessage = oldMessageBuffer.CreateMessage();
            Message newMessage = null;
 
            MessageBuffer msgbuf = oldMessage.CreateBufferedCopy(int.MaxValue);
 
            Message tmpMessage = msgbuf.CreateMessage();
            XmlDictionaryReader xdr = tmpMessage.GetReaderAtBodyContents();
 
            XmlDocument xdoc = new XmlDocument();
            xdoc.Load(xdr);
            xdr.Close();
 
            GostXadesBesService xadesBesService = new GostXadesBesService();
 
            var signedString = xadesBesService.Sign(xdoc.OuterXml, elemId, <тут отпечаток подписи>, <пароль>);
            xdoc.LoadXml(signedString);
 
            MemoryStream ms = new MemoryStream();
            XmlWriter xw = XmlWriter.Create(ms);
            xdoc.Save(xw);
            xw.Flush();
            xw.Close();
 
            ms.Position = 0;
            XmlReader xr = XmlReader.Create(ms);
 
            var newMessageBuf = Message.CreateMessage(oldMessage.Version, null, xr).CreateBufferedCopy(int.MaxValue);
            newMessage = newMessageBuf.CreateMessage();
            newMessage.Headers.CopyHeadersFrom(oldMessage);
            newMessage.Properties.CopyProperties(oldMessage.Properties);
 
            return newMessage;
        }
GostXadesBesService из демонстрационного проекта гис
0
 Аватар для hhmm
67 / 58 / 1
Регистрация: 01.04.2016
Сообщений: 346
31.05.2016, 12:08
Цитата Сообщение от SG13 Посмотреть сообщение
У меня пишет "ЭП не прошла проверку: Invalid XML Signature"
Сегодня наверно у всех так.

Отложите работу с ГИС ЖКХ на завтра, а сегодня займитесь чем-то более жизнеутверждающим
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
31.05.2016, 12:08

.NET 4.x Интеграция с ГИС ЖКХ. Подпись SOAP и защита канала по ГОСТ (2)
Начало темы здесь: https://www.cyberforum.ru/web-services-wcf/thread1615223.html umatkot, Да, к этому и пришел....а на дворе 1 июля ...

Интеграция с ГИС ЖКХ и подпись SOAP без Крипто .NET и stunnel
Решил создать отдельную тему, так как в теме Интеграция с ГИС ЖКХ. Подпись SOAP и защита канала по ГОСТ (4) - C# WCF уже можно заблудиться....

Soap, Java, Гис ЖКХ
Добрый день! Имеет ли кто опыт работы с soap в Java? Поставлена задача наладить работу с ГИС ЖКХ, До этого не работал с SOAP, почитал все...

1С и ГИС ЖКХ. Интеграция
Доброго дня, коллеги! Я думаю многие слышали о такой ГИС, как ЖКХ. Друзья, сталкивался ли кто нибудь с задачей интеграции с этой...

Интеграция с ГИС ЖКХ (ГЖ). 400 Bad request
Вводная: 1. C#. Классы proxy для работы с API генерятся утилитой SvcUtil.exe из wsdl-ек. 2. При срабатывании форматно-логического...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
560
Закрытая тема Создать тему
Новые блоги и статьи
Жизня: рисунок укладки багажа, сделанный клодом
anaschu 21.08.2026
Сделал 15 снимков, он по снимкам сделал схему.
Был там один разговор по поводу свободы в материальном мире.
kumehtar 19.08.2026
Суть: рассматривается живое существо, оказавшееся внутри довольно странной системы (этого мира) и пытающееся обустроить в ней свой кусок пространства. Жизнь действительно предъявляет каждому. . .
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
Лето уходит
kumehtar 17.08.2026
Мысли в слух
kumehtar 17.08.2026
Забавно, насколько сейчас стала доступна информация. Например о магии, духовном развитии, медитациях, и других подобных направлениях, ранее зачастую тайных, передаваемых от учителя к ученику. Хотя. . .
Перемещение строк из ТЧ в другой документ с учетом текущего пробега
Maks 17.08.2026
Реализация из решения ниже выполнена на примере нетипового документа "Автозапчасти", с ТЧ "Шины". За основу взят алгоритм отсюда: https:/ / www. cyberforum. ru/ blogs/ 359708/ 10838. html Задача: . . .
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru