Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Реализация клиента веб сервиса ч-з защищ прпротол 
:(
    Опции темы
sergushkin
Дата 22.5.2014, 17:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 31.1.2014

Репутация: нет
Всего: нет



Народ помогите с реализацией кода клиента веб-сервиса на C# через защищенный протокол.
В наличае есть два сертификата и два приватных ключа. 

алгоритм ключа RSA  дина 2048.

Мой код
Код

var customBinding = new CustomBinding();
            var sec = (AsymmetricSecurityBindingElement)SecurityBindingElement.CreateMutualCertificateBindingElement(MessageSecurityVersion.WSSecurity10WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10);
            var userNameToken = new UserNameSecurityTokenParameters();
            sec.EnableUnsecuredResponse = true;
            sec.EndpointSupportingTokenParameters.Signed.Add(userNameToken);
            sec.MessageSecurityVersion = MessageSecurityVersion.WSSecurity10WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10;
            sec.IncludeTimestamp = true;
            sec.SecurityHeaderLayout = SecurityHeaderLayout.Strict;
            sec.AllowInsecureTransport = true;
            customBinding.Elements.Add(sec);
            customBinding.Elements.Add(new TextMessageEncodingBindingElement(MessageVersion.Soap11, Encoding.UTF8));
            customBinding.Elements.Add(new HttpsTransportBindingElement());

            string url = "<url>";
            Uri uri = new Uri(url);
            DnsEndpointIdentity identity = new DnsEndpointIdentity("<username>");
            EndpointAddress address = new EndpointAddress(uri, identity, new AddressHeaderCollection());

            string certPath1 = "D:\\2\\<cert1>.p12";
            var cert1 = new X509Certificate2(certPath1);
            string certPath2 = "D:\\2\\<cert2>.p12";
            var cert2 = new X509Certificate2(certPath2, "<password>");
            paymentService.PaymentServiceClient client = new paymentService.PaymentServiceClient(customBinding, address);
            client.ClientCredentials.UserName.UserName = "<user>";
            client.ClientCredentials.UserName.Password = "<password>";
            client.ClientCredentials.ServiceCertificate.DefaultCertificate = cert1;
            client.ClientCredentials.ClientCertificate.Certificate = cert2;
            try
            {
                client.Open();
                string s = client...;
                MessageBox.Show(s);
                client.Close();
            }
            catch (Exception ex)
            {
                textBox1.Text = ex.ToString();
                client.Close();
            }


Получаю ошибку 400. Ошибка возникает в строке string s = client...;

Может я вообще в принципе не то делаю?

Заранее спасибо.

Это сообщение отредактировал(а) sergushkin - 22.5.2014, 17:29
PM MAIL   Вверх
sergushkin
Дата 28.5.2014, 09:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 31.1.2014

Репутация: нет
Всего: нет



Попытался реализовать эту задачу с помощью customBinding, сконфигурированного  app.config. От ошибки 400 избавился, но всё таки положительного результата не добился. Нашёл ссылку

http://www.rsdn.ru/forum/dotnet/4583891.1

Это как раз таки моя задача один в один. Понял, что на C#  это не реализуемо (попробовал все варианты шифрования + эта ссылка). В WCF нет Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithComments"

Получается, что это надо делать на низком уровне через TCP/IP протокол? Самому кодировать сообщения?
PM MAIL   Вверх
jonie
Дата 28.5.2014, 10:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 15
Всего: 118



ну уж не через TCP\IP, а уровнем повыше (HTTP(s))... если хотите... но вообще можно и встроить в WCF подписывание же (реализовать самому).

посмотрите в сторону Web Services Enhancements (старенько, но многое там может быть такое, чего нет в wcf)..


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
cully
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, cully, mr.DUDA, Exception.

 
2 Пользователей читают эту тему (2 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Распределённые приложения и сеть | Следующая тема »


 




[ Время генерации скрипта: 0.1131 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.