Разрешения приложений IIS 10 для доступа к сертификату в диспетчере сертификатов - PullRequest
0 голосов
/ 15 января 2019

Я ASP и IIS нуб. Я живу в терминале Linux, так что это крутая кривая обучения ...

У меня есть C # Web API, написанный на .Net 4.6. Web API связывается с третьим Сторонняя веб-служба SOAP, которая требует, чтобы запросы SOAP были подписаны с использованием сертификата X509 с использованием стандарта WSE 2.0. Это все работает на моей локальной машине разработчика без проблем.

Я развернул приложение в AWS Elastic Beanstalk Env, используя IIS 10 и Windows Server 2016 Data Center. Веб-API не работает для любых функций, которым необходим доступ к сертификату. Все остальные URL работают нормально.

Я импортировал сертификат в хранилище сертификатов локального компьютера. Это простой случай, когда я не настроил правильные разрешения.

Как проверить, что IIS имеет доступ к требуемому сертификату и какого пользователя мне нужно добавить в сертификат, чтобы обеспечить правильный доступ к приложениям IIS.

Я сделал следующее без удачи:
- Установите VS 2017 на сервер и успешно запустите консольное приложение, чтобы проверить, есть ли проблема в WSE 2.0. Работал нормально. - Добавлен доступ на чтение к IIS_IUSRS по закрытым ключам для сертификата в MMC
- Добавлен доступ на чтение к IUSER по приватным ключам для сертификата в MMC
- Добавлен доступ на чтение к «IIS APPPOOL \ DefaultAppPool» на закрытых ключах для сертификата в MMC
- Изменено разрешение на доступ к папке RSA в директории Crypto Data Programs, поэтому не помню точный путь, который привел к взлому системы

1 Ответ

0 голосов
/ 16 января 2019

Так что мне удалось решить это. Оказывается, что WSE 2.0 X509CertificateStore не очень хорошо работает с диспетчером сертификатов Windows Server 2016 через IIS. Мне пришлось использовать более новый класс System.Security.Cryptography.X509Certificates X509Store для доступа к Cert, а затем преобразовать X509Certificate2 в MS Web Service2.X509Certificate. Код ниже:

X509Store store = new X509Store(StoreLocation.LocalMachine);
store.Open(OpenFlags.ReadOnly);
X509Certificate2Collection Certificate2Collection = store.Certificates;
X509Certificate2Collection results = 
    Certificate2Collection.Find(X509FindType.FindBySubjectName, (object)subject, false);
X509Certificate2 cert = results[0];
Microsoft.Web.Services2.Security.X509.X509Certificate cert = 
    new Microsoft.Web.Services2.Security.X509.X509Certificate(cert.Export(X509ContentType.Cert));
...