Servidores Web e Servidores de Aplicacións

De Wiki do Ciclo ASIR do IES de Rodeira

Índice

Servidores de Aplicacións

Os servidores de aplicacións proporcionan un marco de traballo integrado para a realización de aplicacións web no que o servidor se encarga de procesos comúns como a xestión do acceso ás bases de datos ou o soporte de configuracións de alta dispoñibilidade permitindo ao programador de aplicacións centrarse na lóxica da mesma.

Os servidores de aplicacións manteñen ademáis un entorno de execución de aplicación, común as peticións de todos os clientes, de xeito que é simple compartir información entre estos, e impoñen unha estructura de aplicación que fai relativamente simple a separación entre a lóxica e a presentación da aplicación.

Boxinfo info.png
Os recursos que necesita cada aplicación se indican nun ficheiro de configuración dentro da mesma, e o servidor se encarga de xestionalos e proporcionarllos cando os precise. Este ficheiro se chama en .NET web.config e en Tomcat ROOT.xml.

Os servidores de aplicacións máis empregados hoxe en día son os basados en JAVA como Apache Tomcat ou en .NET como o IIS. Neste documento podes ver como configurar e instalar Tomcat como servidor de JSP e Servlets.

Servidores Web

A misión dos servidores Web e cargar e enviarlle aos clientes os documentos solicitados. Para que o servidor dispoña de capacidade de proceso é necesario engadirlle os módulos correspondentes as tecnoloxías a empregar: SSI, CGI ou as linguaxes de scripting desexadas, como PHP.

Os servidor web máis utilizado no mundo con moita diferencia é o Apache Web Server, seguido polo Microsoft IIS.

Apache Web Server

Apache é a base do que se coñece por entornos LAMP, formados polo Sistema Operativo Linux, o Servidor Web Apache, a Linguaxe de Scripting PHP e o Xestor de Bases de Datos MySQL de uso xeral na Web.

Estructura do Apache

En Debian o apache almacena a súa configuración en /etc/apache2, co seguinte formato:

apache2.conf
Almacena a configuración do servidor (en outras distribucións chámase httpd.conf) incluindo ficheiros que se atopan en outros lugares. Debian trocea o ficheiro en varias carpetas para facilitar a xestión, aínda que ao final a configuración global residirá neste ficheiro.
envvars
Conten variables de entorno relativas ao funcionamento do servidor web.
magic
Almacena bytes de identificación de varios tipos de arquivo.
ports
Configura os portos dende o que Apache servirá as páxinas
conf.d
Neste directorio se configuran os permisos de acceso do servidor a diversos sitios.
mods-available
Neste directorio atópanse os módulos Apache instalados no sistema. Para activalos, é necesario crear un enlace aquí dende a carpeta mods-enabled
mods-enabled
Este directorio contén enlaces aos módulos de mods-available que se atopan activos.
sites-available
Este directorio almacena a configuración dos sitios web virtuais configurados. Para activalos é necesario crear un enlace aquí dende a carpeta sites-enabled
sites-enabled
Este directorio conten enlaces aos sitios web de sites-available que se atopan activos.

Servidores Virtuais

O protocolo http indica na cabeceira da petición o nome do servidor web ao que se lle realiza a solicitude. Esto o aproveitan os servidores web para seleccionar cal dos sitios que albergan deben servir, o que posibilita que un único servidor cunha única dirección IP poda atender varios sitios web ao mesmo tempo coñecidos como Sitios Virtuais.

En Apache a configuración dos sitios virtuais realízase mediante a directiva VirtualHost. Vexamos un exemplo de creación dun sitio virtual chamado www.virtualhost.com.

  • En primeiro lugar debemos crear un ficheiro en /etc/apache2/sites-available coa configuración do sitio. Podemos chamalo, por exemplo, www.virtualhost.com
  <VirtualHost *:80>
     ServerName www.virtualhost.com
     DocumentRoot /var/sites/virtualhost
  </VirtualHost>
Esto indica que o servidor virtual aceptará conexións en todas as IP da máquina (*), no porto 80. Que o servidor atenderá ás peticións de www.virtualhost.com e que os documentos están situados na carpeta /var/sites/virtualhost.
  • Logo debemos activar o sitio, e decir, crear un enlace dende /etc/apache2/sites-enabled. O faremos co script a2ensite:
   a2ensite www.virtualhost.com
Supoñendo que o ficheiro se chame www.virtualhost.com, que non ten por qué.

Configuracións de Seguridade

Alias, Directory, Location

