Как правильно создать 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 больше нет разрешений.

enter image description here

EDIT: 19.07.2018

Предупреждение! Это изменение также имеет побочный эффект:

Asp-классическое событие "Session_OnEnd" больше не вызывалось, и, следовательно, ресурсы в конечном итоге не могли быть освобождены. Но для этого есть и исправление!

ASP-Config-Property "system.webServer/asp/runOnEndAnonymously" должен быть "ложным", после чего событие снова срабатывает.

enter image description here

РЕДАКТИРОВАТЬ 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 для новых разрешений):

  1. Свойства аутентификации веб-сервера: установите анонимную аутентификацию с помощью "Идентификатор пула приложений" вместо "Конкретный пользователь".

  2. Свойство пула приложений "Идентификация": установить вместо "LocalSystem" значение "ApplicationPoolIdentity".

  3. Веб-сайт "Подключить как" для физического пути: установите "Пользовательский интерфейс (сквозная аутентификация)" вместо "Конкретный пользователь".

  4. Добавьте разрешения для "Имя пользователя идентификатора пула приложений" в общей папке, где находятся файлы веб-приложений. Взгляните на https://docs.microsoft.com/en-us/iis/manage/configuring-security/application-pool-identities#securing-resources

Спасибо!! (Извините, я не могу голосовать за ваши решения, потому что я стартер и у меня нет репутации)