Я писал несколько дней назад об управлении доступом к веб-службе ( Контроль доступа к веб-службе ). Короче говоря, у меня есть веб-служба 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.