Manual de configuración Web.Config

  1. Home
  2. Knowledge Base
  3. WebConfig
  4. Manual de configuración Web.Config

Objeto y alcance.

El objetivo de este documento es dar a conocer la correcta configuración del archivo web.config, el cual contiene información que controla la carga de módulos, configuraciones de seguridad, configuraciones del estado de la sesión, opciones de compilación y el lenguaje de la aplicación.
Nota: El documento se estará actualizando constantemente.

Documentos de referencia.

Norma internacional ISO 9001:2015/NMX-CC-9001-IMNC-2015 apartado 8.3.1 Planificación del diseño y desarrollo, 8.3.2 Planificación del diseño y desarrollo, 8.3.3 Entradas para el diseño y desarrollo, 8.3.4. Controles del diseño y desarrollo, 8.3.5 Salidas del diseño y desarrollo, 8.3.6 Cambios del diseño y desarrollo, 8.5 Producción y provisión del servicio.

Definiciones.

Web.Config: Archivo principal de configuración para una aplicación web.
Archivo log: Archivos que contienen mensajes o información sobre el sistema en forma de bitácora, donde se puede encontrar información sobre si ocurrió algún error.
Web Services: Tecnología que utiliza un conjunto de protocolos y estándares que sirven para intercambiar datos entre aplicaciones.
IIS: “Servicio de Información de Internet” se utiliza para alojar sitios web en el servidor.
Consola de navegador: Es un panel de control general donde podemos ver varios aspectos de la página en la que nos encontramos; su etiquetado HTML, sus estilos CSS, etc.
Tag / Llave: Se refiere a una sección del archivo Web.Config, donde se realiza alguna configuración.

Roles y responsabilidades.

Desarrollador:
• Persona o grupo encargado de ejecutar/desarrollar la solución.
• Generar una propuesta de diseño de la solución según el proyecto.
• Resolver posibles vulnerabilidades detectadas.
Tester
• Validar y documentar la solución propuesta por el desarrollador.
• Definir casos de uso.
• Evidencia de pruebas.
• VoBo del desarrollo.
Implementador:
• Llevar a cabo las configuraciones necesarias que se describen en este documento.
• Hacer pruebas necesarias en ambientes de IMP, UAT y así poder realizar la liberación Producción.

Ubicación del archivo web.config de IDPortal

Después de abrir el archivo Web.Config, encontraremos diferentes configuraciones que se muestran a continuación.

  1. Primero vamos a localizar los siguientes tags, donde se colocan las URL de los servicios; WSUsuarios, WSImagenes, WSConsultas, WSCliente.

NOTA: La mejor práctica al configurar nuestro sitio es que se coloquen las URL´s del web.config con localhost o bien la IP del equipo (interna), de esta manera dentro del mismo IIS, resuelve las peticiones de forma interna sin la necesidad de buscar por una salida a internet.

Posterior vamos a colocar la ruta donde se va a escribir el archivo Log, y la colocaremos en el tag “RutaLog4Net”, Debemos tener creada en este punto la carpeta en la ruta agregada al tag.

NOTA: La ruta de logs se recomienda guardarla en otra unidad diferente a C:\

Después vamos a encontrar el tag para colocar los WebServices que corresponden a la funcionalidad de cheques, en caso de que nuestro proyecto tenga dicha función, es necesario colocar las URL correspondientes:

  • NOTA: En este punto podremos configurar cuantos registros por página podremos visualizar.

Parámetro generales

Después vamos a encontrar las siguientes configuraciones:

  • TipoAccesoDatosKey: Indicará si el acceso a los datos se realizará por medio de WebServices o Bussines Layer.
    • 0 = BussinesLayer.
    • 1 = WebServices.

NOTA: Se recomienda que se utilice el acceso a datos por BussinesLayer, ya que esto es óptimo para el sitio.

  • UseKeygen: Clase de encriptación si es 0 usa Dns.GetHostName(), 1 la llave Host.
  • Host: Indica el nombre de la llave host.
  • TipoConexion: Indica de donde va a tomar la contraseña para la cadena de conexión.
    • 0 = Del connectionstring del WEB.CONFIG.
    • 1 = Del connectionString y password Cifrado en Archivo XML.

