| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Распределённые приложения и сеть > Не удалось открыть безопасный канал |
| Автор: undelete 20.6.2011, 17:19 | ||||
| Здравствуйте! Проблема такая, создал WCF сервис и клиент под него. Тестирую локально - все прекрасно работает. Публикую сервис на хостинг (uh.ua) , и при вызове метода выдает исключение: "Необработанное исключение типа "System.ServiceModel.Security.SecurityNegotiationException" произошло в mscorlib.dll Дополнительные сведения: Не удалось открыть безопасный канал, так как произошла ошибка при согласовании безопасности с удаленной стороной. Возможно, это связано с отсутствием или неправильным указанием EndpointIdentity в EndpointAddress, использованном для создания канала. Убедитесь, что EndpointIdentity, указанный или подразумеваемый в EndpointAddress, правильно идентифицирует удаленную сторону. " Конфиг клиента:
Конфиг сервиса:
Помогите разобраться плиз! А то скину ядерную боеголовку на центральный офис мелкософта =))) |
| Автор: Plamenk 5.7.2011, 14:13 | ||||
В клиенте не указан адрес конечной точки:
Пример настроенного конфига на сервер:
Для клиента мона сгенерить через студию. |
| Автор: jonie 6.7.2011, 11:45 |
| Plamenk, ну и что что не указан? Если у вас IIS то она вообще плевать хотела на это указание. Проблема тут как раз с идентификацией - для начала я бы включил трассировку wcf ... |
| Автор: Plamenk 7.7.2011, 13:39 |
| Я говорил про конфиг клиента. |
| Автор: jonie 7.7.2011, 23:22 |
| Plamenk, ну и ничего в вашем примере работать не будет, т.к. вы используете WSHttpBinding который по умолчанию шифрует сообщения используя идентификацию на основе виндофс пользователей. ..... собственно в этом надо думать и есть проблема.... я могу, конечно, описать что да как надо делать в общем случае (применительно к этому биндингу)... если это кому-то надо... Там есть свои заморочки, в частности настройка http.sys драйвера (если вы делаете selfhosted сервис и хотите ssl шифрование канала) |
| Автор: Fitc 8.7.2011, 08:34 | ||
Опиши пожалуйста! |
| Автор: jonie 8.7.2011, 10:41 | ||||||||||||
| 0. Понимать что такое шифрование 1. Просмотреть доклады про безопасность WCF от Натальи Уфимцевой на techdays.ru Итак, по-порядку. Вы хотите защитить передаваемые данные от модификации и\или прочтения? Наиболее стандартным мне кажется способом является использование SSL для шифрования всего потока - взгляните сами - везде в интренрент https используют. Способ позволяет шифровать весь канал, удостоверяясь в источнике и получателе сообщений. Этот способ я и опишу как наиболее часто используемый. Для начала нам надо создать сертификат, это можно сделать следующим спосбом:
Это самоподписанный сертификат. Который будет установлен сразу в хранилище компьютера (а не пользователя). Вы можете на него посмотреть сделав - пуск-выполнить-mmc.exe - добавить оснастку сертификаты - текущего компьютера. Теперь у нас есть сертификат который нам надо использовать на сервере. Вот полный конф сервера:
я тут использую net.tcp, но роли это не играет. Теперь важное замечание: IIS будет плевать на baseAddress-ы ну и на сертификатов путь - т.к. у него всё свое имеется. IIS: надо опубликовать сайт и навесить ему в свойствах наш сертификат - собственно это будет "пол конфига").. Self-Hosted: конфиг полный выше - там есть поиск сертификата по "отпечатку" в хранилище LocalMachine\My (отпечаток посмотрите в оснастке управления). Думали всё ? Да хрен там... Начинаются пляски с бубном. WCF вообще говоря не умеет SSL нормально поддерживать - это он возлагает на драйвер http.sys. Его надо настроить. В случае IIS настраивать не надо - т.к. за нас это делает iis. На разных версиях винды надо выполнить одну из коммнд:
Это сделает биндинг ssl на указанный порт используя указанный сертификат. Но и это еще не всё. Теперь надо побороть файрвол встроенный. Как-то так:
где параметры вписать для юзера под кем запускается этот self-hosted сервис. Эти все операции производить, конечно, для двух портов (у нас mex точка вынесена по https). Далее можно запуститься и проверить в браузере что там выдает MEX по адресу в конфиге. Ну и wcftestclient. В случае ошибок ковырять логи, которые надо включить:
лог можно просмотреть утилитой svctraceviewer. Далее конфиг клиента очень простой:
собственно всё.... |