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

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

16.12.2015, 11:46. Показов 175008. Ответов 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
16 / 15 / 1
Регистрация: 18.04.2016
Сообщений: 82
22.04.2016, 13:01
Студворк — интернет-сервис помощи студентам
slavakaryakin, Носом не ткнете? Ошибка при вызове
proxy.exportDataProvider(header, req, out res);

C#
1
2
3
4
5
6
7
8
9
10
        public dom.gosuslugi.schema.integration.ResultHeader exportDataProvider(dom.gosuslugi.schema.integration.HeaderType ISRequestHeader, dom.gosuslugi.schema.integration.exportDataProviderRequest exportDataProviderRequest, out dom.gosuslugi.schema.integration.exportDataProviderResult exportDataProviderResult)
        {
//Тут ошибка:          
dom.gosuslugi.schema.integration.exportDataProviderRequest1 inValue = new dom.gosuslugi.schema.integration.exportDataProviderRequest1();
            inValue.ISRequestHeader = ISRequestHeader;
            inValue.exportDataProviderRequest = exportDataProviderRequest;
            dom.gosuslugi.schema.integration.exportDataProviderResponse retVal = ((dom.gosuslugi.schema.integration.RegOrgPortsType)(this)).exportDataProvider(inValue);
            exportDataProviderResult = retVal.exportDataProviderResult;
            return retVal.ResultHeader;
        }
Что почитать для развития?
0
6 / 5 / 0
Регистрация: 10.03.2015
Сообщений: 58
22.04.2016, 13:03
У нас интеграционная шина от SAP.
0
0 / 0 / 0
Регистрация: 29.03.2016
Сообщений: 3
22.04.2016, 13:15
foxwizard

исключение у вас возникает, по-видимому, при вызове .exportDataProvider(inValue);
нужно глубже лезть в либу
сервер возвращает ошибку 400 в хедере и там сразу исключение генерится. А нужно выходной поток из ответа прочитать, там есть информация.
так то, по тексту, надо в retVal смотреть, но у вас он, скорее всего, не заполняется
0
1 / 1 / 1
Регистрация: 23.03.2016
Сообщений: 20
22.04.2016, 13:21
Цитата Сообщение от umatkot Посмотреть сообщение
Ты пытаешься через app.config прописать привязку напрямую - криптотуннель тут ни при чём. Его назначение - работать с https, а на сторону программы или систему выдавать http - чтобы было проще тестировать и подключаться из ущербных систем. У тебя прав нет потому, что ты не произвёл работу со всеми сертификатами, которые вываливаются при подключении через браузер - в частности это амазоновский сертификат. Чтобы обойти криптотуннель в Visual Studio попробуй добавить webReference на любой сервис с адресом - 54.76.42.99:60045. У тебя GUI VS запросит сертификат и запросит разрешения и подтверждения. Нужно установить все вывалившиеся сертификаты и построить цепочки доверия. Хоть люди и пишут, что вроде в app.config выставляется игнорирование проверки цепочки и имени самого сертификата сервера, то внутренний браузер, через который осуществляется привязка может не хранить твой закрытый ключ и пароль от него. Поэтому вываливается данное сообщение. Я настраивал всё на работе - у меня само заработало. А попытался дома - вывалилось тоже самое. Я криптотуннель дома вообще не ставил, а только установил транспортный сертификат в хранилище и КриптоПро. После того, как я помучил WebReference - соединение задымилось и пошло)))
Добавил сертификат от амазон в доверенные корневые центры, все равно не удалось установить доверительные отношения
0
 Аватар для hhmm
67 / 58 / 1
Регистрация: 01.04.2016
Сообщений: 346
22.04.2016, 21:29
Цитата Сообщение от Araney Посмотреть сообщение
С точки зрения wcf у ГИС не асинхронные сервисы, а обычные синхронные (даже те, которые названы асинхронными). Только в ответ получаешь MessageGUID, который потом через метод getState проверяешь.
Тогда скорей всего получается, что показанный мной выше пример запроса написан правильно, а проблема в кривой конечной точке:

XML
1
2
3
          <endpoint address="http://54.76.42.99:60045/ext-bus-nsi-service/services/NsiAsync/"
              binding="basicHttpBinding" bindingConfiguration="NsiBindingAsync"
              contract="GosUslugiWsdlWrapper.NsiPortsTypeAsync" name="NsiPortAsync" />
