В настоящее время я работаю над проектом, который имеет следующие компоненты (все .NET 2.0)
- Клиентское приложение
- API вызова веб-службы
- Веб-служба
В итоге клиентское приложение создает и экземпляр API, который вызывает веб-службу.Красиво и просто, и все это работает именно так, как я хочу.
Следующим этапом проекта была защита Web-сервиса с помощью SSL.Поэтому я создал «Самоподписанный ЦС» и на этом подписал сертификат сервера для IIS.Опять же, красиво и просто, и все это работает именно так, как я хочу.
Следующим этапом проекта является защита веб-службы, требуя от вызывающего предоставить клиентский сертификат.Итак, я создал сертификат клиента (с помощью СА с собственной подписью).Затем я добавляю это к вызову вызова веб-службы в API:
WSBridge.Processor processor = new WSBridge.Processor();
processor.Url = this.endpoint;
processor.ClientCertificates.AddRange(this.clientCertificates);
processor.Timeout = (int)Settings.Default["DefaultTimeout"];
При отладке я вижу, что this.clientCertificates
содержит сертификат, который я создал.Таким образом, теоретически он представляется веб-серверу.
Однако, когда я пытаюсь вызвать веб-сервис, я получаю следующее исключение в API:
The request failed with HTTP status 403: Forbidden.
Достаточно самообъяснение,но я понятия не имею, что является причиной проблемы.
Другая важная информация:
- В моей среде разработки Клиент, API и веб-служба работают на одном компьютере
Если я пытаюсь получить доступ к описанию веб-службы в IIS, я получаю следующую ошибку (мне не предлагается выбрать сертификат клиента):
Ошибка HTTP 403.7 - запрещено Страницавы пытаетесь получить доступ, требует, чтобы ваш браузер имел клиентский сертификат Secure Sockets Layer (SSL), который распознает веб-сервер.
Клиентский сертификат загружается в Личное хранилище длятекущий пользователь, корень CA находится в доверенном корне для локального компьютера и текущего пользователя.
Если я отключу «Требовать SSL» и поставлю «Сертификат клиента»s "примите в IIS, я могу сделать свой запрос.Однако, когда я смотрю на HttpContext.Current.Request.ClientCertificate.Count
в веб-службе, это возвращается как 0.
Мне нужно иметь возможность запускать свою разработку с клиентскими сертификатами, так как части кода службы используютCN сертификата клиента для выполнения различных действий.Я мог бы взломать его, но было бы неплохо иметь возможность сделать реальный конец в конец.
Все упомянутые здесь сертификаты были сгенерированы с использованием OpenSSL.Я занимаюсь разработкой под Windows 7, поэтому у меня нет возможности установить Microsoft CA
Итак, у кого-нибудь есть идеи относительно причины этой проблемы?
В качестве отступления (не стоит создавать новый вопрос для этого) - по какой-то причине, когда я включаю SSL для веб-службы, Visual Studio больше не может отлаживать службу.
РЕДАКТИРОВАТЬ: дополнительная информация
- Назначение сертификата клиента -
<All>
- Хотя я работаю на локальном хосте, сертификат сервера для веб-сервера был выдан
devserver.xyz.com
, поэтому яизменили мой файл hosts так, чтобы он указывал на localhost.Таким образом, теперь я могу просматривать (с отключенными сертификатами клиента в IIS) страницу дескриптора службы, не видя предупреждений о сертификатах SSL.