Начинаю изучать WCF и возникло несколько вопросов:
1) Можно ли использовать WCF + Tcp binding + полное шифрование трафика. Насколько я понял погуглив, это возможно. Вроде как называется transport level
и стоит по умолчанию у tcp.
2) Можно ли как-то использовать handshake аутентификацию для передачи пароля? Т.е. у меня есть какой-то shared-secret. Клиент запрашивает аутентификацию,
сервер шлет ему случайный challenge. Клиент шифрует challenge использую свой shared-secret и шлет серверу. Сервер в свою очередь сам делает тоже самое
и сравнивает ответы. Возможно ли?
3) Как моментально отсобачить клиента, достаточно ли кинуть исключение на сервере? (для session based) Безопасно ли показывать причину клиенту (сам эксепшен)?
4) Хочу сделать n интерфейсов, т.е. изначально клиент может присоединятся только к 1-му интерфейсу. После некоторых вызовов у этого интерфейса по некой логике (например 2))
хочу чтобы клиенту стал доступен 2-ой интерфейс и т.д. как можно организовать такое?
Здравствуйте, Аноним, Вы писали:
А>1) Можно ли использовать WCF + Tcp binding + полное шифрование трафика. Насколько я понял погуглив, это возможно. Вроде как называется transport level и стоит по умолчанию у tcp.
transport level security
А>2) Можно ли как-то использовать handshake аутентификацию для передачи пароля? Т.е. у меня есть какой-то shared-secret. Клиент запрашивает аутентификацию, сервер шлет ему случайный challenge. Клиент шифрует challenge использую свой shared-secret и шлет серверу. Сервер в свою очередь сам делает тоже самое и сравнивает ответы. Возможно ли?
Не проще TLS использовать?
А>3) Как моментально отсобачить клиента, достаточно ли кинуть исключение на сервере? (для session based) Безопасно ли показывать причину клиенту (сам эксепшен)?
Исключение в общем случае не обравает связь.
А>4) Хочу сделать n интерфейсов, т.е. изначально клиент может присоединятся только к 1-му интерфейсу. После некоторых вызовов у этого интерфейса по некой логике (например 2)) хочу чтобы клиенту стал доступен 2-ой интерфейс и т.д. как можно организовать такое?
Здравствуйте, adontz, Вы писали:
A>Здравствуйте, Аноним, Вы писали:
А>>1) Можно ли использовать WCF + Tcp binding + полное шифрование трафика. Насколько я понял погуглив, это возможно. Вроде как называется transport level и стоит по умолчанию у tcp.
A>transport level security
Спасибо
А>>2) Можно ли как-то использовать handshake аутентификацию для передачи пароля? Т.е. у меня есть какой-то shared-secret. Клиент запрашивает аутентификацию, сервер шлет ему случайный challenge. Клиент шифрует challenge использую свой shared-secret и шлет серверу. Сервер в свою очередь сам делает тоже самое и сравнивает ответы. Возможно ли?
A>Не проще TLS использовать?
А можно по подробнее? Я так понял это использую сертификаты и HTTP?
А>>3) Как моментально отсобачить клиента, достаточно ли кинуть исключение на сервере? (для session based) Безопасно ли показывать причину клиенту (сам эксепшен)?
A>Исключение в общем случае не обравает связь.
Ок, а как отсоеденить его в общем случае?
А>>4) Хочу сделать n интерфейсов, т.е. изначально клиент может присоединятся только к 1-му интерфейсу. После некоторых вызовов у этого интерфейса по некой логике (например 2)) хочу чтобы клиенту стал доступен 2-ой интерфейс и т.д. как можно организовать такое?
A>Можно об этом по-подробнее?
Здравствуйте, adontz, Вы писали:
A>Здравствуйте, Аноним, Вы писали:
A>>>Не проще TLS использовать? А>>А можно по подробнее? Я так понял это использую сертификаты и HTTP?
A>Да. Правда не думаю что только для HTTP, хотя и не уверен.
A>>>Исключение в общем случае не обравает связь. А>>Ок, а как отсоеденить его в общем случае?
A>Позвать System.ServiceModel.ClientBase<>.Close(). Обрывать соединение с сервера ИМХО плохая идея.
A>>>Можно об этом по-подробнее? А>>
А>>Что-бы дотянуться до IService2 можно было лишь позвав GiveNext() у IService1?
A>Не думаю что подобное возможно в описанном виде. Я бы реализовал с использованием сессии. A>
A>[ServiceContract]
A>interface IService
A>{
A> [OperationContract]
A> void CreateNext();
A> [OperationContract]
A> string DoStuff(int);
A>}
A>
A>Внутри может быть реализованно как вы хотите.
Пасиб
Здравствуйте, <Аноним>, Вы писали:
А>1) Можно ли использовать WCF + Tcp binding + полное шифрование трафика
Можно. Самый интероперабельный — TLS. Самый простой в использовании, наверное — WindowsStreamingSecurity. Хуже того, в WCF зашита такая фича — если нет шифрования канала или сообщения, то не передаются критичные к просмотру credentials (username/password например).
А>2) Можно ли как-то использовать handshake аутентификацию для передачи пароля?
Можно. Схема обработки claim sets изначально на это заточена. Подробности в документации и вроде бы был стандартный пример на эту тему. Ну и можешь еще исходники стандартных аутентификаторов поглядеть — у многих хендшейк используется.
А>3) Как моментально отсобачить клиента, достаточно ли кинуть исключение на сервере? (для session based) Безопасно ли показывать причину клиенту (сам эксепшен)?
Не очень понятен вопрос.
А>4) Хочу сделать n интерфейсов, т.е. изначально клиент может присоединятся только к 1-му интерфейсу. После некоторых вызовов у этого интерфейса по некой логике (например 2)) А>хочу чтобы клиенту стал доступен 2-ой интерфейс и т.д. как можно организовать такое?
Опять же не очень понятен вопрос. Если речь о том, чтобы эти интерфейсы были у одного экземпляра сервиса — без проблем. Указываешь, что сервис синглтон или на сессию, и регистрируешь для него несколько эндпоинтов с разными интерфейсами.
... << RSDN@Home 1.2.0 alpha 4 rev. 1476 on Windows 7 6.1.7600.0>>
Здравствуйте, adontz, Вы писали:
А>>А можно по подробнее? Я так понял это использую сертификаты и HTTP?
A>Да. Правда не думаю что только для HTTP, хотя и не уверен.
TLS тем и отличается от SSL 2.0, что не привязан к HTTP.
... << RSDN@Home 1.2.0 alpha 4 rev. 1476 on Windows 7 6.1.7600.0>>
Здравствуйте, AndrewVK, Вы писали:
AVK>TLS тем и отличается от SSL 2.0, что не привязан к HTTP.
А SSL 2.0 был привязан к HTTP? А в чём это выражалось?
"Нормальные герои всегда идут в обход!"
Re[2]: WCF: Handshake
От:
Аноним
Дата:
02.11.10 12:06
Оценка:
Здравствуйте, AndrewVK, Вы писали:
Cпасибо за развернутый ответ!
AVK>Здравствуйте, <Аноним>, Вы писали:
А>>1) Можно ли использовать WCF + Tcp binding + полное шифрование трафика
AVK>Можно. Самый интероперабельный — TLS. Самый простой в использовании, наверное — WindowsStreamingSecurity. Хуже того, в WCF зашита такая фича — если нет шифрования канала или сообщения, то не передаются критичные к просмотру credentials (username/password например).
А можно ссылку? Я погуглил, че то видать плохо гуглил . Можно ли использовать пароли не связанные с Windows? Что-то типа shared secret?
Правильно ли я понимаю что шифрование уже есть по умолчанию?
А>>2) Можно ли как-то использовать handshake аутентификацию для передачи пароля?
AVK>Можно. Схема обработки claim sets изначально на это заточена. Подробности в документации и вроде бы был стандартный пример на эту тему. Ну и можешь еще исходники стандартных аутентификаторов поглядеть — у многих хендшейк используется.
Здесь посмотрю документацию.
А>>3) Как моментально отсобачить клиента, достаточно ли кинуть исключение на сервере? (для session based) Безопасно ли показывать причину клиенту (сам эксепшен)?
AVK>Не очень понятен вопрос.
Как отсоеденить клиента от сервера. Допустим серверу он показался подозрительным
А>>4) Хочу сделать n интерфейсов, т.е. изначально клиент может присоединятся только к 1-му интерфейсу. После некоторых вызовов у этого интерфейса по некой логике (например 2)) А>>хочу чтобы клиенту стал доступен 2-ой интерфейс и т.д. как можно организовать такое?
AVK>Опять же не очень понятен вопрос. Если речь о том, чтобы эти интерфейсы были у одного экземпляра сервиса — без проблем. Указываешь, что сервис синглтон или на сессию, и регистрируешь для него несколько эндпоинтов с разными интерфейсами.
Здравствуйте, <Аноним>, Вы писали:
А>А можно ссылку?
На что? Это все в MSDN описано, причем подробно.
А> Можно ли использовать пароли не связанные с Windows?
Можно.
А> Что-то типа shared secret?
Можно.
А>Правильно ли я понимаю что шифрование уже есть по умолчанию?
По умолчанию — понятие сложное, но в стандартных конфигурация обычно шифрования нет — хотя бы потому что для TLS требуются сертификаты.
AVK>>Не очень понятен вопрос. А>Как отсоеденить клиента от сервера. Допустим серверу он показался подозрительным
Постоянное соеднение обычно и не устанавливается. Т.е. просто режектишь запрос и все.
AVK>>Опять же не очень понятен вопрос. Если речь о том, чтобы эти интерфейсы были у одного экземпляра сервиса — без проблем. Указываешь, что сервис синглтон или на сессию, и регистрируешь для него несколько эндпоинтов с разными интерфейсами.
А>Что-то в таком духе?
А>