Как правильно создать 32-битные COM-объекты в классическом ASP после установки Windows Update KB4340558?
В Windows Server 2012 R2 после установки обновления KB4340558 (история обновлений)/KB4338424 (установленных обновлений) мы больше не можем создавать.NET.DLL(interop) в классическом ASP в 32-разрядном режиме с использованием server.createobject
. Мы получаем ошибку 0x800A01AD "ActiveX компонент не может создать объект"
Когда мы удаляем обновление, ошибка исчезает. Несмотря на все мои усилия, я не смог найти альтернативное решение для удаления. Мы предпочли бы переустановить обновление и внести любые изменения, необходимые для Windows Server и/или DLL, чтобы позволить COM-объектам быть правильно созданными. В системных журналах нет никаких подсказок, никаких указаний в базе данных CVE и никаких указаний на ошибки ASP не возникает. Пожалуйста помоги!
Ответы
Ответ 1
На нас также повлияли несколько клиентов.
Я исключил недействительное сильное имя подписи наших сборок, так как на сборках.NET из самой Framework повлияла и эта ошибка с доступом.
Наконец, мне удалось решить проблему по конфигурации. По-видимому, аутентификационная личность веб-сайта теперь должна соответствовать идентификатору приложения. Или у IUSR больше нет разрешений.
EDIT: 19.07.2018
Предупреждение! Это изменение также имеет побочный эффект:
Asp-классическое событие "Session_OnEnd" больше не вызывалось, и, следовательно, ресурсы в конечном итоге не могли быть освобождены. Но для этого есть и исправление!
ASP-Config-Property "system.webServer/asp/runOnEndAnonymously" должен быть "ложным", после чего событие снова срабатывает.
РЕДАКТИРОВАТЬ 2: 23.07.2018
Как отметил Dijkgraaf, Microsoft теперь считает это "новое поведение" ошибкой. Поэтому я думаю, что мое "решение" теперь должно рассматриваться как обходное решение, пока новый патч не спасется.
Ответ 2
Мы запускаем наш пул приложений под определенным идентификатором, чтобы обеспечить доступ к сети и доступ к базе данных. Я тоже думал, что мы застряли после того, как прочитали ответ @keydon выше.
Однако есть три места, которые мы должны настроить:
- Пул приложений - должен использовать конкретную идентификационную информацию
- Веб-сайт "Подключить как" - должен использовать "Идентификатор пула приложений",
- Параметр "Анонимная аутентификация" под функцией "Аутентификация" должен использовать "Идентификатор пула приложений",
Это было то, чего нам не хватало - годы рассмотрения только первых двух означали, что мы неправильно читаем отличный совет выше.
Ответ 3
Microsoft знает об этой проблеме, и соответствующий КБ является ошибкой "Отказано в доступе" и приложениями с активацией COM-активации после установки обновлений безопасности и качества обновления в июле 2018 года для.NET Framework
Это повлияло на BizTalk, SharePoint, IIS с классическим ASP и.NET-приложением, которое использует олицетворение.
Методы обхода для классического ASP следующие
IIS Hosted Classic ASP, вызывающий объекты CreateObject для.NET. COM-объекты могут получить ошибку "ActiveX-компонент не может создать объект":
- Если ваш веб-сайт использует анонимную аутентификацию: измените учетные данные анонимной аутентификации веб-сайта, чтобы использовать "Идентификатор пула приложений".
- Если на вашем сайте используется базовая аутентификация или проверка подлинности Windows: войдите в приложение один раз в качестве идентификатора пула приложений, затем создайте экземпляр компонента.NET COM. Впоследствии другие пользователи сайта смогут активировать компонент.NET COM без сбоя.
- В качестве альтернативы, если вы используете аутентификацию Windows и получаете доступ к веб-сайту с консоли Windows Server, на которой выполняется приложение ASP: создание экземпляра компонента.NET COM также устраняет ошибку для других пользователей сайта.
Ответ 4
Мы поддерживаем классический ASP-сайт, работающий в анонимной аутентификации IIS. Приложение создает экземпляр объекта DLL.NET, отображаемого как COM видимый.
После применения последних обновлений Windows и перезагрузки ОС наше приложение разбилось со следующей ошибкой:
Microsoft VBScript runtime error '800a01ad'
ActiveX component can't create object: 'NameOfObjectInDLL'
В нашем случае этот последний совет зафиксировал наши проблемы.
IIS> Аутентификация> Анонимная аутентификация - Редактирование> "Идентификатор пула приложений"
Screenshot1
Ответ 5
Это только для подтверждения решения, предоставляемого keydon, в сочетании с предоставленным TimP. И дайте им спасибо!
В нашем случае мы изменили следующие 3 части (и еще 4 для новых разрешений):
-
Свойства аутентификации веб-сервера: установите анонимную аутентификацию с помощью "Идентификатор пула приложений" вместо "Конкретный пользователь".
-
Свойство пула приложений "Идентификация": установить вместо "LocalSystem" значение "ApplicationPoolIdentity".
-
Веб-сайт "Подключить как" для физического пути: установите "Пользовательский интерфейс (сквозная аутентификация)" вместо "Конкретный пользователь".
-
Добавьте разрешения для "Имя пользователя идентификатора пула приложений" в общей папке, где находятся файлы веб-приложений. Взгляните на https://docs.microsoft.com/en-us/iis/manage/configuring-security/application-pool-identities#securing-resources
Спасибо!! (Извините, я не могу голосовать за ваши решения, потому что я стартер и у меня нет репутации)