В настоящее время я работаю над проектом, который имеет следующие компоненты (все .NET 2,0)Создание веб-сервиса, который требует клиентских сертификатов
- Client Application
- Web Service Invocation API
- Web Service
Таким образом, приложение-клиент создает и экземпляр API, и это вызывает веб-службу. Приятно и просто, и все это работает так, как я хочу.
Следующим этапом проекта было обеспечение безопасности веб-службы с помощью SSL. Поэтому я создал «Self Signed CA», и из этого подписан сертификат сервера для IIS. Опять же, приятно и просто, и все это работает так, как я хочу.
Следующий этап проекта - обеспечить безопасность веб-службы, потребовав, чтобы invoker предоставил сертификат клиента. Поэтому я создал клиентский сертификат (через самоподписанный ЦС). Я затем добавить это к вызову вызова веб-службы в 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.
Справедливо собственный explantory, но я понятия не имею, что является причиной проблемы.
Другая важная информация:
- В моей Dev среде клиент, API & Web Service, все работает на той же машине
Если я пытаюсь получить доступ к веб-службы Описание в IIS я получаю следующее ошибка (мне не предлагается выбрать клиентский сертификат):
Ошибка HTTP 403.7 - Запрещено На странице, к которой вы пытаетесь получить доступ, требуется, чтобы ваш браузер имел слой Secure Sockets Layer (SSL), который Web-сервер распознает.
Клиентский сертификат загружается в персональный магазин для текущего пользователя, корень ЦС имеет доверенный корень для локального компьютера и текущего пользователя.
Если я отключу «Требовать SSL» и поставлю «Сертификаты клиентов» на прием в IIS, я могу сделать свой запрос. Однако, когда я смотрю на
HttpContext.Current.Request.ClientCertificate.Count
в веб-службе, это возвращается как 0.Мне нужно иметь возможность запускать мою разработку с клиентскими сертификатами, поскольку части служебного кода используют CN сертификата клиента для выполнения различных действий , Я мог бы взломать его, но было бы неплохо быть в состоянии сделать реальный конец.
Все упоминавшиеся здесь сертификаты были сгенерированы с использованием OpenSSL.Я разрабатываю на Windows 7, так что я не есть средство для установки Microsoft CA
Итак, кто-нибудь есть какие-либо идеи, как на причину этой проблемы?
В стороне (не стоит создавать новый вопрос для этого) - по какой-то причине, когда я включаю SSL для веб-службы, Visual Studio больше не может отлаживать службу.
EDIT: Некоторые больше информации
- Сертификат клиента имеет намеченную цель
<All>
- Хотя я работаю на локальный сертификат сервера для веб-сервера был выдан
devserver.xyz.com
, так что я изменил мой файл hosts указывает на localhost. Таким образом, я могу теперь просматривать (с закрытыми сертификатами клиента в IIS) на странице дескриптора службы, не видя никаких предупреждений о сертификатах SSL.
Вы добавили сертификат CA в хранилище доверенных сертификатов? – 2010-12-09 00:26:12