Я почему хотел попробовать асинхронные вызовы: где-то в конце альбома ТФФ написано

Не по теме:

поправка, нашел: Альбом ТФФ v.8.7.0.4.docx размером 156 Kb, раздел 2.1.10 Сервис обмена сведениями об оплате и квитировании (hcs-payments)

, что

Веб-сервис обмена сведениями об оплате и квитировании доступен только в асинхронной реализации
вот и решил попробовать
0
1 / 1 / 1
Регистрация: 12.03.2015
Сообщений: 12
25.04.2016, 00:16
Цитата Сообщение от Araney Посмотреть сообщение
В теме вроде уже упоминали. У тестовых СИТ сертификаты не валидны. Надо отключить проверку. Например в app.config добавить:
XML
1
2
3
4
5
6
7
  <system.net>
    <settings>
      <servicePointManager
      checkCertificateName="false"
      checkCertificateRevocationList="false"/>
    </settings>
  </system.net>
Подскажите, как отключить проверку. Или решить проблему с не валидными сертификатами. Выше приведённый код в App.config не помогает.
"SecurityNegotiationException:.... Could not establish trust relationship for the SSL/TLS secure channel. ... AutentificationException: The remote sertificate is invalid according to the validation procedure."
0
187 / 100 / 19
Регистрация: 15.09.2011
Сообщений: 801
25.04.2016, 02:12
Цитата Сообщение от СВиктор Посмотреть сообщение
Добавил сертификат от амазон в доверенные корневые центры, все равно не удалось установить доверительные отношения
Окно выбра сертификата в WebReference появлялось? Нужно, чтобы выскочило окно, затем выбираешь свой транспортный сертификат. Затем вводишь свой пароль от контейнера транспортного сертификата и ставишь галку "сохранить пароль". Надо мучить эту WebReference и проверять коннект - на каком-то этапе запросы начинают проходить.
0
1 / 1 / 0
Регистрация: 02.04.2016
Сообщений: 2
25.04.2016, 04:39
Цитата Сообщение от Consider Посмотреть сообщение
Подскажите, как отключить проверку. Или решить проблему с не валидными сертификатами. Выше приведённый код в App.config не помогает.
"SecurityNegotiationException:.... Could not establish trust relationship for the SSL/TLS secure channel. ... AutentificationException: The remote sertificate is invalid according to the validation procedure."
Иногда помогает от такой ошибки переустановка всего семейства КриптоПро

Цитата Сообщение от hhmm Посмотреть сообщение
Хотелось бы узнать, получилось ли у кого-нибудь дернуть асинхронные службы на СИТ.
Чувак ты запостил кучу кода, но не написал какие SOAP-сообщения ты отправляешь. Под твоими BeginexportNsiList и EndexportNsiList может скрываться все что угодно.
Мне достаточно было отправить свой запрос, получить идентификатор своего сообщения, а потом через некоторое время получить свой результат с помощью getState()
0
187 / 100 / 19
Регистрация: 15.09.2011
Сообщений: 801
25.04.2016, 10:43
Цитата Сообщение от DKrasilnikov Посмотреть сообщение
Написал в техподдержку Trusted Java, попросил триальную лицензию для ознакомления с продуктом. В этот же день прислали триальный ключ на 1 месяц.
Ты уже проверил эту программу? Работает? Я что-то пытаюсь запустить как signature-demo -list
то мне выплёвывает Exception in thread "main" java.lang.UnsatisfiedLinkError: no djcp20 in java.library.path
можешь у себя глянуть, она есть у тебя в библиотеках JRE или JDK?

Добавлено через 2 часа 37 минут
А, всё, разобрался с signature-demo - нужно было просто посносить с системы все java и установить последнюю.
Я вот что заметил - если я подписываю простой запрос xml (exportDataProvider) просто через signature-demo - то потом проверка проходит, а если проверяю подпись с самого стенда, то там сначала вывалился сертификат корневой - установил, и проверка ихних подписей всё равно не проходит!!! У них неправлильно подписывает что-ли? Кто-нибудь проверял ответы от ГИС ЖКХ (тестового СИТ)?
0
 Аватар для hhmm
