2008-11-11 3 views
6

Служба WCF включает в себя передачу данных (в формате CSV) данных между клиентом и службой. Этот набор данных должен быть зашифрован, чтобы данные не могли быть перехвачены. Я использую WsHttpBinding и пытается зашифровать сообщение, используя следующие настройки в web.config:WCF - Как шифровать сообщения?

<wsHttpBinding> 
    <binding name="wsHttp"> 
    <reliableSession enabled="true" /> 
    <security mode="Message"> 
     <message clientCredentialType="UserName" algorithmSuite="TripleDes" /> 
    </security> 
    </binding> 
</wsHttpBinding> 

Когда я пытаюсь сгенерировать прокси клиента я получаю MessageBox долго об ошибке (которое не может быть полностью читать потому, что он идет в нижней части экрана!). В сообщении об ошибке упоминается что-то о том, что «сертификат службы не предоставляется».

Как зашифровать сообщение? Мне нужен сертификат? Я должен упомянуть, что эта услуга будет использоваться через Интернет из разных доменов, поэтому я не уверен, является ли использование безопасности «Username» лучшим вариантом (?)

В основном я в замешательстве!

ответ

4

Да, вашему обслуживанию нужен сертификат, чтобы ваши ключи шифрования можно было безопасно обменивать. Вы можете создать сертификат проверки тестовой службы с помощью makecert.exe. Для получения дополнительной информации см. this entry in my blog.

Вам также необходимо убедиться, что учетная запись вашей службы запущена, так как она может читать файл закрытого ключа сертификата. Если вы используете Windows Vista (или более позднюю версию), оснастка «Сертификаты» MMC позволяет вам управлять разрешениями для этого закрытого ключа, но для более ранних версий Windows это немного сложнее. Я использовал утилиту, которая поставлялась с WSE3, но кто-то другой мог бы предложить более прямой путь. Если ваша служба работает как администратор, вам, скорее всего, придется настроить эти разрешения.

Обновление: как и все хорошие вещи, мой блог подошел к концу. Спасибо makerofthings7, чтобы напомнить мне. Команда MakeCert вам необходимо сгенерировать сертификат проверки подлинности службы что-то вроде этого ...

makecert -sr LocalMachine -ss My -pe -n CN=subject-name -eku 1.3.6.1.5.5.7.3.1 -sky exchange 

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

+0

Ссылка на данный момент отсутствует – LamonteCristo 2011-04-08 04:58:12

4

@ Мартин прав, вам нужен сертификат на сервере. This link имеет хороший обзор потока сообщений для безопасности на основе сообщений и содержит пример кода. This link имеет хороший обзор работы с сертификатами.

Для ваших требований по аутентификации this link рассматривает различные доступные варианты. Если вы новичок в WCF, Learning WCF: Практическое руководство от Michele Bustamante - хорошая книга и охватывает безопасность на основе сообщений.

1

Я все еще пытаюсь найти решение этой проблемы. У меня тоже есть, но с подписанием xml. Чтобы найти пользователя, IIS запускается в WinXP. Пуск> Щелкните правой кнопкой мыши Мой компьютер> Управление> Службы и приложения> Службы> IIS Admin> Дважды щелкните, а на вкладке «Вход» обычно указывается «Локальная система».

EDIT

ОК, это, как я решить мою проблему. У меня был ceritificate, что я использовал это article , чтобы сделать сертификат. Если проект представляет собой ASPWebSite, который сохраняется в вашей папке C, у вас могут не возникнуть проблемы с этим. Но если его сохранить в IIS в качестве HTTP-проекта, тогда у вас будут проблемы.

Способ решить его после нескольких недель расследования не так уж сложно.У Microsoft есть что-то, называемое улучшением веб-сервисов, которое вы будете загружать последним, но я использую второй с последним пакетом обновления. Когда я установил, я включил все.

Сертификаты могут быть в физическом файле, но обычно они находятся в хранилище сертификатов для управления им с помощью инструмента инструмента X509 инструмента в WSE 2.0. Здесь откройте свой сертификат, ищите его в разных разделах, пока не найдете его. Затем откройте его, а внизу появится вид секретного ключа, на вкладке безопасности добавьте LOCALHOST \ ASPNET. И это должно позволить вашему веб-сайту прочитать сертификат.

Вкратце, что происходит, когда вы создаете открытый и закрытый ключи, хотя вы можете видеть закрытый ключ просто отлично, он действительно отправляет Timbuktu в файловую систему, и вам нужно найти его для добавления учетной записи ASPNET для доступа для чтения. Я читаю, чем в Vista, это намного проще, но я использую XP.

Смежные вопросы