Безопасность на уровне сообщений WCF - PullRequest
3 голосов
/ 29 января 2009

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

Прошу помощи :) С уважением Андрис

Ответы [ 3 ]

11 голосов
/ 29 января 2009

На самом деле сертификаты - это действительно путь! Я настоятельно советую вам использовать сертификаты! Это не так сложно. На самом деле это ваша проблема: «домены не доверяют друг другу». С сертификатами вы получите домены, которые доверяют друг другу. Вот пошаговая инструкция, как это сделать:

1) Вы должны создать сертификат на клиенте. Для этого перейдите в меню «Пуск» -> «Выполнить» -> введите «cmd» и нажмите Enter В окне консоли введите: makecert.exe MakeCert -pe -ss My -sr LocalMachine -a sha1 -sky exchange -n CN = ClientCertificateName (измените "ClientCertificateName" на выбранное вами имя)

2) сделать то же самое на сервере, меняя имя сертификата!

3) после выполнения шагов 1) и 2) на вашем клиенте и на сервере установлены свои самозаверяющие сертификаты. Теперь вам нужно экспортировать эти сертификаты и импортировать сертификат клиента в папку TrustedPeople сервера и импортировать сертификат сервера в папку TrustedPeople клиента. Для этого -> меню «Пуск» -> «Выполнить» -> введите «mmc» и нажмите Enter.

4) Чтобы открыть хранилище сертификатов, перейдите в «Файл» -> «Добавить / удалить оснастку» -> в новом окне выберите «Сертификаты» (слева) и нажмите «Добавить» -> «ОК» -> «Учетная запись компьютера» -> Далее -> Готово -> ОК
После этого откроется консоль сертификатов. Разверните узел сертификатов (слева) и перейдите к узлу Личные / Сертификаты. Там вы найдете сертификат, только что созданный в предыдущих шагах. Щелкните правой кнопкой мыши сертификат и экспортируйте его, включая закрытый ключ. Сохраните экспортированный сертификат в файл. Затем скопируйте этот файл на другой компьютер и импортируйте его в узел «Доверенные люди / сертификаты».

5) Повторите шаг 4) и для другой машины - конечная цель - импортировать сертификат Клиента на машину хоста и наоборот
Теперь, когда вы (надеюсь) настроили сертификаты, вы должны сообщить службе об их использовании. Для этого вы можете использовать файл web.config (app.config) вашего приложения или написать код.

<security mode="Message">
    <message clientCredentialType="Certificate" />
</security>

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

    <behaviors >
    <endpointBehaviors>
        <behavior name="your_binding_behavior">
            <clientCredentials>
                <clientCertificate findValue="[The name of the client certificate here]"
                                   storeLocation="LocalMachine"
                                   storeName="My"
                                   x509FindType="FindBySubjectName"/>
                <serviceCertificate>
                    <defaultCertificate findValue="[The name of the server certificate here]"
                                        storeLocation="LocalMachine"
                                        storeName="TrustedPeople"
                                        x509FindType="FindBySubjectName"/>
                    <authentication certificateValidationMode="PeerOrChainTrust"/>
                </serviceCertificate>
            </clientCredentials>
        </behavior>
    </endpointBehaviors>
</behaviors>


И это все! Тебе хорошо идти! Для получения дополнительной информации об этом вы можете прочитать эту статью . А вот еще более подробный .

НТН

2 голосов
/ 30 января 2009

Если у меня нет чего-то здесь, если ваша цель - зашифровать данные между сервером и клиентом, вам нужно только создать сертификат на сервере и установить MessageClientCredentialType = "None" в службе WCF web.config

В Интернете опубликованы десятки "пошаговых инструкций", некоторые из которых лучше, чем другие. Я тоже боролся с защитой службы WCF, пока не нашел это пошаговое руководство:

http://blog.functionalfun.net/2008/05/how-to-create-server-certificate-for.html

0 голосов
/ 29 января 2009

Я также считаю, что безопасность на уровне сертификатов - это лучший способ - как и в случае безопасности на уровне сообщений, клиент и сервер должны будут зашифровать сообщение - http://msdn.microsoft.com/en-us/library/ms731172.aspx - или также могут попробовать MixedModesecurity - отличное руководство здесь - http://blogs.msdn.com/govindr/archive/tags/WCF/default.aspx

http://blogs.msdn.com/jmeier/archive/2008/03/27/patterns-and-practices-wcf-security-guidance-now-available.aspx и http://www.codeplex.com/WCFSecurity - другие ресурсы для хорошего руководства.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...