67 / 58 / 1
Регистрация: 01.04.2016
Сообщений: 346
25.04.2016, 15:52
Цитата Сообщение от Alamzhi Посмотреть сообщение
Чувак ты запостил кучу кода, но не написал какие SOAP-сообщения ты отправляешь.
На данном этапе развития я сам никаких сообщений не отправляю, а использую для их отправки прокси класс сгенерированный утилитой svcutil.exe как здесь было предложено на четвертой или пятой странице.

Т.е. первым шагом я написал маленький bat файл export.bat для генерации прокси класса:
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
@echo off
cls
 
set input1=.\hcs_wsdl_xsd_v.8.7.0.4\*.wsdl
set input2=.\hcs_wsdl_xsd_v.8.7.0.4\*.xsd
set output=/out:.\GosUslugiWsdlWrapper 
set output_config=/config:GosUslugiWsdlWrapper
set output_namespace=/namespace:*,GosUslugiWsdlWrapper
rem set params=/messageContract  /targetClientVersion:Version35 /async /language:C#  /enableDataBinding
set params= /targetClientVersion:Version35 /async /language:C#  /enableDataBinding
 
"C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\svcutil.exe" %input1% %input2% %output% %output_namespace% %output_config% %params%
он создает два файла:
  • GosUslugiWsdlWrapper.cs - набор прокси классов для вызовов web-сервисов
  • GosUslugiWsdlWrapper.config - файл конфигурации для WCF с биндингами и конечными точками

Из второго файла я выцепляю необходимые конечные точки и биндинги и скармливаю их экземплярам классов из первого файла. Как там внутри микрософт создает сообщения я пока не заглядывал.
0
1 / 1 / 0
Регистрация: 02.04.2016
Сообщений: 2
25.04.2016, 16:56
Цитата Сообщение от hhmm Посмотреть сообщение
На данном этапе развития я сам никаких сообщений не отправляю, а использую для их отправки прокси класс сгенерированный утилитой svcutil.exe как здесь было предложено на четвертой или пятой странице.
Ну хорошо, не вы, а ваш прокси-класс отправляет сообщения. Записывайте их в лог инспектором в BeforeSendRequest, на худой конец, перехватывайте httpanalyzer'ом

Цитата Сообщение от hhmm Посмотреть сообщение
я написал маленький bat файл export.bat для генерации прокси класса
Если вам так нравятся батники, то @ndbn уже давно написал
Windows Batch file
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
@echo off
chcp 65001>nul
setlocal enabledelayedexpansion
 
:defaultconfig
set SVCUTIL="C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools\SvcUtil.exe"
set OUTDIR=out
 
if not exist %OUTDIR% ( 
    echo Создание каталога %OUTDIR%
    mkdir %OUTDIR%
)
 
if exist %OUTDIR%\*.* (
    echo Очистка каталога %OUTDIR%
    del /S /Q %OUTDIR%\*.*
)
 
call :genFile Bills bills
call :genFile DeviceMetering device-metering
call :genFile Disclosure disclosure
call :genFile Fas fas
call :genFile HouseManagement house-management
call :genFile Infrastructure infrastructure
call :genFile Inspection inspection
call :genFile Licenses licenses
call :genFile NsiCommon nsi-common
call :genFile Nsi nsi
call :genFile OrganizationsRegistryCommon organizations-registry-common
call :genFile OrganizationsRegistry organizations-registry
call :genFile Payment payment
call :genFile Services services
 
:exit
exit /b 0
 
:genFile
::%1 - ServiceName
::%2 - Service file part name
 
if exist hcs-%2-service-?.?.?.?.wsdl (
    %SVCUTIL% hcs-%2-service-?.?.?.?.wsdl *.xsd /mc /syncOnly /directory:out /noConfig /noLogo /n:*,Gis.%1Service /out:%1Service.cs
)
 
if exist hcs-%2-service-async-?.?.?.?.wsdl (
   %SVCUTIL% hcs-%2-service-async-?.?.?.?.wsdl *.xsd /mc /syncOnly /directory:out /noConfig /noLogo /n:*,Gis.%1Service.Async /out:%1ServiceAsync.cs
) 
 