NOTA: Se recomienda que esta configuración se realice tomando la contraseña cifrada del archivo XML, por temas de seguridad.

  • ExpRegularLogin: Indica el formato o estructura del login.
  • TipoCaptcha: Funcionalidad que permite configurar el uso del Captcha en el login:
    • 0 = No usa captcha.
    • 1 = Siempre lo usa.
    • 2 = Al equivocarse aparece el captcha.

NOTA: Se recomienda que, cuando un sitio está expuesto a internet siempre se utilice el captcha ya sea con la opción 1 o 2, esto para evitar ataques.

  • MostrarServer: Funcionalidad que oculta o muestra el nombre del servidor en la pantalla de Login.
    • 0 = No muestra.
    • 1 = Muestra nombre de servidor.
  • MostrarRecuperaContrasenia: Funcionalidad que mostrará o no el botón para que el usuario recupere su contraseña:
    • 0 = No se muestra.
    • 1 = Si se muestra.

Parámetros CDO

Vamos a localizar la configuración para en caso de tener la funcionalidad de constancias NOM15 activa, las consultas de constancias y descargas funcione correctamente. Para esto colocaremos el usuario, contraseña y usrl de verificación que nos proporcionen en la siguiente llave:

NOTA: Las credenciales mostradas son inexistentes, solo son para fines informativos.

Parámetros Validación Visual Web

Para realizar la configuración de la Validación Visual Web, se requieren ingresar la URL correspondiente del Activador en la siguiente llave.

Cadena de conexión

Es necesario colocar la cadena de conexión en la siguiente línea, donde se coloca el nombre de la base, usuario y en caso de que corresponda la contraseña:

  • NOTA: En caso de que el proyecto cuente con el servicio tracking también se coloca su cadena de conexión.
  • NOTA 2: En este ejemplo se colocó el tipo de conexión con valor =1, es por eso por lo que no se muestra la contraseña.

URL’s de WebServices

En la siguiente sección colocaremos las URL´s de los servicios de Imágenes, Consultas, Usuarios, Cheques, esto para que cuando se conecte por medio de Webservices los tome de aquí.

NOTA: La mejor práctica al configurar nuestro sitio es que se coloquen las URL´s del web.config con localhost o bien la IP del equipo (interna), de esta manera dentro del mismo IIS, resuelve las peticiones de forma interna sin la necesidad de buscar por una salida a internet.

Bindings

Cuando tenemos un sitio que cuenta con un certificado es necesario que las url´s se configuren con HTTPS y su seguridad se debe colocar “Transport”, si no lo tiene puede ser con HTTP y en este caso la seguridad colocamos “None” en la parte de bindings.

NOTA: Se recomienda que en un sitio productivo siempre se utilice HTTPS, un certificado y de esta forma utilizar la opción de Transport.

Cliente

En esta parte vamos a colocar las URL´s del servicio WcfFileTransfer.

Compilation

Terminando de hacer el paso anterior, Buscaremos la etiqueta de “Compilation” y Cambiaremos el valor “false” después de “debug”

Custom headers

Seguido del paso anterior buscaremos la etiqueta con nombre “CustomHeaders” y verificaremos que se encuentre de esta manera en caso de no ser así es necesario modificarlo a como se muestra.

<customHeaders>
	<add name="X-Frame-Options" value="SAMEORIGIN" />
	<add name="Content-Security-Policy" value="worker-src data: blob:; script-src 'self' http://* 'unsafe-eval' 'unsafe-inline';" />
	<remove name="X-AspNet-Version"/>
	<remove name="X-AspNetMvc-Version"/>
	<remove name="X-Powered-By"/>
</customHeaders>

Request filtering

Para evitar que en el navegador muestre información del servidor donde, se encuentra nuestro sitio, debemos validar la siguiente línea que se encuentra en el web.config la cual se deberá mostrar de la siguiente manera:

