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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline Bpar  
#1 Оставлено : 25 октября 2018 г. 9:40:41(UTC)
Bpar

Статус: Участник

Группы: Участники
Зарегистрирован: 05.08.2014(UTC)
Сообщений: 12

Поблагодарили: 2 раз в 2 постах
При попытке отправить пакет на тестовую среду ГИС ГМП 2.0 возникает исключение: "Неопознанный набор charSet "ISO-8859-1" в contentType."

Код работы с сервисом взят из примеров КриптоПро.NET SDK.

Причем похожий код (и та-же библиотека) успешно работает на тестовой и боевой среде ГИС ГМП 1.16.x.

Подскажите, как указать сервису кодировку UTF-8?

Текст XML-запроса qry_err.xml (15kb) загружен 5 раз(а).

Версия КриптоПро.NET - 1.0.4863.
C версией 1.0.6397 не работает даже с ГИС ГМП 1.16.x. - exception при проверке сертификатов.

Код:

SenderProvidedRequestData sprd = new SenderProvidedRequestData();
//
// .....
//
 SMEVMessageExchangePortTypeClient service = new SMEVMessageExchangePortTypeClient("SmevGISGMPServiceSOAP");
// Клиентский сертификат подписи
service.ClientCredentials.ClientCertificate.Certificate = clientCert;
/// Серверный сертификат подписи
service.ClientCredentials.ServiceCertificate.DefaultCertificate = serverCert;
/// С проверками сертификатов всё туго. отключаем их.
service.ClientCredentials.ServiceCertificate.Authentication.CertificateValidationMode = System.ServiceModel.Security.X509CertificateValidationMode.None;
service.ClientCredentials.ServiceCertificate.Authentication.RevocationMode = X509RevocationMode.NoCheck;

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

/// Настраиваем привязку. Подменяем кодировщик на собственный,
/// настраиваем SecurityBindingElement
CustomBinding binding = new CustomBinding(service.Endpoint.Binding);
SMEVMessageEncodingBindingElement textBindingElement = new SMEVMessageEncodingBindingElement()
{
    MessageVersion = MessageVersion.CreateVersion(EnvelopeVersion.Soap11, AddressingVersion.None),
};

binding.Elements.Remove<TextMessageEncodingBindingElement>();
binding.Elements.Insert(0, textBindingElement);

/// Не включаем метку времени в заголовок Security
AsymmetricSecurityBindingElement asb = binding.Elements.Find<AsymmetricSecurityBindingElement>();
asb.IncludeTimestamp = false;
asb.DefaultAlgorithmSuite = GostAlgorithmSuite.BasicGostObsolete;
/// Говорим WCF, что в сообщении от СМЭВ не нужно искать метку времени и nonce.
asb.LocalClientSettings.DetectReplays = false;
asb.EnableUnsecuredResponse = true;

/// Устанавливаем модифицированную привязку.
service.Endpoint.Binding = binding;

/// Говорим WCF, что требуется только подпись сообщения.
/// По-умолчанию задано шифрование + подпись.
service.ChannelFactory.Endpoint.Contract.ProtectionLevel = System.Net.Security.ProtectionLevel.Sign;

XmlElement SMEVSig;

service.SendRequest(sprd, null/*AttachmentContentList*/, null/*CallerInformationSystemSignature*/, out SMEVSig);
Offline Bpar  
#2 Оставлено : 14 ноября 2018 г. 10:12:05(UTC)
Bpar

Статус: Участник

Группы: Участники
Зарегистрирован: 05.08.2014(UTC)
Сообщений: 12

Поблагодарили: 2 раз в 2 постах
пришлось поправить код, указав кодировку принудительно
SMEVMessageEncodingBindingElementExtensionElement.cs
Код:

namespace SmevServiceEncoder
{
    public class SMEVTextMessageEncoder : MessageEncoder
    {
        ...
        public override Message ReadMessage(ArraySegment<byte> buffer, BufferManager bufferManager, string contentType)
        {
            ...
            return _innerEncoder.ReadMessage(buffer, bufferManager, /*contentType*/ "text/xml;charset=UTF-8");
        }
    }
}
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.