exit /b 0
1
1 / 1 / 1
Регистрация: 12.03.2015
Сообщений: 12
25.04.2016, 22:29
Цитата Сообщение от umatkot Посмотреть сообщение
Окно выбра сертификата в WebReference появлялось? Нужно, чтобы выскочило окно, затем выбираешь свой транспортный сертификат. Затем вводишь свой пароль от контейнера транспортного сертификата и ставишь галку "сохранить пароль". Надо мучить эту WebReference и проверять коннект - на каком-то этапе запросы начинают проходить.
1. "Помучил эту WebReference" результат 2 сертификата: sit2.amazon и "Тестовый УЦ". И всё заработало. Спасибо за помощь.
Обратите внимание - оба сертификата в Trusted Root CA, см. вложение.


2. Получаю при отправке из GISGKHTest (любая отправка "Получить поставщика данных" и др.) "System.ServiceModel.FaultException: FMT001300: Некорректный XML". Подскажите, кто сталкивался, куда копать?
0
187 / 100 / 19
Регистрация: 15.09.2011
Сообщений: 801
26.04.2016, 00:56
Цитата Сообщение от Consider Посмотреть сообщение
1. "Помучил эту WebReference" результат 2 сертификата: sit2.amazon и "Тестовый УЦ". И всё заработало. Спасибо за помощь.
Обратите внимание - оба сертификата в Trusted Root CA, см. вложение.
Вложение 683590

Молодец, я верил в тебя)))
Там нужно выстроить доверие обязательно в системе.
Web браузер, с помощью которого работает студия - это практически тот же COM объект, что и вообще Explorer - там одна и та же архитектура.

2. Получаю при отправке из GISGKHTest (любая отправка "Получить поставщика данных" и др.) "System.ServiceModel.FaultException: FMT001300: Некорректный XML". Подскажите, кто сталкивался, куда копать?
На форуме смотри и пробуй все варианты. Скорее всего ты неправильно делаешь XML))))
Вот корректный (из SOAPUI):

Посылать нужно на
Криптотуннель:
http://127.0.0.1:8080/ext-bus-... stryCommon
Студия:
https://54.76.42.99:60045/ext-... stryCommon

Без подписи:

XML
1
2
3
4
5
6
7
8
9
10
11
12
13
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns="http://dom.gosuslugi.ru/schema/integration/8.7.0.4/" xmlns:org="http://dom.gosuslugi.ru/schema/integration/8.7.0.4/organizations-registry-common/" xmlns:xd="http://www.w3.org/2000/09/xmldsig#">
   <soapenv:Header>
      <ns:ISRequestHeader>
         <ns:Date>2016-04-25T18:04:46.264+11:00</ns:Date>
         <ns:MessageGUID>d4dd9421-22e4-4ecb-bc1e-e69d8feee13c</ns:MessageGUID>
      </ns:ISRequestHeader>
   </soapenv:Header>
   <soapenv:Body>
      <org:exportDataProviderRequest>
         <org:IsActual>true</org:IsActual>
      </org:exportDataProviderRequest>
   </soapenv:Body>
</soapenv:Envelope>
С подписью:

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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
<soapenv:Envelope xmlns:ns="http://dom.gosuslugi.ru/schema/integration/8.7.0.4/" xmlns:org="http://dom.gosuslugi.ru/schema/integration/8.7.0.4/organizations-registry-common/" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xd="http://www.w3.org/2000/09/xmldsig#">
   <soapenv:Header>
      <ns:ISRequestHeader>
         <ns:Date>${=javax.xml.datatype.DatatypeFactory.newInstance().newXMLGregorianCalendar(GregorianCalendar.getInstance())}</ns:Date>
         <ns:MessageGUID>${=java.util.UUID.randomUUID()}</ns:MessageGUID>
      </ns:ISRequestHeader>
   </soapenv:Header>
   <soapenv:Body>
      <org:exportDataProviderRequest Id="signed-data-container"><ds:Signature Id="xmldsig-11d7cc35-1a4a-44cc-8567-3b803591d55f" 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 Id="xmldsig-11d7cc35-1a4a-44cc-8567-3b803591d55f-ref0" 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>Kj2HFcqPExlvvnVyp5bHqNKJjp0KZkUMy5+7Q50Zzik=</ds:DigestValue>