<requestFiltering removeServerHeader="true" allowDoubleEscaping="false">
	<requestLimits maxUrl="100004096"/>
	<verbs allowUnlisted="true">
	<add verb="OPTIONS" allowed="false"/>
	</verbs>
</requestFiltering>

Validación

Para validar que el resultado es exitoso, se realizaran los siguientes pasos:

  • Primero abrimos el sitio en un navegador, en este ejemplo usamos Chrome, y con la tecla “F12”, abriremos la consola.
  • Ingresamos un usuario y contraseña y damos clic en el botón “Entrar”.
  • Después de ingresar en la consola daremos clic en la opción “Network”.
  • Dentro de la sección “Name”, seleccionamos el primer aspx, el cual es “Wfrm_Contenido.aspx”.
  • Esto va a abrir un módulo donde en la sección “Headers”, podremos observar que ya no se visualiza el nombre del servidor, así como más parámetros cifrados.

RequesFiltering servicios (WsUsuarios, WsImagenes, WsConsultas, WcfServicios, WcfFileTransfer)

Esta configuración se debe realizar en los Web.Config de todos los servicios, que tiene el sitio, para esto es necesario agregar la línea en la siguiente posición del config dentro de la sección “webServices”.

<security>
	<requestFiltering removeServerHeader="true" />
</security>

NOTA: Es necesario hacer la misma configuración en los diferentes WebServices (WsUsuarios, WsImagenes, WsConsulta, WcfServicios, WcfFileTransfer).

Validación

Para validar que el resultado es exitoso, se realizaran los siguientes pasos:

  • Primero levantamos el servicio en un navegador, en este ejemplo usamos Chrome, y con la tecla “F12”, abriremos la consola.
  • Después de ingresar en la consola daremos clic en la opción “Network”.
  • Dentro de la sección “Name”, seleccionamos la primera opción, el cual corresponde al WebService que estemos validando, en este caso es el WsUsuarios.
  • Esto va a abrir un módulo donde en la sección “Headers”, podremos observar que ya no se visualiza el nombre del servidor, así como más parámetros cifrados.

Machinkey

Otra configuración que debe realizarse para disminuir las vulnerabilidades, en este caso sobre la encriptación de la página del visor es necesario realizar los siguiente:

Localizar el tag “MachineKey” en el Web.Config del IDPortal y colocarlo de la siguiente manera:

<machineKey compatibilityMode="Framework45" />

Validación

Para comprobar que está realizando correctamente el encriptado de la información realizamos los siguientes pasos:

  • Ingresar a IDPortal.
  • Abrimos un expediente en el visor y damos clic en tecla “F12” para visualizar la consola y das clic en botón “Network”.
  • Seleccionamos la petición.
  • Después de tener la petición buscamos la línea de “ViewState” y copiamos solo lo que viene después de “Value” en un bloc de notas o bien en una página para decodificar.
  • En la herramienta de NotePad++ dar clic en “Plugins” después “MIME Tools” y después “Base 64 Decode” nos debe dar de resultados iconos indescifrables lo que indica que, la encriptación la hace de forma correcta.

NOTA: Se puede utilizar alguna otra herramienta para decodificar base 64 y el resultado debe ser el mismo.

Configuración Web.Config de Servicio WcfFileTransfer

A continuación, se va a describir la configuración de WebService “WcfFileTransfer” con token de seguridad esto para aumentar la seguridad en la comunicación de los servicios con las aplicaciones móviles, el token protege las suplantaciones y el cifrado protege la información enviada y recibida.

Primero se requiere abrir el archivo Web.Config, correspondiente al WcfFileTransfer y dentro de la llave “appSetings” se debe agregar las siguientes líneas:

A continuación, se colocan las llaves, en caso de requerir copiarlas.

<add key="JWT_SECRET_KEY" value="CLIENTEGENERICODIGIPRO" />
<add key="JWT_AUDIENCE_TOKEN" value="https://localhost/" />
<add key="JWT_ISSUER_TOKEN" value="https://localhost/" />
<add key="JWT_EXPIRE_SECONDS" value="300" /> 

