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

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

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

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

Настройка // service / webservice :

  • On Directory Security, снятый флажок «Анонимный доступ» и «Доступ с аутентификацией» (встроенный доступ 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

Я пошел на https://service/webservice/WebService.asmx, и мне предложили предоставить сертификат клиента, и после этого я прошел. Но если бы я перешел на https://web1/app1/default.aspx (который вызвал бы веб-сервис), и я бы получил исключение статуса HTTP 403.

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

Ответы [ 4 ]

2 голосов
/ 23 апреля 2009

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

2 голосов
/ 04 января 2009

Похоже, что 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

1 голос
/ 25 апреля 2014

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

0 голосов
/ 19 сентября 2011

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

...