</ds:Reference>
<ds:Reference Type="http://uri.etsi.org/01903#SignedProperties" URI="#xmldsig-11d7cc35-1a4a-44cc-8567-3b803591d55f-signedprops">
<ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#gostr3411"/>
<ds:DigestValue>NvyzMa68gcSZgsHdFFKgXdqguwv2IYWq73LFaTNLcRA=</ds:DigestValue>
</ds:Reference>
</ds:SignedInfo>
<ds:SignatureValue Id="xmldsig-11d7cc35-1a4a-44cc-8567-3b803591d55f-sigvalue">
vdcyBTT4P/tBIDVaTG2adWkGKbtpva2vynydGERCu/0lHxOuvUjM5inN3bcqzifK4hB4LRkbJ87h
RgsTWQm5aA==
</ds:SignatureValue>
<ds:KeyInfo>
<ds:X509Data>
<ds:X509Certificate>
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
ZXMvY2RwL3NlcnZlcmMuY3JsMC2gK6AphidodHRwOi8vd3d3LnNlcnZlcmMucnUvZmlsZXMvc2Vy
dmVyYy5jcmwwOKA2oDSGMmh0dHA6Ly8xMC4yMS4xNy42Ni9pbWFnZXMvc3Rvcmllcy9maWxlL3Nl
cnZlcmMuY3JsMHsGCCsGAQUFBwEBBG8wbTAzBggrBgEFBQcwAYYnaHR0cDovL29jc3AuYXRsYXMt
Mi5ydS9zYy1vY3NwL29jc3Auc3JmMDYGCCsGAQUFBzAChipodHRwOi8vY2EuYXRsYXMtMi5ydS9m
aWxlcy9haWEvc2VydmVyYy5jcnQwSAYDVR0gBEEwPzAOBgwqhQMDgQOIDAADAwEwCgYIKoUDAxoB
BgEwCwYJKoUDAxoBBwICMAoGCCqFAwMaAQgBMAgGBiqFA2RxATCCATMGBSqFA2RwBIIBKDCCASQM
KyLQmtGA0LjQv9GC0L7Qn9GA0L4gQ1NQIiAo0LLQtdGA0YHQuNGPIDMuNikMUyLQo9C00L7RgdGC
0L7QstC10YDRj9GO0YnQuNC5INGG0LXQvdGC0YAgItCa0YDQuNC/0YLQvtCf0YDQviDQo9CmIiDQ
stC10YDRgdC40LggMS41DE/QodC10YDRgtC40YTQuNC60LDRgiDRgdC+0L7RgtCy0LXRgtGB0YLQ
stC40Y8g4oSWINCh0KQvMTIxLTE4NTkg0L7RgiAxNy4wNi4yMDEyDE/QodC10YDRgtC40YTQuNC6
0LDRgiDRgdC+0L7RgtCy0LXRgtGB0YLQstC40Y8g4oSWINCh0KQvMTI4LTE4MjIg0L7RgiAwMS4w
Ni4yMDEyMAgGBiqFAwICAwNBAH7SMlQlkRRy6jblyMDyL47LTxnq1V+e+g7bBYW37OdNJHM/rhII
jPOKXKbjH2XpJKtVoeBMmOiIDvsJQj4WuDk=
</ds:X509Certificate>
</ds:X509Data>
</ds:KeyInfo>
<ds:Object><xades:QualifyingProperties Target="#xmldsig-11d7cc35-1a4a-44cc-8567-3b803591d55f" xmlns:xades="http://uri.etsi.org/01903/v1.3.2#" xmlns:xades141="http://uri.etsi.org/01903/v1.4.1#"><xades:SignedProperties Id="xmldsig-11d7cc35-1a4a-44cc-8567-3b803591d55f-signedprops"><xades:SignedSignatureProperties><xades:SigningTime>2016-04-25T17:34:43.501+10:00</xades:SigningTime><xades:SigningCertificate><xades:Cert><xades:CertDigest><xd:DigestMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#gostr3411"/><xd:DigestValue>pogvJJA8yWzGDXeOAKuZt5GIdKCdPtHnT+Bc5G7JKyE=</xd:DigestValue></xades:CertDigest><xades:IssuerSerial><xd:X509IssuerName>cn=УЦ ЗАО "Сервер-Центр",o=ЗАО "Сервер-Центр",ou=УЦ,1.2.840.113549.1.9.2=atlas-2. Деловая сеть,1.2.643.3.131.1.1=002539038819,1.2.643.100.1=1022502121476,l=Владивосток,st=25 Приморский край,c=RU,1.2.840.113549.1.9.1=certificate@serverc.ru</xd:X509IssuerName><xd:X509SerialNumber>128289520126461099599637</xd:X509SerialNumber></xades:IssuerSerial></xades:Cert></xades:SigningCertificate></xades:SignedSignatureProperties></xades:SignedProperties></xades:QualifyingProperties></ds:Object>
</ds:Signature>
         <org:IsActual>true</org:IsActual>
      </org:exportDataProviderRequest>
   </soapenv:Body>
