Доступ к свойствам сертификата клиента из службы WCF - PullRequest
3 голосов
/ 14 февраля 2011

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

Я ищу свойство или метод, аналогичный Request.ClientCertificate из ASP.NET 2.0 дней, но не могу найти ничего, что обеспечивает легкий доступ к клиентскому сертификату.

Наш сервис настроен так, что он работает с SSL с использованием basicHttpBinding и режима безопасности «Транспорт».

IIS был настроен для Требовать SSL и Принять сертификаты.

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

Я создал пользовательскую реализацию IDispatchMessageInspector, чтобы проверить, есть ли оттуда доступ к клиентскому сертификату.но безрезультатно.

Кто-нибудьпробовали это и имели успех раньше?

Ответы [ 2 ]

4 голосов
/ 14 февраля 2011

Похоже, что лучшим вариантом для вас было бы внедрить специальный сертификат для вашего сервиса.Это в основном класс, который наследуется от X509CertificateValidator и затем регистрируется через файл конфигурации.

Более подробная информация о том, как это сделать на статья .

2 голосов
/ 16 февраля 2011

Для справки, если кто-то еще пытается применить аутентификацию сертификата клиента, для его работы потребовались следующие шаги (для этого экземпляра мы используем basicHttpBinding в WCF и работаем в локальном экземпляре IIS):

  1. Настройка IIS для использования привязки HTTPS для сайта и защита его в IIS с помощью сертификата сервера
  2. В IIS измените параметры SSL для вашего сайта на Требовать SSL и Требовать клиентские сертификаты (Это должно быть Требовать- Принять не будет работать)
  3. В конфигурации WCF измените basicHttpBinding и установите режим безопасности на «Transport», а транспортный clientCredentialType на «Certificate»

Убедитесь, что корневой сертификат (тот, который используется для создания любых клиентских сертификатов) находится в «доверенных корневых центрах сертификации» для локального компьютера, на котором работает IIS.

ПРИМЕЧАНИЕ. Если вы находитесь в среде разработки, вам может потребоваться создать собственный корневой каталог.сертификат, сделанный комми линия приложения очень полезна для этого;просто выполните следующую команду: makecert -n "CN = Моя проверка подлинности" -r -cy полномочия -a sha1 -sv "Мой личный ключ.pvk" TestAuth.cer

Это создает сертификат с именем TestAuth.cer(который должен быть добавлен в «Доверенные корневые центры сертификации компьютера») и файл закрытого ключа с именем «My Private Key.pvk».

Теперь, чтобы сгенерировать сертификат клиента, вы можете запустить эту команду: makecert -sha1 -n "CN = myConnectionCert" -ic "TestAuth.cer" -iv "My Private Key.pvk" -ss My

Это создало сертификат с темой myConnectionCert и добавило его в ваш личный сертификат.магазин - когда вы сейчас заходите на сайт (например, для просмотра страницы службы), IE должен предложить вам выбрать сертификат - выберите тот, который вы только что создали, и вы увидите страницу службы как обычно.

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