Как лучше всего защитить .net Webservice от каналов и обновлений программного обеспечения?

Я прочитал много-много-много статей о безопасности WCF и т.д ... но я действительно не понимаю, какой метод защиты моего программного обеспечения является лучшим.

Проблема: мое клиентское программное обеспечение [CS] должно вызывать мой веб-сервис [WS]. CS вызывает функции в WS много раз во время своего рабочего времени, потому что, когда пользователь щелкает элемент в списке, пользователь хочет увидеть некоторую подробную информацию, которая хранится на моем сервере и часто обновляется. Добавление к этому CS отправляет в WS много информации во время выполнения, чтобы обновить некоторую статистику (и проверить, что с лицензией все в порядке).

Зачем внедрять безопасность: - У CS будет платная подписка для ее использования, поэтому я должен защищаться от пиратства. - WS отправляет в CS горячую информацию, которую больше никто не должен принимать. - CS отправил горячую информацию в WS. WS хранит его, и я хочу, чтобы вредоносная информация не отправлялась «Человеком посередине»

очевидно, я хочу, чтобы каждое отправленное / полученное сообщение было УНИКАЛЬНЫМ, чтобы никто не мог снова отправить сообщение на WS.

Запрос: - Клиент должен убедиться, что WS является официальным WS, а не взломанным прокси-сервером / эмуляцией WS - WS должен знать, кто CS отправляет сообщение, чтобы он мог проверять номера лицензий / подписок и возвращать результаты на основе Счет.

Какую стратегию лучше всего выбрать?

Ограничения: - Вероятно, изначально я не могу купить действующий сертификат SSL (но я куплю его, если кто-то купит мою подписку) - WS будет на общем хостинге Windows (поэтому я думаю, что НЕТ SSL)

я читал о безопасности транспорта, безопасности сообщений и их гибридных. но какое свойство устанавливать? какой метод аутентификации используете? «Сертификат х.509»? «Служба безопасных токенов»? "Имя пользователя"?

Спасибо всем!

ОБНОВЛЕНИЕ: Спасибо, JonoW! Хорошо, я могу позволить себе VPS ... но не настоящий сертифицированный сертификат ... я думаю, мне не нужен настоящий сертификат. чтобы проверить лицензию, я могу заставить CS отправлять обработанный серийный номер, полученный из аппаратных серийных номеров ... мне просто нужно, чтобы клиент не использовал программное обеспечение одновременно на нескольких ПК. поэтому, если кто-то клонирует / украл учетные данные другого пользователя, я заблокирую учетную запись или автоматически сброшу пароль пользователя.

Проблема в том, чтобы просто избежать того, чтобы кто-то имитировал сообщение «это имя пользователя / пароль / серийный номер с действующей лицензией» моего WS и отправлял его с поддельного WS и избегал отправки злонамеренных данных на мой WS, выдавая себя за другого клиента ... как вы думаете, SSL а сертификат Verisign единственный выход? Почему "Secure Token Service" или "Username / Password" - не лучшая идея?


person Alex    schedule 10.03.2011    source источник


Ответы (1)


Использование сертификатов X.509 с WCF, вероятно, поможет вам достичь большей части желаемого, но это все равно означает покупку сертификата в центре сертификации. Это также означает, что клиентам необходимо будет установить сертификаты на своей стороне, что может быть неразумно просить их сделать.

Использование SSL означает, что вы можете быть уверены, что данные не были подделаны при передаче, и вы можете быть уверены, что данные от WS являются подлинными, но WS не сможет гарантировать, что данные, отправленные с CS, определенно получены от лицензированного client, для этого вам понадобится какой-то другой механизм.

Что касается использования SSL на общем хосте, это, очевидно, зависит от хоста, некоторые могут это разрешить. Может быть, подумайте об использовании VPS?

Обновить

Почему "Secure Token Service" или "Username / Password" - не лучшая идея?

Оба этих решения докажут WS, что клиент является действующим пользователем, но клиент не может гарантировать, что WS является подлинным WS. Т.е. хакер может изменить настройки DNS для маршрутизации трафика, предназначенного для WS, на их собственный сервер, чтобы ответить, что пользователь / лицензия действительна, даже если это не так. Вот где помогает SSL, потому что клиент знает, что сертификат SSL подлинный (это делается за вас через .Net), тогда, если данные, которые можно расшифровать с WS с использованием сертификата SSL, ДОЛЖНЫ быть получены от WS, а не "фальшивый" WS.

person JonoW    schedule 10.03.2011