Comment instancier correctement des objets COM 32 bits dans classic ASP après avoir installé Windows Update KB4340558?
sur Windows Server 2012 R2, après avoir installé update KB4340558 (histoire de mise à jour) / KB4338424 (mises à jour installées) nous ne pouvons plus instancier .NET .DLLs (interop) en ASP classique en mode 32 bits en utilisant server.createobject
. Nous recevons l'erreur 0x800A01AD "composant ActiveX ne peut pas créer l'objet"
lorsque nous désinstallons la mise à jour, l'erreur disparaît. Malgré tous mes efforts, je n'ai pas pu trouver de solution alternative à la désinstallation. Nous préférons réinstaller la mise à jour et apporter les modifications nécessaires au serveur Windows et/ou à la DLL pour permettre aux objets COM d'être instanciés correctement. Il n'y a aucun indice dans les journaux système, aucun indice dans la base de données CVE, et aucun indice dans les erreurs que produit ASP. S'il vous plaît aider!
5 réponses
nous avons également été touchés par plusieurs clients.
j'ai exclu les signatures invalides de noms forts de nos assemblages, puisque les assemblages .NET du Framework lui-même ont été affectés par cette erreur de refus d'accès.
finalement j'ai réussi à résoudre le problème par configuration. Apparemment, l'identité d'authentification du site Web doit maintenant correspondre à l'identité de l'application-pool. Ou L'IUSR n'a plus assez autorisation.
EDIT: 19.07.2018
Attention! Ce changement a un effet secondaire:
l'événement asp-classic "Session_OnEnd" n'était plus appelé et par conséquent les ressources ne pouvaient plus être libérées. Mais il y a un fix pour ça, aussi!
le système ASP-Config-Property".webServer / asp / runonendan" doit être "false", puis l'événement se déclenche encore.
EDIT 2: 23.07.2018
Dijkgraaf fait remarquer, Microsoft considère maintenant ce "nouveau comportement" comme un bug. Donc je suppose que ma "solution" devrait maintenant être considérée comme une solution de contournement jusqu'à ce qu'un nouveau patch Vienne à la rescousse.
nous exécutons notre pool d'applications sous une identité spécifique, pour permettre un partage de réseau et un accès à la base de données. Moi aussi je pensais que nous étions coincés après avoir lu @keydon's réponse ci-dessus.
Cependant, il y a trois endroits que nous devons configurer l'identité:
- L'Application de la Piscine doit utiliser l'identité spécifique
- le site Web "Connect As" - doit utiliser "Application pool identity"
- l'option D'authentification anonyme, sous la fonction D'authentification-doit utiliser "Application pool identity"
ce dernier était la chose que nous manquions - années de considérer seulement les deux premiers signifiait que nous avons mal lu le Grand Conseil ci-dessus.
Microsoft est conscient du problème et le KO est les erreurs "Accès refusé" et les applications avec l'activation de COM échouent après l'installation juillet 2018 sécurité et qualité Rollup mises à jour pour .net Framework
cela a eu un impact sur BizTalk, SharePoint, IIS avec L'application ASP classique et .NET qui utilise l'usurpation d'identité.
Solutions de contournement ASP Classique sont comme suit
IIS Hosted Classic ASP calling CreateObject for .NET COM les objets peuvent recevoir un "composant ActiveX ne peut pas créer l'objet" erreur:
- si votre site web utilise L'authentification anonyme: modifiez les justificatifs D'identité D'authentification anonyme du Site web pour utiliser "Application pool identity".
- si votre site utilise L'authentification Basic ou L'authentification Windows: connectez-vous à l'application Une fois que l'identité du pool d'application est établie, alors créez une instance du composant .NET COM. Par la suite, d'autres utilisateurs du site pourront active le composant .NET COM sans la panne.
- alternativement, si vous utilisez L'authentification Windows et accédez au site web à partir de la console du serveur Windows où L'application ASP tourne: la création d'une instance du composant .NET COM résout également les erreurs pour les autres utilisateurs du site.
nous supportons un site ASP classique tournant dans L'authentification IIS Anonymous. L'application instancie un objet DLL. net exposé COMME COM visible.
après avoir appliqué les récentes mises à jour de sécurité Windows et redémarrer OS notre application s'est écrasée avec l'erreur suivante:
Microsoft VBScript runtime error '800a01ad'
ActiveX component can't create object: 'NameOfObjectInDLL'
Dans notre cas, ce dernier conseil fixe nos problèmes.
IIS > authentification > authentification anonyme-édition > " application pool l'identité"
ceci est seulement pour confirmer la solution fournie par keydon, combinée par celle fournie par TimP. Et de leur donner la grâce!!
dans notre cas nous avons changé les 3 parties suivantes (et une 4ème supplémentaire pour les nouvelles permissions):
propriétés D'authentification du serveur Web: définissez L'authentification anonyme avec " Application pool identity "au lieu de"Specific User".
Application Pool propriété "Identity": défini à "ApplicationPoolIdentity "au lieu de"LocalSystem".
Site Web de "se Connecter" pour le chemin d'accès physique: "l'Application de l'utilisateur (authentification pass-through)" au lieu de "Utilisateur Spécifique".
Ajouter des autorisations pour " identité de L'Application Nom d'utilisateur " dans le dossier partagé où se trouvent les fichiers d'application web. Jetez un oeil à https://docs.microsoft.com/en-us/iis/manage/configuring-security/application-pool-identities#securing-resources
Merci!! (Je suis désolé je ne peux pas voter vos solutions parce que je suis de démarrage, et je n'ai pas de réputation)