Donde,

  • JWT_SECRET_KEY: Es un algoritmo que requiere el sistema para generar la llave cifrada y debe de ser de 16 caracteres.
  • JWT_AUDIENCE_TOKEN: Se debe de agregar la url del sitio con el que se estará trabajando.
  • JWT_ISSUER_TOKEN: Se debe de agregar la url del sitio con el que se estará trabajando.
  • JWT_EXPIRE_SECONDS: Sera la duración de sesión del token esta duración deberá de ser calculada en segundos.

También es necesario que, dentro de la llave “behaviors”, se agregue la siguiente línea para poder transmitir archivos de mayor capacidad desde la aplicación.

<behavior name="streamingBehaviorApp">
<dataContractSerializer maxItemsInObjectGraph="2147483647"/>
<serviceDebug includeExceptionDetailInFaults="true" />
<serviceMetadata httpsGetEnabled="true" httpGetEnabled="true" />
<serviceThrottling maxConcurrentCalls="500" maxConcurrentSessions="500" maxConcurrentInstances="500" />
<serviceAuthorization serviceAuthorizationManagerType="WcfFileTransfer.App, WcfFileTransfer"/>
</behavior>

ServiceAuthorization: Sera la llave de configuración para habilitar el token.

Configuración Web.Config de Servicio WcfServicios

A continuación, se va a describir la configuración de WebService “WcfServicios” con token de seguridad esto para aumentar la seguridad en la comunicación de los servicios con las aplicaciones móviles, el token protege las suplantaciones y el cifrado protege la información enviada y recibida.

Primero se requiere abrir el archivo Web.Config, correspondiente al WcfServicios y dentro de la llave “appSetings” se debe agregar las siguientes líneas:

A continuación, se colocan las llaves, en caso de requerir copiarlas.

<add key="JWT_SECRET_KEY" value="CLIENTEGENERICODIGIPRO" />
<add key="JWT_AUDIENCE_TOKEN" value="https://localhost/" />
<add key="JWT_ISSUER_TOKEN" value="https://localhost/" />
<add key="JWT_EXPIRE_SECONDS" value="300" />

Donde,

  • JWT_SECRET_KEY: Es un algoritmo que requiere el sistema para generar la llave cifrada y debe de ser de 16 caracteres.
  • JWT_AUDIENCE_TOKEN: Se debe de agregar la url del sitio con el que se estará trabajando.
  • JWT_ISSUER_TOKEN: Se debe de agregar la url del sitio con el que se estará trabajando.
  • JWT_EXPIRE_SECONDS: Sera la duración de sesión del token esta duración deberá de ser calculada en segundos.

También es necesario que, dentro de la llave “behaviors”, se agregue la siguiente línea para poder transmitir archivos de mayor capacidad desde la aplicación.

<behavior name="streamingBehavior">
<dataContractSerializer maxItemsInObjectGraph="2147483647"/>
<serviceDebug includeExceptionDetailInFaults="true"/>
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
<serviceThrottling maxConcurrentCalls="500" maxConcurrentSessions="500" maxConcurrentInstances="500"/>
<serviceAuthorization serviceAuthorizationManagerType="WcfServicios.OAuthAuthorizationManager, WcfServicios" />
</behavior>

ServiceAuthorization: Sera la llave de configuración para habilitar el token.

Configuración en IIS

Terminando de verificar en la etiqueta “CustomHeaders”, Guardamos los cambios y volvemos a ingresar a nuestro IIS y nos posicionamos sobre nuestro sitio.

HTTP response headers

Una vez que estemos posicionados en nuestro sitio Buscaremos en la sección de IIS la opción de HTTP Response Headers.

X-powered-by

Ingresaremos a la opción dando doble clic, en caso de existir el encabezado X-pewered-By lo seleccionaremos.

Cuando tengamos seleccionado la opción X-Power-By daremos clic en “Remove”.

