Compartir a través de


Control de errores de enlace de direcciones URL en IIS Express

por Vaidy Gopalakrishnan

Información general

IIS Express se diseñó para permitir que las tareas de desarrollo y pruebas web más comunes se realicen sin privilegios administrativos. Por ejemplo, puede ejecutar un sitio web localmente mediante un puerto no reservado. También puede probar su sitio web con SSL mediante un certificado de prueba autofirmado y un puerto en el intervalo 44300 a 44399. Consulte Ejecución de IIS Express sin privilegios administrativos para obtener detalles.

Sin embargo, en ocasiones es posible que deba usar IIS Express para escenarios de prueba que no están habilitados de manera predeterminada. Por ejemplo, aunque IIS Express no está diseñado para ser un servidor web de producción como IIS, es posible que tenga que probar el acceso externo a su sitio web. Del mismo modo, es posible que desee probar el sitio mediante SSL o usar un número de puerto reservado específico.

De manera predeterminada, si usa IIS Express para probar estos escenarios, informa un error de enlace de dirección URL. Esto ocurre porque IIS Express no tiene privilegios suficientes para realizar estos tipos de tareas. Puede ejecutar IIS Express como administrador para omitir estas restricciones, pero esto no es un procedimiento recomendado por motivos de seguridad.

El enfoque correcto para probar con IIS Express en estos escenarios es configurar HTTP.sys para permitir que IIS Express se ejecute con permisos estándar para realizar las tareas. Una vez completadas las pruebas, puede revertir la configuración. Por motivos de seguridad, estas tareas están restringidas a los administradores y no pueden realizarlas los usuarios estándar (no administradores).

Acerca de HTTP.sys

HTTP.sys es un componente del sistema operativo que controla el tráfico HTTP y SSL para IIS y IIS Express. De manera predeterminada, HTTP.sys impide que las aplicaciones (incluido IIS Express) realicen las siguientes operaciones si un usuario estándar ejecuta la aplicación:

  • Uso de puertos reservados como 80 o 443
  • Servicio del tráfico externo
  • Uso de SSL

Puede configurar HTTP.sys para permitir estas operaciones para IIS Express. En Windows 7 y Windows Vista, puedes configurar HTTP.sys mediante la utilidad netsh.exe. En Windows XP, HTTP.sys se puede configurar mediante la utilidad de línea de comandos httpcfg.exe , que se incluye con las herramientas de soporte técnico de Windows XP Service Pack 2.

Uso de un puerto reservado

De manera predeterminada, puede usar IIS Express para ejecutar el sitio web mediante un puerto no reservado como 8080. Sin embargo, el uso de un puerto reservado como 80 o 443 requiere trabajo. En los pasos descritos a continuación se supone que desea admitir el tráfico local a través del puerto 80.

En Windows 7 o Windows Vista, desde un símbolo del sistema con privilegios elevados, ejecute el siguiente comando:

netsh http add urlacl url=http://localhost:80/ user=everyone

Este comando permitirá que la aplicación de cualquier usuario (incluidas sus propias instancias de IIS Express) se ejecute mediante el puerto 80 sin necesidad de privilegios administrativos. Para limitar este acceso a sí mismo, reemplace "todos" por su identidad de Windows.

En Windows XP, debe ejecutar el siguiente comando desde un símbolo del sistema con privilegios elevados:

httpcfg set urlacl /u http://localhost:80/ /a D:(A;;GX;;;WD)

Después de configurar HTTP.sys, puede configurar el sitio web para que use el puerto 80. Esto es muy sencillo mediante herramientas como WebMatrix y Visual Studio 2010 SP1 Beta. También puede editar manualmente el archivo applicationhost.config para incluir el siguiente enlace en el elemento sitios.

<binding protocol="http" bindingInformation="*:80:localhost"/>

Su sitio web ahora se ejecutará (localmente) mediante el puerto 80.

Cuando haya terminado de probar la aplicación, debe revertir HTTP.sys a su configuración anterior.