Mediante Directory e Location facilitamos acceso a determiñadas carpetas ao servidor Web e configuramos os seus permisos de acceso. Directory indica o camiño no árbore de directorios do sistema ao directorio a configurar, mentras que Location indica o camiño dende o árbore do sitio web:

   <Directory /var/lib/mywebapp>
   ....
   </Directory>
  <Location /documents>
  ....
  </Location>

Para posibilitar o acceso a directorios que residen fora do árbore do sitio web é necesario empregar a directiva Alias. Por exemplo:

  Alias /myapp /var/lib/mywebapp

Posibilitará o acceso dos clientes aos documentos situados en /var/lib/mywebapp poñendo /myapp detrás da URL do sitio.

Boxinfo info.png
As configuracións de seguridade se poden crear en tres sitios: A nivel de servidor (en conf.d ou apache2.conf), a nivel de host virtual (dentro do VirtualHost) ou a nivel de Directory ou Location
Order, Allow, Deny

Unhas das directivas de seguridade máis importantes a nivel de permisos de acceso son Allow e Deny. Estas directivas se evalúan na orde especificada coa directiva Order.

  • Si especificamos Order Allow,Deny, en primeiro lugar se procesarán todas as directivas Allow, si ningunha directiva Allow permite o acceso, o acceso se denega. Logo procesarán as directivas Deny, e si algunha o prohíbe se denegará o acceso.
  • Si especificamos Order Deny,Allow, en primeiro lugar se procesarán todas as directivas Deny, si ningunha directiva Deny o impide se permite o acceso. Se non, se procesarán as directivas Allow si sigue sen coincidir ningunha entrada se denega o acceso.

O uso de Allow e Deny pode ser:

Allow/Deny from address
Allow/Deny from url
Allow/Deny from all
Options

Mediante Options se poden activar o desactivar certas características dentro do servidor web, do sitio virtual ou dun directorio, dependendo do lugar en que a situemos.

A sintaxe é:

Options [+|-]option [[+|-]option] ...
Options All
Options None
Por defecto o valor é Options All.

Os valores a activar ou desactivar en Options son:

All
Activa todas as opcións salvo MultiViews.'E a opción por defecto
ExecCGI
Permite a execución de CGI.
FollowSymLinks
Permite seguir os enlaces simbólicos. Únicamente funciona no arquivo .htaccess ou dentro dun Directory
Includes
Permite a execución de Server Side Includes (SSI)
IncludesNOEXEC
Permite a execución de Server Side Includes (SSI) pero desactivando a execución de CGI e comandos externos.
Indexes
Permite a listaxe do contido dun directorio no cliente.
MultiViews
Activa a posibilidade de variar o contido enviado en función as características anunciadas polo navegador, como o idioma (Negociación do Contido).
SymLinksIfOwnerMatch
Permite seguir os enlaces simbólicos únicamente si o destiño é do mesmo propietario que a orixe.
Configuración de Seguridade a Nivel de Administrador de Sitio

O Administrador do servidor Web pode configurar os permisos otorgados sobre un sitio Web a varios niveis: A nivel de servidor completo (en conf.d ou apache2.conf), a nivel de host virtual (dentro do VirtualHost) ou a nivel de directorio (dentro de Directory ou Location). Sen embargo, en ocasións pode ser necesario que o Administrador dun sitio Web poda configurar a seguridade da súa aplicación sen posibilidade de alterar os demáis hosts virtuais. Esto pode conseguirse mediante o ficheiro .htaccess.

O ficheiro .htaccess conten directivas de permisos (Options) ou de autenticación que afectan á carpeta onde están situados. O Administrador do Servidor Web otorgará permiso para utilizar estas directivas mediante AllowOverride.

Autenticación

Boxinfo info.png
A Autenticación é o proceso de verificación de identidade dun cliente, e a Autorización é o proceso polo que se determiña o nivel de permisos de acceso á información de un determinado cliente a partir da súa identificación

Apache implementa a autenticación e a autorización mediante módulos. Os principais módulos involucrados son:

Tipos de Autenticación
mod_auth_basic que proporciona autenticación básica, na que a password viaxa en claro, e mod_auth_digest no que a password viaxa cifrada con MD5. Os navegadores soportan na súa maioría a autenticación básica, mentras que a digest está menos soportada. A directiva a utilizar é AuthType.
Proveedores de Autenticación
Indican o modo en que se comproba a parella de usuario:contrasinal e se especifican coa directiva AuthBasicProvider ou AuthDigestProvider. Proveedores comúns son mod_authn_anon, mod_authn_dbd, mod_authn_dbm, mod_authn_file, mod_authnz_ldap.
Módulos de Autorización
Indican como se obteñen os permisos sobre os recursos e se especifican coa directiva Require. Módulos comúns son mod_athnz_ldap, mod_authz_dbm, mod_authz_groupfile, mod_authz_host, mod_authz_owner e mod_authz_user.

