Статус HTTP 403: запрещенное исключение с использованием сертификата для проверки подлинности веб-службы ASP.NET

Несколько дней назад я писал об управлении доступом к веб-сервису (Контроль доступа к веб-сервису). Короче говоря, у меня есть веб-служба ASP.NET, развернутая на // service / webservice, и я хочу, чтобы мое веб-приложение ASP.NET (app1) на // web1 было получить доступ к веб-службе с проверкой подлинности сертификата. Я продолжаю получать System.Net.WebException: запрос завершился ошибкой с HTTP-статусом 403: исключение запрещено. Вот моя установка:

На экспорт сертификата;

  • Я экспортировал сертификат сервера, выданный // service из магазина LocalMachine, и сохранил его как service.cer.
  • Я также экспортировал сертификат клиента, выданный // web1 из магазина LocalMachine, и сохранил его как web1.cer

Настройка на // сервисе / веб-сервисе:

  • В разделе «Безопасность каталога» не отмечены флажки «Анонимный доступ» и «Полный доступ с проверкой подлинности» (встроенный доступ Windows, дайджест-проверка подлинности и базовая проверка подлинности).
  • В разделе «Безопасная связь» установите флажок «Требуемый безопасный канал (SSL)», «Требовать 128-битное шифрование», «Требовать сертификат клиента» и «Включить сопоставление сертификата клиента». Затем я сопоставил web1.cer с учетной записью AD MyDomain / user, которая имеет право доступа к // service / webservice.
  • Для //service/webservice/WebService.asmx установите <authentication mode="Windows" /> в web.config

Настройка в // web1 / app1

  • Установите <authentication mode="Windows" /> и <identity impersonate="true" /> в web.config
  • В VS2008 я добавил веб-ссылку на //service/webservice/WebService.asmx и назвал ее WService.
  • В //web1/app1/default.aspx.cs у меня было это:

using System.Security.Cryptography.X509Certificates;
    using System.Net;
        WService.WebService ws = new WService.WebService();
        ServicePointManager.ServerCertificateValidationCallback = delegate(Object sender1, X509Certificate cert, X509Chain chain, System.Net.Security.SslPolicyErrors errors) { return true; };
//I was a bit confused here on which certificate I should use so I have tried both service.cer and web1.cer but still got the same error
        X509Certificate x509 = X509Certificate.CreateFromCertFile(@"C:\Certificates\service.cer"); 
        ws.ClientCertificates.Add(x509);
        ws.DoSomething();
  • Я запустил WinHttpCertCfg.exe, чтобы предоставить доступ к обоим сертификатам в LocalMachine для учетной записи ASPNET.

I went to https://service/webservice/WebService.asmx and was prompted to provide a client certificate and after that I was through. But if I went to https://web1/app1/default.aspx (which would call the web service) and I would get the HTTP status 403 exception.

Что я пропустил? Я предполагаю, что проблема в том, что //web1/app1/default.aspx.cs не удалось передать сертификат. Если проблема в этом, как мне это сделать? Я создал asmx и aspx на VS 2008 и ASP.NET 3.5.


person Gnot    schedule 30.12.2008    source источник
comment
У меня похожая проблема. Во время тестирования nUnit я мог получить доступ к веб-службам с помощью сертификатов. Итак, я перешел на службы Windows, и теперь я получаю запрос не удалось с HTTP-статусом 403: Запрещено. Если я использую тот же код на unit. Все работает ... ши *   -  person Eduardo Xavier    schedule 28.10.2010


Ответы (4)


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

Если служба работает на разных машинах, вам, возможно, придется настроить центр сертификации (это может помочь http://www.petri.co.il/install_windows_server_2003_ca.htm) и добавьте его в качестве надежного издателя на клиентском компьютере. Это также может помочь http://support.microsoft.com/kb/901183.

Другой вариант - просто не проверять SSL, см. http://geekswithblogs.net/jwhitehorn/archive/2006/09/20/91657.aspx

person ccook    schedule 04.01.2009

Убедитесь, что ваш клиентский сертификат был запрошен как шаблон сертификата «Компьютер» для «Проверка подлинности клиента», иначе он не будет работать.

person Community    schedule 23.04.2009

Когда у меня возникла эта проблема, оказалось, что пара сертификатов и ключей клиента, которую я использовал, была подписана промежуточным центром сертификации, который находился в хранилище текущего пользователя, а не в хранилище локального компьютера. Все выглядело хорошо, если вы проверили сертификат во время входа в систему, но рабочий процесс IIS не смог увидеть промежуточный ЦС. Таким образом, вызов веб-службы не предоставил сертификат с запросом. Вы можете проверить это, проверив в веб-журнале сервера ответ 403 7 5.

person Hugh Jeffner    schedule 25.04.2014

Убедитесь, что выдающиеся пользователи имеют доступ к используемому хранилищу сертификатов.

person rick schott    schedule 18.09.2011