En Windows 7 o Windows Vista, ejecute el siguiente comando desde un símbolo del sistema con privilegios elevados:

netsh http delete urlacl url=http://localhost:80/

En Windows XP, ejecute el siguiente comando desde un símbolo del sistema con privilegios elevados:

httpcfg delete urlacl /u http://localhost:80/

Servicio de tráfico externo

Para habilitar que el sitio web proporcione tráfico externo, debe configurar HTTP.sys y el firewall del equipo. En los pasos descritos a continuación se supone que el tráfico externo se atenderá en el puerto 8080.

Los pasos para configurar HTTP.sys para el tráfico externo son similares a configurar un sitio para usar un puerto reservado. En Windows 7 o Windows Vista, desde un símbolo del sistema con privilegios elevados, ejecute el siguiente comando:

netsh http add urlacl url=http://myhostname:8080/ user=everyone

En Windows XP, ejecute el siguiente comando desde un símbolo del sistema con privilegios elevados:

httpcfg set urlacl /u http://myhostname:8080/ /a D:(A;;GX;;;WD)

Después de configurar HTTP.sys, puede configurar IIS Express para usar el puerto 80 mediante WebMatrix o Visual Studio 2010 SP1 Beta o editando el archivo applicationhost.config para incluir el siguiente enlace en el elemento sitios. (Reemplace myhostname por el nombre de dominio del equipo).

<binding protocol="http" bindingInformation="*:8080:myhostname"/>

También deberá configurar el firewall para permitir que el tráfico externo fluya a través del puerto 8080. Los pasos variarán en función del firewall que use y no se describen aquí.

Cuando haya terminado de probar la aplicación, revierta HTTP.sys a su configuración anterior.

En Windows 7 o Windows Vista, ejecute el siguiente comando desde un símbolo del sistema con privilegios elevados:

netsh http delete urlacl url=http://myhostname:8080/

En Windows XP, ejecute el siguiente comando desde un símbolo del sistema con privilegios elevados:

httpcfg delete urlacl /u http://myhostname:8080/

Uso de un puerto SSL personalizado

Si desea probar el acceso SSL a su sitio, puede hacerlo con IIS Express mediante un puerto SSL entre 44300 y 44399 y el uso del certificado autofirmado de IIS Express. Si se intenta usar SSL con un puerto fuera de este intervalo, se produce un error de enlace de dirección URL cuando el sitio web se inicia en IIS Express.

Para obtener instrucciones generales sobre cómo configurar HTTP.sys para admitir SSL, consulte Cómo: Configurar un puerto con un certificadoSSL. Por ejemplo, imagine que desea probar el sitio web mediante la dirección URL https://localhost:443.

En primer lugar, determine la huella digital SHA1 para el certificado autofirmado de IIS Express. Esta huella digital es diferente para cada equipo porque el programa de instalación de IIS Express genera un nuevo certificado cuando se ejecuta. Puede determinar la huella digital SHA1 mediante el complemento Certificado de Microsoft Management Console (MMC) examinando el almacén de certificados personal del equipo. Como alternativa, puede usar la utilidad .NET CertMgr.exe como se muestra a continuación. En un símbolo del sistema, ejecute el siguiente comando.

certmgr.exe /c /s /r localMachine MY

Este comando muestra información sobre todos los certificados del almacén de certificados personal del equipo local. Buscar "Certificado de desarrollo rápido de IIS" en la salida para buscar el certificado autofirmado de IIS Express y, a continuación, anote su huella digital SHA1.

A continuación, configure HTTP.sys para asociar el certificado autofirmado a la dirección URL. En Windows 7 o Windows Vista, empiece por crear un UUID único mediante uuidgen.exe o alguna otra herramienta. A continuación, ejecute el siguiente comando desde un símbolo del sistema con privilegios elevados y pase la huella digital al parámetro certhash. (Excluya los espacios al especificar la huella digital.)

netsh http add sslcert ipport=0.0.0.0:443 certhash=<thumbprint> appid={00112233-4455-6677-8899-AABBCCDDEEFF}

