2009-04-23 3 views
6

У меня есть клиент/серверное приложение WCF, для которого требуется некоторая аутентификация пользователя по отношению к базе данных. Приложение (как клиент, так и сервер вместе) разрабатывается для продажи десяткам клиентов для использования в их интрасетях. Мы не слишком беспокоимся о том, чтобы шифровать большую часть данных, перемещаемых по кабелю, за исключением, конечно, во время аутентификации.WCF, безопасность и сертификаты

Думая о безопасности WCF, я все время возвращаюсь к идее, что мы должны использовать сертификаты x509. Тем не менее, наши клиенты, безусловно, не хотят знать ни о каких деталях, связанных с необходимостью подачи заявок, приобретения и установки этих сертификатов.

Я хотел бы знать, прежде всего, какой предпочтительный метод заключается в реализации аутентификации имени пользователя и пароля в этом сценарии. Если это потребует использования сертификатов, должен ли клиент подавать заявку на получение своих сертификатов из доверенного ЦС, или мы можем, поскольку поставщик программного обеспечения генерирует сертификаты для использования клиентом?

Действительно я ищу наилучшую практику с наименьшим трением для наших клиентов.

Спасибо!

Редактировать: Я использую NetTcpBinding, а мой сервер работает как служба Windows.

ответ

5

Таким образом, имя пользователя и пароли не требуют сертификатов клиента, поскольку, как я уверен, вы знаете, для этого требуется только HTTPS-сертификат на сервере, на котором размещена служба WCF, - после того, как у вас есть, вы можете с радостью использовать стандартное имя пользователя/пароль auth bits (WCF не разрешает аутентификацию на основе сообщений без HTTPS).

Если вы хотите опустить корень сертификата клиента, вы получаете преимущество отказа от отказа - вы можете быть уверены, что отправка машины - это тот, кто говорит, что это (если кто-то не украл сертификат, что менее вероятно, чем комбинация имени пользователя и пароля, идущая вокруг). Вы, как поставщик программного обеспечения, можете действовать как собственный центр сертификации и генерировать собственные сертификаты клиентов (есть несколько способов сделать это в зависимости от вашей инфраструктуры), но тогда вам нужно настроить клиентов на доверие вашему корневому ЦС.

Если сервер и клиент работают в доменной среде, вы можете использовать transport security with Windows authentication (вы используете привязку tcp, поэтому совместимость выходит из окна в любом случае!) Дополнительный бонус к этому заключается в том, что аутентификация прозрачна, Вам нужны какие-либо сертификаты в любом месте. Если вы хотите проверить идентификацию сервера, то message security with Windows authentication сделает трюк.

+0

Спасибо! Я забыл упомянуть, что я использую NetTcpBinding. Кроме того, помните, что сервер развертывается и для нескольких клиентов, что является основным источником моей проблемы с сертификатами. – chris

+0

OK обновлено ответ – blowdart

1

Если вы собираетесь пересекать границы брандмауэра, сертификаты будут вашим лучшим решением. Я мало знаю о специфике приложений для сертификатов или вашего приложения. К сожалению, насколько я знаю, я думаю, вам нужно будет помочь им подать заявку на сертификаты или им придется делать это самостоятельно, если они не хотят предпринимать в процессе установки своего собственного сервера сертификатов. Если приложение будет внутренним, тогда проверка подлинности Windows будет работать и ОЧЕНЬ легка, но если вы думаете, что у вас будут клиенты, которые будут использовать ваше приложение через границы брандмауэра, вы можете также потратить время на использование сертификатов, потому что сертификаты будут работать повсюду. Теперь есть что-то вроде федеративной безопасности, где вы делегируете разрешение на аутентификацию другому объекту. Я думаю, что это используется, если вы говорите, что у вас есть домены, и вы хотите делегировать разрешение, заявив кого-то из другого домена, который не находится в вашем домене, но его довольно сложно, и я понимаю его очень ограниченный, но звук ваших требований сертификаты - это путь.

безопасность не должна быть легко :)

2

У меня есть проект в области производства, который аналогичен ваш сценарий. У меня есть конечные точки обслуживания Windows Service через netTCPBinding, и я использовал сертификаты x509 ... хотя в моем случае целью было зашифровать как уровни транспорта, так и сообщения, поскольку я пересекал недоверенные границы безопасности. Я был менее озабочен предоставлением аутентификации/авторизации, кроме требования наличия сертификата.

Как и в ваших сценариях интрасети (я предполагаю), у меня была власть над сервером и клиентскими машинами во время установки ... или, по крайней мере, могла диктовать некоторые условия установки.

Вместо того, чтобы покупать сертификаты x509 и обременять клиента этими расходами, я решил бросить свои собственные. Мы установили один из наших серверов Win2003 в качестве центра сертификации, выпустив собственный сертификат Certification Authority. Затем мы сгенерировали сертификат x509 для сервера, а также отдельные сертификаты x509 для клиентов.

Клиентские и серверные сертификаты были установлены как на клиентском, так и на сервере (в зависимости от ситуации) в хранилище личных пользователей на уровне компьютера. Мы также установили наш сертификат CA непосредственно в раздел «Доверенные корневые центры сертификации», что сделало доверенные сертификаты наших клиентов и серверов.

Поскольку я был менее озабочен аутентификацией/авторизацией, я не знаю, что рекомендовать в качестве лучшей практики для работы с привязкой сертификатов к отдельным пользователям и более гранулярным, чем машинный уровень (моим решением была служба Windows для окон служебная связь - полностью без присмотра). Я думаю, вам понадобится сертификат для каждого пользователя, установив его в свой личный магазин пользователей в сертификатах MMC. Реализация времени выполнения будет определяться тем, как вы настраиваете WCF для выполнения поиска сертификатов, поэтому это должно быть довольно просто.

На протяжении всего процесса я в значительной степени полагался на то, что я узнал из этой замечательной статьи CodeProject: Securing WCF Services with Certificates. Он проводит вас через создание/установку сертификатов. Образец приложения WCF является IIS-хостингом, но мне удалось довольно легко перевести разделы конфигурации из web.config в app.config.

В моем случае я выставил веб-интерфейс для запроса сертификатов в Win2003 на веб-сайт, поэтому клиент может запросить сертификаты непосредственно в будущем. У нас есть контроль над одобрением, поэтому он работает хорошо. Мне еще не нужно было создавать новые сертификаты, поэтому я не могу сказать, сколько трений может повлечь за собой.

+0

Благодарим за ссылку CodeProject. –

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