Как защитить службу WCF, не размещенную в IIS

Я искал правильный способ защитить службу WCF, которая размещена в службе Windows и в приложении WPF Desktop соответственно (2 службы).

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

В ореховой скорлупе - вот сценарий ...

У меня есть служба Windows, которая позволяет клиентским приложениям подключаться к ней в корпоративной сети.

Все коммуникации здесь находятся за корпоративным брандмауэром. Никаких публичных выступлений.

Теперь - мне удалось заставить все работать нормально, используя basichttpBinding, на котором включена проверка подлинности Windows.

Проблема в том, что мне нужно передавать все безопасно - без использования http.

Итак - я подумал, что будет относительно простой задачей просто сгенерировать сертификат (не обязательно быть коммерческим сертификатом - подойдет только сертификат разработчика с использованием MakeCert), и я могу загрузить этот сертификат из файла и защитить трафик с помощью этого - о как я был неправ !! Это непросто из того, что я прочитал.

Для сравнения - существует 100 серверов, на каждом из которых работает служба, и к этой службе будут подключаться более 500 клиентов для настольных ПК. При необходимости с каждым клиентом можно связаться с любого из 100 серверов.

Кроме того, серверам разрешено связываться друг с другом, если они того требуют, и они это делают регулярно.

Создание 600+ сертификатов и загрузка их в репозиторий сертификатов каждой машины на самом деле не вариант - и можете ли вы представить себе обновления через год или два ...

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

Пока - мне совершенно не удалось найти, как это сделать - на самом деле - теперь я не уверен, какой правильный способ сделать это и был ли мой подход с использованием basichttpbinding правильным.

Я также пробовал пойти по пути net.tcp вместо http, но я не мог заставить генератор справочников службы Visual Studio найти службу - или, если он это делал, это всегда выходило из строя с ошибками.

Учитывая сценарий, который я описал выше, не мог бы кто-нибудь подсказать мне, как правильно установить шифрованную связь между сервером и клиентом (и наоборот). Могу ли я внести несколько небольших изменений в мои basicHttpBindings, чтобы включить ssl, используя мои одиночные серверные или клиентские сертификаты, или я продвигаю пресловутую! ^ & #% В гору?

Мы будем приветствовать любые советы или ссылку на руководство, которое может соответствовать описанному мной сценарию, чтобы я мог отсортировать его.

Любая помощь приветствуется

С уважением

Стержень.


person Roddles    schedule 11.09.2011    source источник


Ответы (1)


О чем ты говоришь? У вас 100 серверов в корпоративной сети с 500 рабочими столами, и у вас нет внутреннего центра сертификации, которому доверяют все эти машины? В корпоративной сети с Active Directory это должно быть просто задачей, потому что каждая машина, скорее всего, уже имеет свой собственный сертификат, а если нет, он может запросить сертификат у локального центра сертификации Active Directory, и он просто получит его без необходимости вручную манипулировать с помощью сертификат. Он также может обрабатывать обновление сертификата. Вам нужно только назначить этот сертификат для правильного порта на каждой машине с помощью netsh - Я считаю, что это тоже можно как-то автоматизировать. Вопросы о том, как использовать корпоративный CA, AD или автоматизировать назначение сертификатов в корпоративной сети, относятся к Server Fault.

Говорить о безопасности и в то же время распространять один и тот же сертификат с закрытым ключом на 600 машин - это нонсенс. Любая машина сможет расшифровать трафик, нацеленный на любую другую машину = это то же самое, что и отправка данных в base64 через HTTP, и называть это безопасностью.

person Ladislav Mrnka    schedule 11.09.2011
comment
ну извините за вопрос - хорошее отношение! - person Roddles; 11.09.2011
comment
Мне жаль. Это не должно было быть высокомерием. Я просто пытался указать вам, что должно быть лучшее решение, потому что ваше решение - кошмар обслуживания, и оно не обеспечивает безопасности, на которую вы рассчитываете. - person Ladislav Mrnka; 11.09.2011
comment
не беспокойтесь - я, вероятно, был чрезмерно чувствителен после долгих и разочаровывающих выходных, пытаясь понять это (среди прочего). В любом случае - из того, что вы написали - я должен использовать сертификаты локальной машины и назначить их соответствующему порту? - person Roddles; 12.09.2011
comment
хорошо - удалось отсортировать его, и да - использование сертификатов локальной машины сработало. Спасибо за вашу помощь. - person Roddles; 12.09.2011