web-dev-qa-db-ja.com

Windows Update KB4340558のインストール後、クラシックASPで32ビットCOMオブジェクトを適切にインスタンス化するにはどうすればよいですか?

Windows Server 2012 R2では、更新プログラムのインストール後、 KB4340558 (更新履歴)/ KB4338424 (インストールされた更新プログラム).NET .DLL(相互運用機能)を従来のASP server.createobjectを使用した32ビットモード。エラー0x800A01AD「ActiveXコンポーネントはオブジェクトを作成できません」を受け取ります

更新プログラムをアンインストールすると、エラーが消えます。最善の努力にもかかわらず、アンインストールの代替ソリューションを見つけることができませんでした。更新プログラムを再インストールし、Windows ServerやDLLに必要な変更を加えて、COMオブジェクトを適切にインスタンス化できるようにすることをお勧めします。システムログには手がかりがなく、CVEデータベースには手がかりがなく、エラーASPが生成している手がかりもありません。助けてください!

30
user2458080

複数の顧客にも影響を受けました。

フレームワークからの.NETアセンブリ自体もそのアクセス拒否エラーの影響を受けるため、アセンブリの無効な厳密名署名を除外しました。

最後に、構成によって問題を解決することができました。どうやら、Webサイトの認証IDは、アプリプールのIDと一致する必要があります。または、IUSRに十分な権限がありません。

enter image description here

編集:19.07.2018

警告!この変更には副作用もあります。

Asp-classicイベント「Session_OnEnd」は呼び出されなくなったため、最終的にリソースを解放できなくなりました。しかし、それに対する修正もあります!

ASP-Config-Property "system.webServer/asp/runOnEndAnonymously"は "false"である必要があり、その後イベントが再度発生します。

enter image description here

編集2:23.07.2018

Dijkgraaf が指摘したように、Microsoftはこの「新しい動作」をバグと見なしています。だから、新しいパッチが助けになるまで、私の「解決策」は回避策と見なされるべきだと思います。

34
keydon

特定のIDでアプリケーションプールを実行し、ネットワーク共有とデータベースアクセスを有効にします。私も、@ keydonの answer を読んだ後に立ち往生していると思った。

ただし、IDを構成する必要がある3つの場所があります。

  • アプリケーションプール-特定のIDを使用する必要があります
  • Webサイト「接続」-「アプリケーションプールID」を使用する必要があります
  • 認証機能の下の匿名認証オプション-「アプリケーションプールID」を使用する必要があります

最後の1つは私たちが見落としていたものでした。最初の2つだけを検討してきた年は、上記のすばらしいアドバイスを読み間違えたことを意味します。

17
TimP

Microsoftはこの問題を認識しており、関連するKBは 「アクセスが拒否されました」エラーであり、.NET Frameworkの2018年7月のセキュリティおよび品質ロールアップ更新プログラムをインストールした後、COMアクティベーションでアプリケーションが失敗します

これはBizTalk、SharePoint、IIS with classic ASPおよび偽装を使用する.NETアプリケーションに影響します。

Classic ASPの回避策は次のとおりです

IIS Hosted Classic ASP .NET COMオブジェクトに対してCreateObjectを呼び出すと、「ActiveXコンポーネントはオブジェクトを作成できません」というエラーが表示される場合があります。

  • Webサイトで匿名認証を使用している場合:「アプリケーションプールID」を使用するようにWebサイトの匿名認証資格情報を変更します。
  • サイトで基本認証またはWindows認証を使用している場合:アプリケーションプールIDとしてアプリケーションに1回ログインしてから、.NET COMコンポーネントのインスタンスを作成します。その後、他のサイトユーザーは、失敗せずに.NET COMコンポーネントをアクティブにできます。
  • または、Windows認証を使用し、ASPアプリケーションが実行されるWindowsサーバーのコンソールからWebサイトにアクセスしている場合:.NET COMコンポーネントのインスタンスを作成すると、他のサイトのエラーも解決しますユーザー。
8
Dijkgraaf

これは、keydonが提供するソリューションと、TimPが提供するソリューションを組み合わせたものです。そして彼らに感謝します!!

今回のケースでは、次の3つの部分を変更しました(新しいアクセス許可の場合は追加の4番目)。

  1. Webサーバー認証プロパティ:「特定のユーザー」ではなく「アプリケーションプールID」で匿名認証を設定します。

  2. アプリケーションプールの「ID」プロパティ:「LocalSystem」ではなく「ApplicationPoolIdentity」に設定します。

  3. 物理パスのWebサイト「接続」:「特定のユーザー」ではなく「アプリケーションユーザー(パススルー認証)」に設定します。

  4. Webアプリケーションファイルがある共有フォルダーに「アプリケーションプールIDユーザー名」のアクセス許可を追加します。 https://docs.Microsoft.com/en-us/iis/manage/configuring-security/application-pool-identities#securing-resources をご覧ください

ありがとうございました!! (私はスターターであり、評判がありませんので、あなたの解決策に投票できないことを残念に思います)

4
Jose Salort

ASP匿名認証で実行されているクラシックIISサイトをサポートしています。アプリケーションは、COM可視として公開されるDLL .NETオブジェクトをインスタンス化します。

最新のセキュリティWindowsアップデートを適用し、OSを再起動した後、アプリケーションが次のエラーでクラッシュしました。

Microsoft VBScript runtime error '800a01ad'
ActiveX component can't create object: 'NameOfObjectInDLL'

私たちの場合、この最後のアドバイスは問題を解決しました。

IIS>認証>匿名認証-編集>「アプリケーションプールID」

screenshot1

4
support3