powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / Работа с RESTful-сервисом и клиентский сертификат
11 сообщений из 11, страница 1 из 1
Работа с RESTful-сервисом и клиентский сертификат
    #37420214
MirrorBoy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть RESTful сервис который хостится так:
Код: plaintext
1.
2.
      _restFulServiceHost = new WebServiceHost(typeof(RestDemoService), new Uri(RestAddress));
      _restFulServiceHost.Open();
Обращаюсь к нему так:
Код: plaintext
1.
2.
3.
4.
        var req = (HttpWebRequest)WebRequest.Create(restConfig.EndpointAddress);
        req.Method = "POST";
        ...
        return (HttpWebResponse)req.GetResponse();
Все работает замечательно


теперь нужно организовать работу по HTTPS

на стороне клиента добавил строку:
Код: plaintext
1.
        req.ClientCertificates.Add(GetMyCertificate());
на стороне сервера изменил хостинг так:

Код: plaintext
1.
2.
      _restFulServiceHost = new ServiceHost(typeof(RestDemoService));
      _restFulServiceHost.AddServiceEndpoint(typeof(IRestDemoService), _basicHttpBinding, RestAddress);
где:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
    private readonly Binding _basicHttpBinding = new BasicHttpBinding
                                                    {
                                                      Security =
                                                        {
                                                          Mode = BasicHttpSecurityMode.TransportWithMessageCredential,
                                                          Message =
                                                            {
                                                              ClientCredentialType = BasicHttpMessageCredentialType.Certificate
                                                            }
                                                        },
                                                      Namespace = "http://mysite.com"
                                                    };
и изменил в адрессе http на https

получаю Exception:
Код: plaintext
1.
2.
3.
4.
System.Net.WebException was caught
  Message=The underlying connection was closed: An unexpected error occurred on a send.
  Source=System
  StackTrace:
       at System.Net.HttpWebRequest.GetResponse()

Подскажите, пожалуйста, что я делаю не так?

При этом Soap сервис, хостируемый аналогичным образом работает с клиентскими сертификатом замечательно
...
Рейтинг: 0 / 0
Работа с RESTful-сервисом и клиентский сертификат
    #37420632
AlexeiK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MirrorBoy,

а разве https для порта, не через винду настраивается?
я делал через винду.
...
Рейтинг: 0 / 0
Работа с RESTful-сервисом и клиентский сертификат
    #37420737
MirrorBoy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AlexeiKMirrorBoy,

а разве https для порта, не через винду настраивается?
я делал через винду.
Подскажите, пожалуйста, что настраивается через винду?
...
Рейтинг: 0 / 0
Работа с RESTful-сервисом и клиентский сертификат
    #37420852
AlexeiK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MirrorBoy,

порт для связи по https ,то есть -это установка на порт ssl сертификата.
тут
правда там x509 серт, а тебе надо посмтореть какой у тебя сертификат.
...
Рейтинг: 0 / 0
Работа с RESTful-сервисом и клиентский сертификат
    #37421043
Фотография Верблюд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexeiKустановка на порт ssl сертификата.

как я понял, у ТС проблема с клиентским сертификатом.
...
Рейтинг: 0 / 0
Работа с RESTful-сервисом и клиентский сертификат
    #37421232
AlexeiK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Верблюд,

ну стоит уточнить.
для httpcfg метода, нужно только сделать н астройки в самое винде.
никаких
Код: plaintext
req.ClientCertificates.Add(GetMyCertificate());
не нужно.
...
Рейтинг: 0 / 0
Работа с RESTful-сервисом и клиентский сертификат
    #37421634
MirrorBoy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AlexeiKMirrorBoy,

порт для связи по https ,то есть -это установка на порт ssl сертификата.
тут
правда там x509 серт, а тебе надо посмтореть какой у тебя сертификат.
Да, спасибо
Это все проделано. Применяется X509Certificate2
И для SOAP все работает замечательно

Проблемы только на RESTful сервисе
...
Рейтинг: 0 / 0
Работа с RESTful-сервисом и клиентский сертификат
    #37421645