Para el parámetro appid, pase el UUID único que creó anteriormente.

En Windows XP, ejecute el siguiente comando desde un símbolo del sistema con privilegios elevados.

httpcfg set ssl -i 0.0.0.0:443 -h <thumbprint>

Dado que 443 es un puerto reservado, también tendrá que configurar HTTP.sys para permitir que IIS Express lo use mientras se ejecuta como usuario estándar. Para obtener detalles, consulte la sección Uso de un puerto reservado. No tendrá que realizar este paso si usa un puerto SSL personalizado no reservado, como 44500.

En Windows 7 o Windows Vista, ejecute el siguiente comando desde un símbolo del sistema con privilegios elevados.

netsh http add urlacl url=https://localhost:443/ user=everyone

En Windows XP, ejecute el siguiente comando desde un símbolo del sistema con privilegios elevados.

httpcfg set urlacl /u https://localhost:443/ /a D:(A;;GX;;;WD)

Después de configurar HTTP.sys, configure el sitio web para usar el puerto SSL personalizado mediante WebMatrix o Visual Studio 2010 SP1 Beta, o agregando el siguiente enlace en el elemento sitios en el archivo applicationhost.config.

<binding protocol="https" bindingInformation="*:443:localhost"/>

Cuando haya terminado de probar su sitio web, revierta HTTP.sys a su configuración anterior. En Windows 7 o Windows Vista, ejecute los siguientes comandos desde un símbolo del sistema con privilegios elevados:

netsh http delete sslcert ipport=0.0.0.0:443
netsh http delete urlacl url=https://localhost:443/

En Windows XP, ejecute los siguientes comandos desde un símbolo del sistema con privilegios elevados:

httpcfg delete ssl –i 0.0.0.0:443
httpcfg delete urlacl /u https://localhost:443/

Uso de un certificado SSL personalizado

La configuración de un certificado SSL personalizado es muy similar al uso de un puerto SSL personalizado. En los pasos descritos en esta sección se supone que el sitio web ya atiende el tráfico SSL local mediante el puerto 44300 y el certificado autofirmado de IIS Express.

En primer lugar, debe instalar el certificado SSL personalizado en el equipo. Use el complemento de certificado MMC o CertMgr.exe. A medida que instale el certificado, observe el valor de la huella digital SHA1.

La dirección URL https://localhost:44300 está preconfigurada por el programa de instalación de IIS Express para usar un certificado autofirmado. Para enlazar esta dirección URL al certificado personalizado, tendrá que eliminar la asociación existente. Omita este paso si el nombre de host y la combinación de puerto no están asociados a un certificado SSL.

En Windows 7 o Windows Vista, ejecute el siguiente comando desde un símbolo del sistema con privilegios elevados:

netsh http delete sslcert ipport=0.0.0.0:44300

En Windows XP, ejecute el siguiente comando desde un símbolo del sistema con privilegios elevados:

httpcfg delete ssl –i 0.0.0.0:44300

Los pasos restantes son similares a los de la configuración de un puerto SSL personalizado. Crear un UUID único mediante uuidgen.exe u otra herramienta.

En Windows 7 o Windows Vista, ejecute el siguiente comando desde un símbolo del sistema con privilegios elevados, pasando la huella digital de los certificados personalizados (quite primero los espacios) al parámetro certhash y pase el UUID.

netsh http add sslcert ipport=0.0.0.0:44300 certhash=<thumbprint> appid={00112233-4455-6677-8899-AABBCCDDEEFF}

En Windows XP, ejecute el siguiente comando desde un símbolo del sistema con privilegios elevados.

httpcfg set ssl -i 0.0.0.0:44300 -h <thumbprint>

Resumen

En este artículo se explican los pasos necesarios para admitir algunos escenarios de IIS Express que no están habilitados de forma predeterminada. Realizarlos requiere que sea administrador. Incluso si no tiene privilegios administrativos, todavía puede realizar las tareas de diseño y desarrollo web más comunes con IIS Express como usuario estándar.