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.

Другие вопросы по тегам