</soapenv:Envelope>
Подписывал вот этим -
перед подписью нужно обязательно установить КриптоПро последней версии и Trusted Java 2.0.
Если не будет работать - вот инструкция https://github.com/Good-Samaritan/signature-demo
Вложения
Тип файла: rar signature-demo-1.0.0-SNAPSHOT.rar (5.34 Мб, 49 просмотров)
0
187 / 100 / 19
Регистрация: 15.09.2011
Сообщений: 801
26.04.2016, 01:12
Народ, да, батник - это по мужски)) И проект ещё в консольке, чтобы не отвлекаться на посторонние задачи.
0
1 / 1 / 1
Регистрация: 12.03.2015
Сообщений: 12
26.04.2016, 16:42
Цитата Сообщение от umatkot Посмотреть сообщение
На форуме смотри и пробуй все варианты. Скорее всего ты неправильно делаешь XML))))
Но здесь скорее не я "неправильно делаю XML", а GISGKHTest.
Брал отсюда:
Spun80 23.03.2016, 01:59 .NET 4.x Интеграция с ГИС ЖКХ. Подпись SOAP и защита канала по ГОСТ
Выкладываю ранее размещенный тут матерым человечищем пример. Я его слегка подправил. Сейчас бьюсь над загрузкой устава, договора управления, дома. Но тестовые функции у меня работают. Я только добавил класс для работы с прокси-сервером. Надо поменять данные в app config и заменить отпечатки сертификата и пароль к нему.
Может потребоваться переустановить CryptoPro.Net.
Вложения
Тип файла: zip GISGKH.zip (4.66 Мб, 58 просмотров)
Возможно, на стенде изменилась версия "Форматов электронных сообщений" или ещё что-то? Подскажите....