Normalmente, a autenticación e autorización se realizan nunha directiva Directory ou dentro do .htaccess da carpeta a protexer, nese caso necesitaremos permitir a sobreescritura do permiso AuthConfig: AllowOverride AuthConfig.

Necesitaremos un ficheiro cos usuarios e passwords. O formato e almacenamento de este arquivo depende do proveedor de autenticación elexido. Podemos utilizar por exemplo, mod_authn_file, que un ficheiro de texto xestionado coa utilidade htpasswd. Para crear o ficheiro de passwords:

htpasswd -c /etc/apache/security/mysite/passfile usuario

A configuración a incluír na sección Directory correspondente, ou no ficheiro .htaccess pode ser similar a esta:

AuthType Basic
AuthName "Sitio Restrinxido"
AuthBasicProvider file
AuthUserFile /etc/apache/security/mysite/passfile
Require valid-user

Na documentación de apache podes ver todas as posibilidades de configuración.

Outro método de autenticación dos clientes consiste no uso de certificados dixitais. O Servidor Web pode solicitarlle ao cliente o envío dun certificado de cliente válido para permitirlle acceder ao site ou a carpeta protexida. En este artigo podes ver como se realizaría a configuración do servidor Apache para este cometido.

Http Seguro

Https é a versión segura do protocolo Http. Non é un protocolo distinto de Http, se non que é a combinación de este último cun mecanismo de transporte SSL ou TLS co obxecto de garantir protección da comunicación cliente-servidor. Utilízase normalmente para comunicacións como transaccións bancarias e pago de bens e servizos. Este servizo utiliza normalmente o porto TCP 443 en lugar do 80 de uso habitual, e un prefixo https://, en lugar de http://.

A comunicación entre cliente e servidor se protexe mediante cifrado de chave pública, de xeito que non sexa posible a interceptación da información, ademáis de garantir a autenticidade do servidor co que se contacta. Esto se realiza mediante o módulo Apache ssl que proporciona soporte para SSL versións 2 e 3 e TLS versión 1.

O cifrado da información emprega cifrado de chave pública ou asimétrico. O servidor ten unha parella de chaves de cifrado: Unha chave privada, que se almacena en segredo, e unha chave pública, que se distribúe nun certificado de cifrado. A información cifrada con unha das chaves únicamente se pode descifrar coa outra. Esto garantiza que a información que envía o cliente únicamente pode ser descifrada polo servidor ao que vai dirixida, e viceversa.

Para habilitar un sitio web sobre https precisamos habilitar o módulo ssl e conseguir un certificado de servidor. O certificado de servidor é un certificado x509 que contén a chave pública do servidor e está firmado por unha autoridade de certificación que resulte fiable para o navegador.

Boxinfo info.png
É posible a creación de certificados autofirmados. Nese caso o usuario do cliente terá que aceptar de xeito manual o certificado para poder acceder a páxina

As Autoridades de Certificación proporcionan firmas de certificados con varios niveis de seguridade (e de precio) según as comprobacións que realizan previamente ao firmado da solicitude de certificado. Os navegadores Web inclúen "de fábrica" as autoridades máis importantes, aínda que se botan de menos algunhas como a dirección xeral da policía española ou a FNMT. Todos os navegadores soportan a inclusión manual de novas autoridades de certificación.

As aplicacións Web tamén poden solicitarlle ao cliente que proporcione un certificado para concederlle o acceso ao sitio. Nese caso, o navegador cliente debe ter instalados os certificados de usuario precisos que serán enviados ao servidor. O servidor previa comprobación do certificado, aceptará ou rexeitará o acceso.

Boxinfo info.png
Únicamente é posible un sitio Web sobre https por cada dirección IP do servidor. Sen embargo, nos servidores e clientes máis modernos podemos facer uso de SNI (Server Name Indication) que permite utilizar varios hosts virtuais baixo https.

Podes ver como configurar o servidor Apache para https neste documento

Internet Information Services

IIS é o servidor proporcionado pola plataforma Windows Server, e proporciona un servidor de aplicacións .NET, xunto cun Servidor Web capaz de executar ASP e ampliable mediante módulos. Igual que o Apache, soporta servidores virtuais, configuración de seguridade a nivel de directorio, autenticación e http seguro.