Asp.NET - ошибка сертификата вызывающего веб-сервиса, IIS Manager
Мы разработали веб-приложение ASP.NET, которое вызывает веб-сервис для получения данных. Сертификаты необходимы для доступа к веб-сервису. Все работает, пока мы запускаем приложение из Visual Studio, но не работает, когда мы публикуем сайт на сервере IIS.
Какие настройки необходимо сделать в диспетчере IIS, чтобы он работал. У нас есть 3 сертификата, один.pfx и два корневых файла.cer.
2 ответа
Когда вы запускаете его из Visual Studio, вы запускаете приложение с вашими учетными данными. Даже IIS Express работает под вашими учетными данными.
Если вы импортировали сертификаты в хранилище CurrentUser, вы импортировали его в хранилище под своей учетной записью. При развертывании страницы ASP.NET в IIS по умолчанию она запускается от имени пользователя DefaultAppPool (IIS APPPOOL\DefaultAppPool). Этот пользователь имеет другое хранилище сертификатов и, вероятно, не имеет ни одного из этих сертификатов.
Либо импортируйте эти сертификаты в хранилище LocalMachine (локальное компьютерное хранилище в mmc) и установите разрешения для закрытого ключа, чтобы DefaultAppPool (или любой другой пользователь пула, который вы указали) могли получить доступ к этому закрытому ключу, либо импортируйте эти сертификаты в хранилище CurrentUser в DefaultAppPool или (быстрый и не очень удобный способ) установите DefaulAppPool для использования учетных данных вашей учетной записи.
Я бы лично пошел с первым вариантом.
Это код из web.config
<behaviors>
<endpointBehaviors>
<behavior name="Client2WaySSL">
<clientCredentials>
<clientCertificate findValue="CN=lsu.test.client.service.mup.hr" storeLocation="CurrentUser" />
<serviceCertificate>
<defaultCertificate findValue="CN=test.service.mup.hr" storeLocation="CurrentUser" storeName="TrustedPeople" />
</serviceCertificate>
</clientCredentials>
</behavior>
</endpointBehaviors>
</behaviors>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_MUP.LokalnaSamouprava.FizickaOsoba.WebServiceInterface">
<security mode="Transport">
<transport clientCredentialType="Certificate" proxyCredentialType="None" realm="" />
</security>
</binding>
<binding name="BasicHttpBinding_MUP.LokalnaSamouprava.FizickaOsoba.WebServiceInterface1" />
</basicHttpBinding>
</bindings>
<client>
<endpoint address="https://lsu.test.service.mup.hr:9001/FizickaOsobaService.svc" binding="basicHttpBinding" behaviorConfiguration="Client2WaySSL" bindingConfiguration="BasicHttpBinding_MUP.LokalnaSamouprava.FizickaOsoba.WebServiceInterface" contract="MUPServis.MUPLokalnaSamoupravaFizickaOsobaWebServiceInterface" name="MUP.LokalnaSamouprava.FizickaOsoba.WebServicePort" />
</client>
Мы установили сертификаты через консоль MMC.