Прежде всего я не смог найти под <binding>
дочерний элемент
<security mode="Message">
<message clientCredentialType="Windows" />
</security>
Вы должны вставить его в web.config
(или App.config
). Он будет соответствовать используемому в настоящее время режиму защиты сообщений на стороне клиента.
Более того, немного странно, что вы не размещаете службу WCF на сервере IIS. Использование настраиваемой службы Windows, установленной в качестве локальной службы, на самом деле не лучший выбор для успешного решения. Это ваша окончательная конфигурация или вы планируете разместить ее в конце под IIS? Если это открытый вопрос, я мог бы опубликовать вам несколько ссылок, где описаны преимущества и недостатки различных способов хостинга. Существуют ли некоторые важные требования, чтобы служба WCF работала под учетной записью LocalSystem
? Не могли бы вы вкратце описать, что делает сервис WCF? У меня есть проблема, чтобы дать вам рекомендацию сделать слишком много ограничений на стороне сервера, что может сделать основную работу WCF невозможной. С другой стороны, чтобы иметь минимальные привилегии prinzip, чтобы получить более безопасное решение.
Это еще не окончательный ответ, только первые замечания.
ОБНОВЛЕНО : Привет! Теперь у меня есть время закончить мой ответ. Прежде всего я хочу подтвердить, что, как и Стефан Эгли (см. Другой ответ), я уверен, что пароли не будут отправлены в виде открытого текста. Я только не уверен, как именно работает аутентификация Windows, если у вас нет Active Directory. Вероятно, это работает как аутентификация NTLM с учетными записями локального сервера. Небольшая проблема заключается только в том, что если вы используете этот NTLM, вы не можете быть уверены на стороне клиента, что вы действительно работаете со своим сервером WCF. В таких случаях очень полезно использование сертификата.
Одним из способов, который предложил также Стефан Эгли в своем ответе, является SSL. Он не только выполняет шифрование данных, но и аутентифицирует сервер с помощью SSL-сертификата. Если вы выберете способ перехода в режим сообщений на TransportWithMessageCredential.
Если клиентский компьютер, с которого вы выполняли удаленное администрирование, не является бесплатным неуправляемым клиентом и вы можете установить на него некоторые компоненты, я настоятельно рекомендую вам использовать аутентификацию на основе сертификатов и шифрование данных (см. http://www.codeproject.com/KB/WCF/9StepsWCF.aspx) и установите соответствующие сертификаты как на стороне сервера, так и на стороне клиента. Этот способ является наиболее безопасным, и после внедрения вы получите аутентификацию и шифрование как клиента, так и сервера.
В разделе http://www.codeproject.com/KB/WCF/9StepsWCF.aspx вы найдете пошаговую информацию о том, как создавать и использовать сертификаты клиента и сервера в WCF. Хочу только отметить, что утилиту MakeCert.exe из Windows SDK можно использовать не только для создания самозаверяющих сертификатов, но и для создания небольшой PKI. Вот пример:
С
MakeCert.exe -pe -ss MY -a sha1 -cy authority -len 4096 -e 12/31/2020 -r
-n "CN=My Company Root Authority,O=My Company,C=DE" MyCompany.cer
вы создаете «самоподписанный» -Сертификат «root» и сохраняете его, если в хранилище сертификатов MY (персональный) сертификатов (альтернатива переключателю -sv, вы можете сохранить закрытый ключ в файле PVK). Вы также экспортируете его в MyCompany.cer (но без закрытого ключа), чтобы упростить его установку на клиентских и серверных компьютерах в Trust Root. Затем вы можете создать два других сертификата: один для сервера и другой для аутентификации клиента, используя корневой сертификат для подписи этих двух сертификатов. Вы можете делать абсолютно то же самое, что и в случае наличия сервера сертификатов (службы сертификатов), например http://www.codeproject.com/KB/WCF/wcf_certificates.aspx
См. Например http://blogs.microsoft.co.il/blogs/applisec/archive/2008/04/08/creating-x-509-certificates-using-makecert-exe.aspx для дополнительных примеров.
Другие ссылки важны
http://msdn.microsoft.com/en-us/library/cc949011.aspx, "Статьи с инструкциями" от http://msdn.microsoft.com/en-us/library/ff648902.aspx
и http://msdn.microsoft.com/en-us/library/ff650794.aspx может быть полезным для вас.
Статья http://msdn.microsoft.com/en-us/library/ms789011.aspx, как сделать некоторые вещи в коде клиента (как вы делаете сейчас).