Ключевое слово в защите информации
ключевое слово
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline kosivchenko_s_v  
#1 Оставлено : 2 декабря 2015 г. 17:36:50(UTC)
kosivchenko_s_v

Статус: Новичок

Группы: Участники
Зарегистрирован: 03.07.2014(UTC)
Сообщений: 3
Российская Федерация

Добрый день.

Реализую взаимодействие с сервисами ГАСУ средствами СМЭВ. Сервисы ГАСУ туннелируются с нашей стороны через контуры регионального СМЭВ, подключенного к федеральному контуру СМЭВ, в котором расположен сам сервис ГАСУ.

Для взаимодействия нашей системы с ГАСУ был сгенерирован WCF клиент из WSDL, находящихся по адресу ГАСУ в контуре СМЭВ.

Посмотрев примеры из КриптоПРО .Net SDK, аналогичным образом создали клиент WCF для себя.

Ниже код инициализации клиента:

Код:
this.gasuClient = new gasu2Client();
if (clientCert == null || serverCert == null)
                    throw new ObjectNotFoundException("Не найдены сертификаты электронной подписи");

                gasuClient.ClientCredentials.ClientCertificate.Certificate = clientCert;

                gasuClient.ClientCredentials.ServiceCertificate.DefaultCertificate = serverCert;

                gasuClient.ClientCredentials.ServiceCertificate.Authentication.CertificateValidationMode = X509CertificateValidationMode.None;
                gasuClient.ClientCredentials.ServiceCertificate.Authentication.RevocationMode = X509RevocationMode.NoCheck;
                

                string serverCommonName = serverCert.GetNameInfo(X509NameType.SimpleName, false);
                // DNS имя не совпадает с CommonName из сертификата сервера. Поэтому явно задаем доверие.
                EndpointAddress myEndpointAddr = new EndpointAddress(new Uri(GASUEndpointAddress),
                                                                    EndpointIdentity.CreateDnsIdentity(
                                                                    serverCommonName));
                gasuClient.Endpoint.Address = myEndpointAddr;


Кодировщик СМЭВ подключается через файл конфигурации следующим образом:

Код:
<bindings>
      <customBinding>
        <binding name="gasuBinding" openTimeout="01:00:00" closeTimeout="01:00:00" sendTimeout="01:00:00" receiveTimeout="01:00:00">
          <security
                    defaultAlgorithmSuite="BasicGostObsolete"
                    allowSerializedSigningTokenOnReply="true"
                    allowInsecureTransport="true"
                    enableUnsecuredResponse="true"
                    authenticationMode="MutualCertificateDuplex"
                    includeTimestamp="false"
                    requireSignatureConfirmation="false"
                    messageProtectionOrder="SignBeforeEncrypt"
                    messageSecurityVersion="WSSecurity10WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10">
            <localClientSettings detectReplays="false"  />
            <localServiceSettings detectReplays="false"  />
          </security>
          <SMEVTextMessageEncoder />
          <httpTransport maxBufferPoolSize="2147483647" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647"/>
        </binding>
      </customBinding>


Клиент отрабатывает успешно (запрос и ответ на сервис успешно ловятся сниффером), однако, при обработке ответа выбрасывается исключение:

Код:
The incoming message was signed with a token which was different from what used to encrypt the body. This was not expected.


Собственно, содержимое ответа представлено тут http://pastebin.com/q0eYLueC

В данном ответе, есть три подписи. Возникло мнение, что как раз из-за одной из них и происходит ошибка.

Так же, нашел реализацию кодировщика вот здесь: https://github.com/aanuf...vice/tree/master/Binding
При использовании данного кодировщика, исключительных ситуаций не возникает, однако, сообщение диссериализуется не корректно, а именно, 90% тела ответа содержат null.

Подскажите, в чем может быть проблема?

P.S. В качестве сертификата serverCert используется сертификат полученный от тех поддержки СМЭВ, относящийся к сервису ГАСУ в СМЭВ.

P.S.S. Я пытался переписать кодировщик таким образом, чтобы он убирал третью подпись из ответа, однако, это ни привело ни к каким результатам. Данная мысль у меня возникла, когда клиент успешно отрабатывал с той же конфигурацией для сервисов расположенных в сети Интернет.

Заранее спасибо.
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.