PS:Спасибо за информацию и примеры, буду разбираться!
0
16 / 15 / 1
Регистрация: 18.04.2016
Сообщений: 82
27.04.2016, 06:26
Из примера GISGKH.zip
Справочник приходит нормально.
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
 using (NsiPortsTypeClient proxy = new NsiPortsTypeClient("NsiCommonPort"))
            {
                proxy.ClientCredentials.UserName.UserName = SoapUserName;
                proxy.ClientCredentials.UserName.Password = SoapPassword;
                var req = new exportNsiListRequest();
                req.Id = "signed-data-container";
                HeaderType header = new HeaderType();
                header.Date = DateTime.Now;
                header.MessageGUID = Guid.NewGuid().ToString();
                exportNsiListResult res = new exportNsiListResult();
                try
                {
                    System.Net.ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
                    proxy.exportNsiList(header, req, out res);
                    foreach (NsiItemInfoType nsiitem in ((NsiListType)res.Item).NsiItemInfo)
                    {
                        txtOutXml.Text = txtOutXml.Text + Environment.NewLine + nsiitem.Name;
                    }
                    //                    MessageBox.Show(((NsiListType)res.Item).NsiItemInfo[0].Name);
                }
                catch (Exception error)
                {
                    MessageBox.Show(error.ToString());
                }
Попытка получить Поставщика данных
"Нет объектов для экспорта." ErrorCode "INT002012"
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
  using (RegOrgPortsTypeClient proxy = new RegOrgPortsTypeClient("RegOrgCommonPort"))
            {
                proxy.ClientCredentials.UserName.UserName = SoapUserName;
                proxy.ClientCredentials.UserName.Password = SoapPassword;
                exportDataProviderRequest req = new exportDataProviderRequest();
                exportDataProviderRequest1 r = new exportDataProviderRequest1();
 
                req.Id = "signed-data-container";
                HeaderType header = new HeaderType();
                header.Date = DateTime.Now;
                header.MessageGUID = Guid.NewGuid().ToString();
 
                req.IsActualSpecified = true;
                r.ISRequestHeader = header;
                r.exportDataProviderRequest = req;
 
 
                exportDataProviderResult res = new exportDataProviderResult();
 
                try
                {
                    System.Net.ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
                    proxy.exportDataProvider(header, req, out res);
                    SenderId = ((exportDataProviderResultType)res.Items[0]).DataProviderGUID;
                    MessageBox.Show(SenderId);
                }
                catch (Exception error)
                {
                    MessageBox.Show(error.ToString());
                }
            }
Кто пользуется данным примером, подскажите что посмотреть?
0
13 / 13 / 0
Регистрация: 25.01.2016
Сообщений: 38
27.04.2016, 07:50
Цитата Сообщение от Consider Посмотреть сообщение
Возможно, на стенде изменилась версия "Форматов электронных сообщений" или ещё что-то? Подскажите....
Да, там прокси класс заново сгенерировать надо.
Во вложении обновленный тест. В нем всего один метод exportDataProvider. Нужно только в app.config изменить отпечаток сертификата на свой.
Вложения
Тип файла: zip GISGKHdemo.zip (8.50 Мб, 68 просмотров)
1
0 / 0 / 0
Регистрация: 26.04.2016
Сообщений: 2
27.04.2016, 10:05
Добрый день, Araney! Смотрю Ваш тестовый проект сейчас, выскакивает ошибка при попытке получить поставщика данных (скриншот приложил). Можете объяснить как задается в конфиге адрес proxyaddress="http://192.168.130.233:3128"? почему именно такой адрес? нужно какой-то прокси-сервер поднимать или что? погуглил, но так и не понял что нужно сделать
Миниатюры
Интеграция с ГИС ЖКХ. Подпись SOAP и защита канала по ГОСТ  
0
0 / 0 / 0
Регистрация: 26.04.2016
Сообщений: 2
27.04.2016, 11:29
Цитата Сообщение от afro Посмотреть сообщение
Добрый день, Araney! Смотрю Ваш тестовый проект сейчас, выскакивает ошибка при попытке получить поставщика данных (скриншот приложил). Можете объяснить как задается в конфиге адрес proxyaddress="http://192.168.130.233:3128"? почему именно такой адрес? нужно какой-то прокси-сервер поднимать или что? погуглил, но так и не понял что нужно сделать
Выключил использование прокси в конфиге - заработало. Подскажите, зачем нужно использовать прокси?
0
 Аватар для NaGuWaL
17 / 14 / 0
Регистрация: 22.04.2016
Сообщений: 287
27.04.2016, 11:51
Цитата Сообщение от trawinka Посмотреть сообщение
ViteG,
verify=2
client=yes
CAFile=..\crypto\CA-SIT.pem
engine=gost
error_image=error.png
usb_eject=yes
;output=stunnel.log
sslVersion=TLSv1
taskbar=yes
DEBUG=7


[pseudo-https]
protocol = http
accept = 127.0.0.1:8080
connect = 54.76.42.99:60045
ciphers = GOST2001-GOST89-GOST89
TIMEOUTclose = 0
cert=..\crypto\SE_3.pem
key=..\crypto\SE_3.key
cert_sign=..\crypto\client.crt
key_sign=..\crypto\client.key
sign_only_new=no
sign_inputs=ID797C1C735EEB4926925375E1D6 907834
sign_files=IDCBB806E365FB4FBA9490AB20303 971F4
Добрый день! Подскажите откуда у вас следующие позиции конфига

cert=..\crypto\SE_3.pem - тестового сертификата(согласно ману)
key=..\crypto\SE_3.key - тестового сертификата(согласно ману)
cert_sign=..\crypto\client.crt - а это?
key_sign=..\crypto\client.key - это?
sign_only_new=no
sign_inputs=ID797C1C735EEB4926925375E1D6 907834 - вот это
sign_files=IDCBB806E365FB4FBA9490AB20303 971F4 - и это откуда? Отпечаток сертификата? но какого?
Заранее благодарю!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.04.2016, 11:51

.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. При срабатывании форматно-логического...


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

Или воспользуйтесь поиском по форуму:
320
Закрытая тема Создать тему
Новые блоги и статьи
Был там один разговор по поводу свободы в материальном мире.
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 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru