У меня была похожая ситуация в последние несколько дней. Я нашел обходной путь, который был приемлем для меня, поэтому я поделюсь им с вами. Проблема заключается в том, что учетная запись пользователя пула приложений IIS не имеет доступа к файлу закрытого ключа сертификата службы или не имеет закрытого ключа в том месте, где его вообще ожидают!
Примечание. Я предполагаю, что у вас работает собственный центр сертификации.
Чтобы обойти эту проблему, выполните следующие действия:
- Создайте новую учетную запись пользователя, которую вы собираетесь использовать для пула приложений IIS.
- Вы можете создать новый пул приложений для использования с этим идентификатором пользователя или назначить этот новый идентификатор пользователя для DefaultAppPool или любого пула приложений, используемого вашей службой (выполните это в диспетчере IIS).
- Затем откройте IE, перейдите к http://yourserver/certsrv, чтобы запросить новый сертификат проверки подлинности сервера. Используйте тот же CN («MyCert») в вашем запросе.
- Открыть центр сертификации для выдачи запрошенного сертификата.
- Снова перейдите на http://yourserver/certsrv, нажмите «Просмотреть статус ожидающего запроса сертификата», затем установите сертификат.
Теперь вам нужно внести изменения в ваш раздел «serviceCertificate» web.config таким образом, чтобы он выглядел так:
<serviceCredentials>
<serviceCertificate findValue="MyCert"
x509FindType="FindBySubjectName"
storeLocation="CurrentUser"
storeName="My"/>
</serviceCredentials>
Сохраните, пересоберите сервис и протестируйте его, он должен работать нормально.
(было бы проще, если бы это можно было сделать с помощью функции сертификата экспорта / импорта MMC, но по некоторым причинам его поведение не такое, как мы ожидаем)