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