2009-04-15 8 views
2


В одном решении VS есть два проекта: клиент (wpf app) и wcf service lib.
Я использую защиту сообщений и пользовательский AspNetMembershipPrivider на стороне сервера для проверки имени пользователя и передачи.
Поскольку я не использую систему безопасности Windows, мне приходилось использовать сертификат на сервере, чтобы установить безопасный chanell, и что я сделал:
- открыл мой локальный менеджер IIS и добавил самозаверяющий сертификат с именем likemy dev machine.
- проверено, что этот сертификат появился в оснастке «Сертификаты» под персональными сертификатами
- настроенный wcf .config, чтобы указать на этот сертификат.
- начал мое приложение-клиент в VS (и VS также запустил приложение wcfhost для моей wcf lib)
Все было в порядке, wcfhost работал нормально, и мои службы работали нормально, пока я не перезагрузился. После перезагрузки wcfhost заявила, не жалуется:wcf certificate Keyset не существует проблемы после перезагрузки

 
The certificate 'CN=xxx' must have a private key that is capable 
of key exchange. The process must have access rights for the private 
key. ---> 
System.Security.Cryptography.CryptographicException: Keyset does not exist 

Единственное, что helpes воссоздает свой сертификат, и снова до перезагрузки. Как я уже говорил выше, моя служба работает под моей учетной записью пользователя (локальный администратор), поэтому я не думаю, что проблемы с моими файлами c: \ Users \ xxx \ AppData \ Roaming \ Microsoft \ Crypto \ RSA \ являются проблемой.

Причина, по которой я использую диспетчер iis для создания сертифицированных, а не makeert и т. Д., Заключается в том, что я хочу, чтобы все работало над моей общей учетной записью osting у меня есть (есть опция в панели хостинга создания самозаверяющих сертификаты).

Может ли кто-нибудь помочь с этим? Спасибо

ответ

1

Я решил проблему.
Я запускаю Vista на своем dev-боксе с UAC. Неделю назад я изменил способ запуска Visual Studio и, видимо, я не заметил, что работал в VS, без опции «Запуск от имени администратора». Вот почему WcfHost, прославившийся VS, также имел ограниченные права. Мой плохой, я редко перезапускаю VS, это обычная практика, когда VS работает в течение недели или двух, например, unreal3, объединенный синхронно.

К сожалению, кто-нибудь скажет, что у меня возникнут проблемы с правами доступа для сертификатов на общем хостинге (IIS7) с защитой сообщений? или я должен настроить таргетинг на транспортную безопасность.

+0

А, я забегал в «run as admin» на моем домашнем компьютере (vista). Я не ожидаю, что у вас будут трудности с защитой IIS7 и сообщений, если учетная запись службы, в которой работает этот процесс, имеет права доступа к сертификату. В любом случае у вас будет такая же проблема с сертификатом безопасности на транспорте. CodePlex - http://www.codeplex.com/WCFSecurityGuide имеет полезную информацию и контрольные списки для разных сценариев, которые помогут охватить все, что вам нужно. – Tanner

2

Сертификаты довольно сложны из моего опыта (я уверен, что другие прогуливались через него). Видя, как вы бы это работает, кажется, что вы уже почти там, так что мои РЕКОМЕНДАЦИИ вращаются вокруг установки в сертификаты другим способом:

  • Использование SELFSSL.EXE - доступны как часть IIS6.0 resource kit с следующая команда: SelfSSL.exe/T/N: CN = localhost/V: 999/Q (вы можете заменить localhost на имя сервера). Это создаст сертификат и установит его в IIS, действительном в течение 999 дней.
  • Использование winHttpCertCfg - доступны Microsoft с помощью следующей команды: winHTTPCertCfg.exe -g -c LOCAL_MACHINE \ мой -s -a локальный ServiceAccount (replaceing локальный и ServiceAccount соответственно), чтобы дать учетной записи службы вы работаете он находится под доступом к закрытому ключу certs.

Дайте мне знать, если вам повезло!

+0

Благодарим за консультацию и особенно за ссылку на комплект iis. есть действительно хороший пример развертывания сертификатов (IISCertDeploy.vbs). – 2009-04-16 23:12:23

1

Запуск от имени администратора приведет к нарушению защиты сертификата, который работает. Но решение заключается в предоставлении имени пользователя, под которым ваш сервер работает с сертификатом. В оснастке щелкните правой кнопкой мыши сертификат и выполните все задачи -> управлять закрытыми ключами -> Добавить группу или имя пользователя. Для IIS измените местоположение на локальный компьютер, а имя пользователя - «IIS AppPool/xxxxx», где xxxxx - это имя пула приложений IIS, в котором запущено приложение, которое хочет использовать сертификат. Если вы это исправите, кнопка «проверить» сообщит вам об этом. Я также проделал это в IIS Express, но не помню, что я сделал! Я должен был запустить IIS Express, найти его в диспетчере задач и использовать столбец сведений, чтобы узнать, с каким именем пользователя он находился. Надеюсь это поможет. Работал для меня.

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

  • Нет связанных вопросов^_^