asp classic - clasico - ¿Cómo puedo crear una instancia correcta de los objetos COM de 32 bits en ASP clásico después de instalar Windows Update KB4340558?
asp clasico en windows 10 (5)
Admitimos un sitio ASP clásico que se ejecuta en la autenticación anónima de IIS. La aplicación crea una instancia de un objeto DLL .NET expuesto como COM visible.
Después de aplicar las actualizaciones de seguridad recientes de Windows y reiniciar el sistema operativo, nuestra aplicación se bloqueó con el siguiente error:
Microsoft VBScript runtime error ''800a01ad''
ActiveX component can''t create object: ''NameOfObjectInDLL''
En nuestro caso, este último consejo solucionó nuestros problemas.
IIS> Autenticación> Autenticación anónima - Editar> "Identidad de grupo de aplicaciones"
En Windows Server 2012 R2, después de instalar la actualización
KB4340558
(historial de actualizaciones) /
KB4338424
(actualizaciones instaladas) ya no podemos crear instancias de .NET .DLLs (interoperabilidad) en ASP clásico en modo de 32 bits usando
server.createobject
.
Recibimos el error 0x800A01AD "El componente ActiveX no puede crear el objeto"
Cuando desinstalamos la actualización, el error desaparece. A pesar de mis mejores esfuerzos, no pude encontrar una solución alternativa para desinstalar. Preferiríamos volver a instalar la actualización y hacer los cambios necesarios en Windows Server y / o los DLL para permitir que los objetos COM se ejemplifiquen correctamente. No hay pistas en los registros del sistema, no hay pistas en la base de datos CVE y no hay pistas en los errores que ASP está generando. ¡Por favor ayuda!
Ejecutamos nuestro grupo de aplicaciones bajo una identidad específica, para habilitar un recurso compartido de red y acceso a la base de datos. Yo también pensé que estábamos atrapados después de leer la answer de @keydon arriba.
Sin embargo, hay tres lugares donde debemos configurar la identidad:
- El grupo de aplicaciones - debe usar la identidad específica
- El sitio web "Conectar como": debe usar la "identidad del grupo de aplicaciones"
- La opción Autenticación anónima, bajo la función Autenticación, debe usar "Identidad de grupo de aplicaciones"
Lo último que nos faltó fue que años de considerar solo los dos primeros significaron que leímos mal el gran consejo anterior.
Esto es solo para confirmar la solución provista por keydon, combinada con la proporcionada por TimP. ¡Y darles las gracias!
En nuestro caso, hemos cambiado las siguientes 3 partes (y una cuarta adicional para los nuevos permisos):
-
Propiedades de autenticación del servidor web: establezca la autenticación anónima con "Identidad de grupo de aplicaciones" en lugar de "Usuario específico".
-
Propiedad "Identidad" del grupo de aplicaciones: establecida en "ApplicationPoolIdentity" en lugar de "LocalSystem".
-
Sitio web "Conectar como" para la ruta física: configurado en "Usuario de la aplicación (autenticación de paso)" en lugar de "Usuario específico".
-
Agregue permisos para " Nombre de usuario de Identidad de grupo de aplicaciones " en la carpeta compartida donde se encuentran los archivos de la aplicación web. Consulte https://docs.microsoft.com/en-us/iis/manage/configuring-security/application-pool-identities#securing-resources
¡¡Gracias!! (Lo siento, no puedo votar sus soluciones porque soy titular y no tengo ninguna reputación)
Fuimos afectados con varios clientes también.
Descarté la firma no válida de nombres seguros de nuestros ensamblajes, ya que los Ensambles .NET del Marco mismo también se vieron afectados por ese error de acceso denegado.
Finalmente logré resolver el problema por configuración. Al parecer, la identidad de autenticación del sitio web ahora tiene que coincidir con la identidad del grupo de aplicaciones. O IUSR ya no tiene suficientes permisos.
EDITAR: 19.07.2018
¡Advertencia! Este cambio también tiene un efecto secundario:
El evento asp-classic "Session_OnEnd" ya no se llamaba y, por lo tanto, los recursos finalmente ya no podían liberarse. ¡Pero hay una solución para eso, también!
La propiedad de configuración ASP "system.webServer / asp / runOnEndAnonymously" tiene que ser "false", luego el evento se dispara de nuevo.
EDIT 2: 23.07.2018
Como señaló Dijkgraaf , Microsoft ahora considera este "nuevo comportamiento" como un error. Así que supongo que mi "solución" ahora debería considerarse una solución hasta que un nuevo parche venga a rescatar.
Microsoft está al tanto del problema y la KB relevante es errores de "Acceso denegado" y las aplicaciones con activación de COM fallan después de instalar las actualizaciones del paquete de seguridad y calidad de julio de 2018 para .NET Framework
Esto ha afectado a BizTalk, SharePoint, IIS con la aplicación clásica ASP y .NET que utiliza la suplantación.
Las soluciones para ASP clásico son las siguientes
IIS Hosted ASP clásico que llama a CreateObject para .NET Los objetos COM pueden recibir un error "El componente ActiveX no puede crear el objeto":
- Si su sitio web utiliza autenticación anónima: cambie las credenciales de autenticación anónima del sitio web para usar la "identidad del grupo de aplicaciones".
- Si su sitio utiliza la autenticación básica o la autenticación de Windows: inicie sesión en la aplicación una vez como la identidad del grupo de aplicaciones, luego cree una instancia del componente COM de .NET. Posteriormente, otros usuarios del sitio podrán activar el componente COM de .NET sin el error.
- Alternativamente, si está utilizando la autenticación de Windows y accede al sitio web desde la consola del servidor de Windows donde se ejecuta la aplicación ASP: la creación de una instancia del componente COM de .NET también resuelve el error para otros usuarios del sitio.