Я прочитал много-много-много статей о безопасности 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" - не лучшая идея?