Nos mostrara la siguiente ventana preguntándonos si deseamos eliminar la opción del Header daremos clic en el botón “Yes”.

X-frame-origin

Seleccionamos la opción de “Add” Para agregar un nuevo Header.

Nos mostrara la siguiente ventana en la cual agregaremos el nombre del nuevo header y su valor, cuando se agregue daremos clic en el botón “OK”

Como resultado tendremos nuestro nuevo Herder para usar

Para la sección de “Missing Secure Attribute in Encrypted Session (SSL) Cookie” se resuelve con las siguientes modificaciones en el archivo Web.Config del IDPortal, es importante resaltar que el portal debe estar en https.

<rewrite>
     <outboundRules>
     <rule name="Use only secure cookies" preCondition="Unsecured cookie">
     <match serverVariable="RESPONSE_SET_COOKIE" pattern=".*" negate="false" />
      <action type="Rewrite" value="{R:0}; secure" />
      </rule>
    <preConditions>
      <preCondition name="Unsecured cookie">
      <add input="{RESPONSE_SET_COOKIE}" pattern="." />
      <add input="{RESPONSE_SET_COOKIE}" pattern="; secure" negate="true" />
    </preCondition>
      </preConditions>
       </outboundRules>
</rewrite>

Validación

Para validar la sesión Cookie realizamos lo siguiente:

1.- Ingresar al IDPortal

2.- Dar clic en tecla “F12” para abrir la consola del navegador y dar clic en “Aplicación”.

3.- Dar clic en “Cookies”.

4.- Vamos a visualizar la URL del portal y al darle clic se debe validar que el check “Secure” este activo.

Redireccionamiento

Para esto nos posicionaremos en nuestro sitio a configurar en el apartado de “Home” seleccionaremos la opción de “URL Rewrite”

Una vez abierta la sección URL Rewrite daremos clic en “Add Rules” para agregar una nueva configuración.

Una vez abierta la ventana seleccionaremos la opción “Blank rule” seguido de eso el botón “OK”

Se nos abrirá la siguiente ventana y agregaremos en name: “Redireccionamiento” seguido de eso en Pattern: (.*) por ultimo activaremos el check de “Ignore case”

Después de realizar eso agregaremos la condición en la opción Condition Input: HTTP_HOST

Y en Pattern: ^[^http] guardamos la condición con el botón “OK”

Agregaremos la siguiente condición de la siguiente manera en Condition Inpunt: [HTTP] y en Pattern: off guardaremos la condición con el botón “OK”

Desplazaremos la barra hacia abajo y en la parte de Action type escogeremos la opción “Redirect” pasamos a Action Propeties y agregaremos la url a la cual redireccionara nuestro sitio, ejemplo https://test.digipromovil.com:446/IDPortal/Default.aspx

Por último, en Redirect Type seleccionaremos la opción de “Permanent (301)”

Como último punto en el menú Actions seleccionaremos la opción de “Apply” para guardar nuestra configuración.

Nota: Esta configuración se realiza solo en caso de ser requerida.

FAQs y mejores prácticas de configuración

  1. La mejor práctica al configurar nuestro sitio es que se coloquen las URL´s del web.config con localhost o bien la IP del equipo (interna), de esta manera dentro del mismo IIS, resuelve las peticiones de forma interna sin la necesidad de buscar por una salida a internet.

NOTA: Cabe señalar que en el parámetro WcfConfig, que configuramos en la tabla de Catparametros debe estar configurado con el dominio en caso de que no se tenga se configura con IP externa, ya que esta es la que realiza la comunicación con el DocScan.

SLA

Se llevarán a cabo actualizaciones periódicamente, las cuales seguirán disminuyendo las vulnerabilidades y así garantizar el correcto funcionamiento de la aplicación.

Se recomienda que se revise la información aquí detallada, o si es necesario mantener el documento abierto al realizar la configuración de un sitio.

Documentación asociada

Documentos anexos a este procedimiento que son necesarios para su cumplimiento y gestión.

  • Procedimiento de desarrollo sprint web-movilidad.

Was this article helpful?

Related Articles