MirrorBoy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AlexeiKВерблюд,

ну стоит уточнить.
для httpcfg метода, нужно только сделать н астройки в самое винде.
никаких
Код: plaintext
req.ClientCertificates.Add(GetMyCertificate());
не нужно.
Вы уверены что не нужно?

Если рассматривать аналогию с SOAP сервисом, то там сертификат нужно цеплять обязательно
Например так:
Код: plaintext
1.
2.
3.
4.
5.
        myClient.ClientCredentials.ClientCertificate.SetCertificate(
          StoreLocation.LocalMachine,
          StoreName.My,
          X509FindType.FindBySubjectName,
          "*.mycert.com");
Если я этого не делаю, получаю ошибку "The client certificate is not provided. Specify a client certificate in ClientCredentials."
...
Рейтинг: 0 / 0
Работа с RESTful-сервисом и клиентский сертификат
    #37421795
MirrorBoy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я нашел решение
И помогло мне в этом сообщение в теме

Итак, вместо хостинга:
Код: plaintext
1.
2.
      _restFulServiceHost = new WebServiceHost(typeof(RestDemoService), new Uri(RestAddress));
      _restFulServiceHost.Open();
Нужно написать так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
      _restFulServiceHost = new WebServiceHost(typeof(RestDemoService));
      _restFulServiceHost.AddServiceEndpoint(typeof(IRestDemoService), WebHttpBindingWithCert, RestAddressHttps); // https
      _restFulServiceHost.Open();
...
    public WebHttpBinding WebHttpBindingWithCert
    {
      get
      {
        return new WebHttpBinding
                 {
                   Security =
                     {
                       Mode = WebHttpSecurityMode.Transport,
                       Transport = {ClientCredentialType = HttpClientCredentialType.Certificate}
                     }
                 };
      }
    }
При таком варианте сертификат обязателен и передавать его нужно именно так как я и передавал:
Код: plaintext
1.
      req.ClientCertificates.Add(GetMetangaCertificate());

Спасибо всем, кто откликнулся
...
Рейтинг: 0 / 0
Работа с RESTful-сервисом и клиентский сертификат
    #37422505
AlexeiK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MirrorBoyAlexeiKВерблюд,

ну стоит уточнить.
для httpcfg метода, нужно только сделать н астройки в самое винде.
никаких
Код: plaintext
req.ClientCertificates.Add(GetMyCertificate());
не нужно.
Вы уверены что не нужно?

Если рассматривать аналогию с SOAP сервисом, то там сертификат нужно цеплять обязательно
Например так:
Код: plaintext
1.
2.
3.
4.
5.
        myClient.ClientCredentials.ClientCertificate.SetCertificate(
          StoreLocation.LocalMachine,
          StoreName.My,
          X509FindType.FindBySubjectName,
          "*.mycert.com");
Если я этого не делаю, получаю ошибку "The client certificate is not provided. Specify a client certificate in ClientCredentials."

да, именно не нужно. ssl устанавливается за счет операционной системы.
я сам так делал собственно. инсталил сертификат к себе в ОС в хранилище, потом говорил ОС, что такой то порт, с этим сертификатом и все. саму wcf не трогал, кроме как изменить http на https.
так что не знаю, че вы тут паритесь с переписыванием программ.
...
Рейтинг: 0 / 0
Работа с RESTful-сервисом и клиентский сертификат
    #37422553
MirrorBoy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AlexeiKда, именно не нужно. ssl устанавливается за счет операционной системы.
я сам так делал собственно. инсталил сертификат к себе в ОС в хранилище, потом говорил ОС, что такой то порт, с этим сертификатом и все. саму wcf не трогал, кроме как изменить http на https.
так что не знаю, че вы тут паритесь с переписыванием программ.
ИМХО мой вариант проще для пользователя. Я все делаю программно и не заставляю пользователя танцевать с бубном вокруг сертификата, хранилища и портов
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / Работа с RESTful-сервисом и клиентский сертификат
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]