• Específicos de Apache

1. Paquetes y módulos

a) Buscar los paquetes instalables cuyo nombre empiece por "apache".

Existe una gran variedad de paquetes con el nombre de apache, pero muchos de ellos son solo librerías, o módulos para ciertas cosas especificas: A continuación se muestran aquellos paquetes que empiecen por "apache".

iker@iker-Studio-XPS-1340:~$ apt-cache search ^apache o en su defecto aptitude search ^apache
apache2 - Apache HTTP Server metapackage
apache2-doc - Apache HTTP Server documentation
apache2-mpm-event - Apache HTTP Server - event driven model
apache2-mpm-prefork - Apache HTTP Server - traditional non-threaded model
apache2-mpm-worker - Apache HTTP Server - high speed threaded model
apache2-prefork-dev - Apache development headers - non-threaded MPM
apache2-threaded-dev - Apache development headers - threaded MPM
apache2-utils - utility programs for webservers
apache2.2-bin - Apache HTTP Server common binary files
apache2.2-common - Apache HTTP Server common files
apache2-mpm-itk - multiuser MPM for Apache 2.2
apache2-suexec - Standard suexec program for Apache 2 mod_suexec
apache2-suexec-custom - Configurable suexec program for Apache 2 mod_suexec


b) Ver el listado de los paquetes instalados de apache2, y ver su contenido

iker@iker-Studio-XPS-1340:~$ aptitude search ~iapache
i apache2 - Apache HTTP Server metapackage
i A apache2-mpm-prefork - Apache HTTP Server - traditional non-threaded model
i A apache2-utils - utility programs for webservers
i A apache2.2-bin - Apache HTTP Server common binary files
i A apache2.2-common - Apache HTTP Server common files
i libapache2-mod-php5 - server-side, HTML-embedded scripting language (Apache 2 module)


c) Listar los módulos del apache2 instalado, tanto los estáticos como los dinámicos.


iker@iker-Studio-XPS-1340:~$ ls /etc/apache2/mods-available/
actions.conf authn_file.load cgid.conf dir.load include.load negotiation.conf proxy.load substitute.load
actions.load authnz_ldap.load cgid.load disk_cache.conf info.conf negotiation.load proxy_scgi.load suexec.load
alias.conf authz_dbm.load cgi.load disk_cache.load info.load php5.conf reqtimeout.conf unique_id.load
alias.load authz_default.load charset_lite.load dump_io.load ldap.conf php5.load reqtimeout.load userdir.conf
asis.load authz_groupfile.load dav_fs.conf env.load ldap.load proxy_ajp.load rewrite.load userdir.load
auth_basic.load authz_host.load dav_fs.load expires.load log_forensic.load proxy_balancer.conf setenvif.conf usertrack.load
auth_digest.load authz_owner.load dav.load ext_filter.load mem_cache.conf proxy_balancer.load setenvif.load version.load
authn_alias.load authz_user.load dav_lock.load file_cache.load mem_cache.load proxy.conf speling.load vhost_alias.load
authn_anon.load autoindex.conf dbd.load filter.load mime.conf proxy_connect.load ssl.conf
authn_dbd.load autoindex.load deflate.conf headers.load mime.load proxy_ftp.conf ssl.load
authn_dbm.load cache.load deflate.load ident.load mime_magic.conf proxy_ftp.load status.conf
authn_default.load cern_meta.load dir.conf imagemap.load mime_magic.load proxy_http.load status.load


d) Ver la versión y las opciones de compilación del apache2 instalado.

iker@iker-Studio-XPS-1340:~$ apache2 -V
Server version: Apache/2.2.16 (Ubuntu)
Server built: Nov 18 2010 21:17:29
Server's Module Magic Number: 20051115:24
Server loaded: APR 1.4.2, APR-Util 1.3.9
Compiled using: APR 1.4.2, APR-Util 1.3.9
Architecture: 32-bit
Server MPM: Prefork
threaded: no
forked: yes (variable process count)
Server compiled with....
-D APACHE_MPM_DIR="server/mpm/prefork"
-D APR_HAS_SENDFILE
-D APR_HAS_MMAP
-D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
-D APR_USE_SYSVSEM_SERIALIZE
-D APR_USE_PTHREAD_SERIALIZE
-D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
-D APR_HAS_OTHER_CHILD
-D AP_HAVE_RELIABLE_PIPED_LOGS
-D DYNAMIC_MODULE_LIMIT=128
-D HTTPD_ROOT="/etc/apache2"
-D SUEXEC_BIN="/usr/lib/apache2/suexec"
-D DEFAULT_PIDLOG="/var/run/apache2.pid"
-D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
-D DEFAULT_LOCKFILE="/var/run/apache2/accept.lock"
-D DEFAULT_ERRORLOG="logs/error_log"
-D AP_TYPES_CONFIG_FILE="mime.types"
-D SERVER_CONFIG_FILE="apache2.conf"



2. Procesos

a) Ver los procesos apache lanzados, y comprobar que el usuario es root para el proceso padre y www-data para el resto.

iker@iker-Studio-XPS-1340:~$ ps aux | grep apache2
root 1260 0.0 0.2 38188 9148 ? Ss 14:58 0:00 /usr/sbin/apache2 -k start
www-data 2957 0.0 0.1 38188 4372 ? S 15:31 0:00 /usr/sbin/apache2 -k start
www-data 2958 0.0 0.1 38188 4372 ? S 15:31 0:00 /usr/sbin/apache2 -k start
www-data 2985 0.0 0.1 38188 4372 ? S 15:31 0:00 /usr/sbin/apache2 -k start
www-data 2986 0.0 0.1 38188 4372 ? S 15:31 0:00 /usr/sbin/apache2 -k start
www-data 2987 0.0 0.1 38188 4372 ? S 15:31 0:00 /usr/sbin/apache2 -k start
iker 3432 0.0 0.0 5176 768 pts/0 S+ 16:05 0:00 grep --color=auto apache2


b) Detener el apache, hacer que escuche por un puerto >1024 e intentar ejecutarlo como usuario no root.

En primer lugar detendremos el servicio de apache

iker@iker-Studio-XPS-1340:~$ /etc/init.d/apache2 stop

Después de parar el servicio, se debe ir al fichero de configuración, etc/apache2/ports.conf, y en la configuración general del puerto, se cambia el puerto por defecto 80, por el puerto 2000. A continuación intentamos iniciar el servicio, y vemos que al no ser super usuario, no se puede activar el servicio apache de nuevo.

iker@iker-Studio-XPS-1340:~$ /etc/init.d/apache2 start

Starting web server apache2 [Mon Mar 14 16:21:31 2011] [warn] module php5_module is already loaded, skipping
(13)Permission denied: apache2: could not open error log file /var/log/apache2/error.log.
Unable to open logs
Action 'start' failed.
The Apache error log may have more information.


Para iniciar correctamente el servicio se debe realizar con una cuenta de super usuario, en caso contrario, el servicio no correrá en la máquina.


3. Comprobar el uso de los siguientes módulos básicos

a) [*] mod_status: presentar una pagina con informacion del servidor.

Para ello se debe ir al navegador, y poner como URL: http://localhost:2000/server-status. A continuación se muestra parte de la pagina que se muestra en el navegador:
Pantallazo.png
Pantallazo.png

Si además se quiere obtener más informacion a cerca del servidor, se puede ir al fichero /etc/apache2/httpd.conf y añadir la linea ExtenderStatus On, y obtendremos más información.

b) [*] mod_dir: visualizar un fichero de nombre indice.html con la url http://localhost:8080/

El modulo_dir, permite acceder a una pagina del directorio, sin necesidad de tener que incluir el nombre del fichero. Para ello, primeramente, iremos al fichero de configuración etc/apache2/ports.conf y en vez de elegir el puerto por defecto 2000, elegiremos el puerto 8080 e inclureimos al principio la linea NameHostVirtual *:8080. Además, crearemos un fichero especifico de configuración del host virtual, en /etc/apache2/sites-enabled/, este fichero se incluirá directamente en la configuración de apache, ya que en la configuración por defecto, están incluidas todas las configuraciones incluidas en el directorio /sites-enabled/. Otra opción que realizaremos, será la de crear una carpeta específica para la pagina web en el siguiente path: /var/www/pagina. También se deberá crear el directorio para los logs dentro del directorio anteriormente creado.

El fichero de configuración dentro de sites-enable, deberá incluir lo siguiente:

<VirtualHost *:8080>
ServerAdmin webmaster@pagina.com
ServerName www.pagina.com
ServerAlias pagina.com *.pagina.com


#Indexes + Directory Root.
DirectoryIndex index.html index.php indice.html
DocumentRoot /var/www/pagina/


#Logfiles
ErrorLog /var/www/pagina/logs/error.log
CustomLog /var/www/pagina/logs/access.log combined
</VirtualHost>


En la pagina de indice.html, escribiremos cualquier cosa para poder comprar que funciona correctamente en el navegador. Antes de comprobar el funcionamiento de la pagina, se deben cargar los nuevos parámetros, para ello reiniciamos el servicio de apache2. Si el funcionamiento es el correcto deberíamos ver la página escrita en el fichero indice.html dentro del directorio /var/www/pagina/.

c) Logs de acceso: modificar algún parámetro del formato del fichero de logs e acceso y comprobarlo.

Primeramente veremos como es el formato de un fichero log. Si se muestra, por ejemplo, el fichero access.log, vemos lo siguiente:

::1 - - [11/Mar/2011:14:16:39 +0100] "GET /phpmyadmin/index.php?token=2a94e2c6a7de74c74374bec77ca69b5f&old_usr=root HTTP/1.1" 200 3811 "-" "Mozilla/5.0 (X11; U; Linux i686; es-CL; rv:1.9.2.15) Gecko/20110303 Ubuntu/10.10 (maverick) Firefox/3.6.15"

El formato de los logs se puede modificar en el fichero apache2.conf en la siguiente parte del fichero:

#
  1. The following directives define some format nicknames for use with
  2. a CustomLog directive (see below).
  3. If you are behind a reverse proxy, you might want to change %h into %{X-Forwarded-For}i
#
LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined
LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %O" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent


Para poder ver el cambio en el fichero de acceso, tendremos que cambiar la linea que finaliza con la palabra combined. Hemos cambiado el orden, poniendo en primer lugar la fecha del acceso, e incluyendo una opción mas para que incluya la dirección IP del equipo que accede a la página web

LogFormat "%t %A %a %l %u \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined

[25/Mar/2011:16:01:32 +0100] ::1 ::1 - - "GET / HTTP/1.1" 200 364 "-" "Mozilla/5.0 (X11; Linux i686; rv:2.0) Gecko/20100101 Firefox/4.0"

d) Logs de errores: comprobar el fichero de log de errores, tras acceder a una URL inexistente

El fichero de log de errores de apache normalmente se encuentra en /var/log/apache2, en nuestro caso, al haberlo configurado personalmente, el fichero de errores de logs se encuentro en /var/www/pagina/logs/error.log y vemos que después de intentar acceder a una url que no existe, como por ejemplo http://localhost:8080/pagina.html, se añade al final del fichero lo siguiente:

[Fri Mar 25 15:28:45 2011] [error] [client ::1] File does not exist: /var/www/pagina/pagina.html


4. Definir host virtuales que conduzcan a distintas páginas locales

a) [*] En base a nombres. Para ello, definir dos servidores de la forma www.host1.com y www.host2.com en el fichero /etc/hosts que apunten a la dirección IP actual. Además, habrá de ser posible acceder a los mismos contenidos de www.host1.com con la url hhtp://host1.com

Primeramente cambiaremos la configuración del caso anterior que se configurado, y realizaremos dos configuración similares, pero para dos host diferentes. Para ello primeramente tendremos que ir al finchero /etc/hosts y añadir las siguientes lineas detras de localhost:

192.168.1.101 iker-Studio-XPS-1340 # Added by NetworkManager
127.0.0.1 localhost.localdomain localhost www.host1.com www.host2.com
::1 iker-Studio-XPS-1340 localhost6.localdomain6 localhost6
127.0.1.1 iker-Studio-XPS-1340


# The following lines are desirable for IPv6 capable hosts
::1 localhost ip6-localhost ip6-loopback


fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts


Esto nos permitirá que cuando se escriba una URL como www.host1.com o www.host2.com, se redirija la petición a nuestro servidor web, en vez de lanzar la petición al servidor DNS, para mostrarnos una página colgada en internet. Otro cambio que debemos de realizar es la de los hosts virtuales. En este caso se ha decidido seguir con una única página web, pero con los dos hosts diferentes, para ellos tendremos que ir a /etc/apache2/sites-enables/pagina.conf y dejar la configuración de la siguiente manera:

<VirtualHost *:80>
ServerAdmin webmaster@host1.com
ServerName www.host1.com
ServerAlias host1.com *.host1.com


#Indexes + Directory Root.
DirectoryIndex indexhost1.html
DocumentRoot /var/www/host/


#Logfiles
ErrorLog /var/www/host/logs/error.log
CustomLog /var/www/host/logs/access.log combined
</VirtualHost>


<VirtualHost *:80>
ServerAdmin webmaster@host2.com
ServerName www.host2.com
ServerAlias host2.com *.host2.com


#Indexes + Directory Root.
DirectoryIndex indexhost2.html
DocumentRoot /var/www/host/


#Logfiles
ErrorLog /var/www/host/logs/error.log
CustomLog /var/www/host/logs/access.log combined
</VirtualHost>


De esta manera si accedemos a www.host1.com o www.host2.com, desde nuestro navegador web, accederemos a la página alojada en nuestro servidor web.

b) [*] En base a direcciones IPs. Para ello configurar dos IPs virtuales desde la interfaz física

Para afianzar más conocimientos, en este punto, se realizará una configuración alojada en dos directorios diferentes, y configuraremos el servidor, en base a direcciones con los dos hosts diferentes. Para ello primeramente tendremos que crear la serie de directorios para albergar la página, y para albergar los logs. Este paso está explicado anteriormente con lo que que no volveremos atrás. Una vez creados ambos directorios accederemos a nuestro fichero de configuración para configurar los host virtuales /etc/apache2/sited-enabled/ip.conf, y dejaremos el fichero de la siguiente manera:

<VirtualHost 192.168.1.1:80>
ServerAdmin webmaster@ip1.com
ServerName www.ip1.com
ServerAlias ip1.com *.ip1.com


#Indexes + Directory Root.
DirectoryIndex index1.html
DocumentRoot /var/www/ip/


#Logfiles
ErrorLog /var/www/ip/logs/error.log
CustomLog /var/www/ip/logs/access.log combined
</VirtualHost>


<VirtualHost 192.168.1.2:80>
ServerAdmin webmaster@ip2.com
ServerName www.ip2.com
ServerAlias ip2.com *.ip2.com


#Indexes + Directory Root.
DirectoryIndex index2.html
DocumentRoot /var/www/ip/


#Logfiles
ErrorLog /var/www/ip/logs/error.log
CustomLog /var/www/ip/logs/access.log combined
</VirtualHost>


Como vemos tenemos configurado cada una de las paginas con un número de IP difente. El otro cambio que debemos realizar, en caso de querer acceder a las paginas con el alias, seria ir a ir al fichero /etc/host y añadir las dos direcciones IP con el nombre del alias que queramos

192.168.1.1 www.host1.com
192.168.1.2 www.host2.com


Finalmente para comprobar el funcionamiento del servidor, se configuran las diferentes interfaces de red adecuadamente, para que por una tengamos la dirección .1 y por la otra la .2.

c) [*] En base a puertos. Ej, puerto 80 o 8080.

Este apartado ya se ha realizado en el apartado 3. Solo se debe cambiar el puerto a la hora de configurar el host virtual, y en el fichero de puertos, solo tendremos que poner a escuchar el servidor por dicho puerto.


5. Reescritura de URLs

a) Mediante mod_rewrite presentar dos páginas distintas según el tipo de navegador

El primer paso que se tendrá que realizar es el de habilitar el módulo rewrite. Para ello se va a la carpeta de apache y en fichero httpd.conf añadimos la siguiente linea, para que se añada el módulo cuando reiniciemos el servicio.

LoadModule include_module /usr/lib/apache2/modules/mod_include.so

Una vez habilitado el módulo y tras reiniciar el apache, configuraremos el archivo de host virtuales, para añadirle la posibilidad de habilitar unas páginas u otras dependiendo el navegador utilizado. En este caso se ha configurado el host para que en caso de acceder desde un navegador mozilla, enseñe una página y en caso de hacerlo con lynx muestre otra. Para ello el fichero de configuración de host virtuales queda de la siguiente manera:

<VirtualHost *:80>
ServerAdmin webmaster@navegador.com
ServerName www.navegador.com
ServerAlias navegador.com *.navegador.com


#Indexes + Directory Root.
DirectoryIndex index.html
DocumentRoot /var/www/navegador/


#Logfiles
ErrorLog /var/www/navegador/logs/error.log
CustomLog /var/www/navegador/logs/access.log combined


RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} ^Mozilla.*
RewriteRule ^/$ /mozilla.html [L]


RewriteCond %{HTTP_USER_AGENT} ^Lynx.*
RewriteRule ^/$ /lynx.html [L]
</VirtualHost>



  • Especifico del protocolo http

6. Análisis de tráfico

a) Establecer una conexión a la página www.fsf.org con un navegador y examinar el trafico con wireshark.

Apache-wireshark.png
Apache-wireshark.png

El tráfico principal que se nota se basa en la traducción del nombre canónico de la pagina a su dirección IP a través del protocolo DNS. Esto se realiza un la primera parte. A partir de hay el resto del tráfico que origina la consulta, es TCP, en el que se van recibiendo todos los objetos que contenga la pagina web.

b) Hacer lo mismo con: U=www.fsf.org: curl -v -H "cabecera: c1" $U 2>&1 | less

Primeramente tendremos que instalar el paquete curl, para poder realizar el ejercicio. Cuando acabe la instalacion introduciremos el comando anterior, en un terminal, obteniendo como salida, lo siguiente:

apache-curl.png
apache-curl.png

7. Negociación de contenidos

a) Accediendo a una URL única, presentar dos páginas distintas según el idioma seleccionado en el navegador

Para que un servidor pueda negociar un recurso, necesita que se le proporcione información sobre cada una de las variantes. En este realizaremos la negociación de contenido usando un tipo mapa (por ejemplo, , un fichero *.var) que nombre los ficheros que contengan explícitamente a las variantes. La manera idónea de hacerlo es poner lo siguiente en el fichero de configuración del servidor:

AddHandler type-map .var

Una vez reiniciado el servidor ya podremos utilizar dicho módulo. A continuación tendremos que crear en el directorio un fichero .var que nos rediriga segun el valor de la variable del navegador Content-language, a una página u otra. El fichero quedaría de la siguiente manera:

URI: indice

URI: indice.en.html
Content-type: text/html
Content-language: en


URI: indice.es.html
Content-type: text/html
Content-language: es


En el fichero donde se configuran los host virtuales, tambien se debe de cambiar el nombre de la pagina indice, para que lea el archivo indice.var, por lo cuál quedaria de la siguiente manera:

<VirtualHost *:80>
ServerAdmin webmaster@idioma.com
ServerName www.idioma.com
ServerAlias idioma.com *.idioma.com


#Indexes + Directory Root.
DirectoryIndex indice.var
DocumentRoot /var/www/idioma/


#Logfiles
ErrorLog /var/www/idioma/logs/error.log
CustomLog /var/www/idioma/logs/access.log combined
</VirtualHost>


Para probar la configuración se debe de ir al navegador y cambiar el idioma de las páginas por defecto, y podremos elegir tanto español como ingles, para recibir nuestras pagina, un ejemplo de ambos es el siguiente:

Content-language.png
Content-language.png

  • Contenidos dinámicos

8. CGI en bash

a) Hacer un CGI en bash llamado info.sh y ubicado en /srv/cgis/ que muestre las conexiones TCP que están escuchando en el servidor, y el usuario con el que se ejecuta dicho script. La cabecera de respuesta http será una única línea que indica el tipo mime text/plain.

En primer lugar iremos a la configuración de los host virtuales y lo configuraremos de la siguiente manera. Con ellas lo que realizamos es ubicar la carpeta que contiene los cgis, además de algunas opciones que viene por defecto para que se puede ejecutar en condiciones.

<VirtualHost *:80>
ServerAdmin webmaster@cgibash.com
ServerName www.cgibash.com
ServerAlias cgibash.com *.cgibash.com


#Indexes + Directory Root.
DirectoryIndex indix.html
DocumentRoot /var/www/cgibash/


#Logfiles
ErrorLog /var/www/cgibash/logs/error.log
CustomLog /var/www/cgibash/logs/access.log combined


ScriptAlias /cgis/ /srv/cgis/
<Directory "/srv/cgis">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
</VirtualHost>


A continuación tendremos que crear la carpeta para incluir los cgis. Una vez creada tendremos que crear el cgi. En nuestro caso hemos elegido un cgi de la siguiente forma:

#!/bin/sh
echo "Content-type: text/plain\n"


#Usuario
echo
echo "Identificacion"
id
echo


#Conexiones TCP
echo "Conexiones TCP en escucha:"


netstat -tl

Para poder ejecutar correctamente el script tendremos que darle permisos de ejecución a usuarios. Una vez dados los permisos, iremos al navegador y ejecutaremos el cgi en el navedor con la siguiente dirección: www.host1.com/cgis/info.sh. El resultado obtenido es el siguiente:

cgis-bash.png
cgis-bash.png

9. CGI en C

a) Hacer un CGI en C ubicado en /homedelusuari/cgis/ que genere una página web con las variables de entorno del sistema. Lanzarlo con la url: http://localhost/cgi-bin/c.cgi?a=1. Pista: emplear int main(int argc, char argv[], char ep) y un bucle while .Como en el caso anterior tendremos que crear la carpeta para alogar el cgi. A continuacion crearemos el cgi en C, por ejemplo el siguiente:

#include <stdio.h>
#include <stdlib.h>


int main(int argc, char *argv[], char ep)
{
printf ("Content-type: text/plain\n\n");
int i = 0;


while(ep[i])
{
printf("%s\n",ep[i]);
i++;
}


return 0;
}


Una vez creado el cgi, tendremos que compilar y comprar que no obtenemos fallos. Como en el caso anterior tendremos que modificar también el fichero de hosts virtuales, cambiando el ScriptAlias, de la siguiente forma:

<VirtualHost *:80>
ServerAdmin webmaster@cgic.com
ServerName www.cgic.com
ServerAlias cgic.com *.cgic.com


#Indexes + Directory Root.
DirectoryIndex index.html
DocumentRoot /var/www/cgic/


#Logfiles
ErrorLog /var/www/cgic/logs/error.log
CustomLog /var/www/cgic/logs/access.log combined


ScriptAlias /cgis/ /home/iker/cgis/
<Directory "/home/iker/cgis">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
</VirtualHost>



Lo ejecutaremos en el navegador de la siguiente forma: http://www.host1.com/cgis/cgi.cgi?a=1 obteniendo lo siguiente:

cgi-c.png
cgi-c.png

10. Página html con formulario

a) Hacer una página html con un formulario que tenga un único campo del tipo textearea a procesar por el CGI anterior. Empleando los métodos GET y POST ver las salidas del CGI, en especial las variables: CONTENT_TYPE, CONTENT_LENGTH, QUERY_STRING, REQUEST_URI.

Crearemos una página web de la siguiente forma:

<html>
<head></head>
<body>


<div align="center">
<h1> M&eacutetodo GET</h1>
<form action="http://www.getpost.com/cgis/cgi.cgi?a=1" method="get" name="get">
<textarea name="text_box">metodo GET</textarea>
<BR>
<input type="submit" name="button" value="GET"/>
</form>


<h1> M&eacutetodo POST</h1>
<form action="http://www.getpost.com/cgis/cgi.cgi?a=1" method="post" name="post">
<textarea name="text_box">metodo POST</textarea>
<BR>
<input type="submit" name="boton" value="POST"/>
</form></div>


</body>
</html>


Una vez tenida la pagina creada, obtenemos una página web en nuestro navegador de la siguiente forma:

getpost.png
getpost.png
Si pulsamos en el botón de get, obtenemos las siguientes variables:
get.png
get.png
Para una respuesta con método GET, no podremos tener la variable CONTENT_TYPE y CONTENT_LEGTH, ya que ambas son específicas del método POST.
Para el método post obtenemos lo siguiente:


post.png
post.png
En este caso si podemos obtener los valores del content_type y del content_length. Como vemos las variables QUERY_STRING y REQUEST_URI cambian según el método que utilizamos. Esto se debe a que según el método, las variables en las que se guarda la entrada de datos y la forma en la que se pasan los parámetros por URL cambia.


11. SSI básico

a) Hacer una página que tenga un SSI básico (ej. mostrar la fecha)

Crearemos un fichero .conf del siguiente estilo, las lineas en negrita, son las lineas importantes que hacen que el servicio funcione correctamente:

<VirtualHost *:80>
ServerAdmin webmaster@ssi.com
ServerName www.ssi.com
ServerAlias ssi.com *.ssi.com


#Indexes + Directory Root.
DirectoryIndex index.shtml
DocumentRoot /var/www/ssi/


#Logfiles
ErrorLog /var/www/ssi/logs/error.log
CustomLog /var/www/ssi/logs/access.log combined


<Directory "/var/www/ssi">
Options Indexes FollowSymLinks MultiViews +Includes
AllowOverride None
Order allow,deny
allow from all

AddType text/html .shtml
AddOutputFilter INCLUDES .shtml
XbitHack on
</Directory>
</VirtualHost>


El documento .shtml que debemos escribir para ver la variable es el siguiente:

<html>
<head>
<title> SSI </title>
</head>
<body>
<h1>Hora local del servidor:</h1> <!--#echo var="DATE_LOCAL"-->
</body>
</html>

ssi.png
ssi.png

12. PHP básico

a) Hacer un programa php sencillo del tipo "Hola Mundo"

Antes de empezar con php, tenemos que instalar el paquete en nuestro servidor. En caso de tenerlo instalado, bastaria con 3 lineas para realizar una página web de "Hola Mundo", en PHP.

<?php
echo "Hola Mundo"
?>


Si vamos al navegador y vemos la página en nuestro navegador obtenemos lo siguiente:

php.png
php.png

  • Seguridad

13. Autenticación y autorización básicas

a) Listar los módulos del apache2 instalados que contengan la cadena "auth"

iker@iker-Studio-XPS-1340:~$ ls /etc/apache2/mods-available/ | grep auth
auth_basic.load
auth_digest.load
authn_alias.load
authn_anon.load
authn_dbd.load
authn_dbm.load
authn_default.load
authn_file.load
authnz_ldap.load
authz_dbm.load
authz_default.load
authz_groupfile.load
authz_host.load
authz_owner.load
authz_user.load


b) Autorizar el acceso con usuario y password mediante digest md5.

Para este apartado en primer lugar debemos añadir el módulo digest para que se carge al iniciar apache. Para ello vamos al fichero /etc/apache2/httpd.conf e incluimos la siguiente línea.

LoadModule auth_digest_module /usr/lib/apache2/modules/mod_auth_digest.so

A continuación crearemos otro fichero de configuracion dentro de /etc/apache2/sites-enabled/ e incluiremos en el fichero lo siguiente:

<VirtualHost *:80>
ServerAdmin webmaster@pass.com
ServerName www.pass.com
ServerAlias pass.com *.pass.com


#Indexes + Directory Root.
DirectoryIndex index.html
DocumentRoot /var/www/pass/


#Logfiles
ErrorLog /var/www/pass/logs/error.log
CustomLog /var/www/pass/logs/access.log combined


<Directory "/var/www/pass">
AuthType Digest
AuthName "Area Reservada"
AuthDigestDomain /pass/ /var/www/pass/
AuthUserFile /home/iker/pass
Require valid-user
</Directory>
</VirtualHost>


Una vez creado el fichero y seleccionada el área restringida, tendremos que crear la contraseña para logearnos de la siguiente manera:

iker@iker-Studio-XPS-1340:~$ sudo htdigest -c /home/iker/pass "Area Reservada" iker
Adding password for iker in realm Area Reservada.
New password:
Re-type new password:


Si vamos al navegador y probamos el dominio, obtendremos una pagina web, en la que se nos pedirá el usuario y contraseña, a la hora de intentar mostrar la página web en el navegador, como la siguiente:
pass1.png
pass1.png
Por otro lado, si por ejemplo introducimos correctamente la contraseña o no nos la sabemos obtendremos una página como la siguiente:

pass2.png
pass2.png

14. Control de acceso

a) Denegar el acceso a la página ejemplo según la IP del cliente. Para ello configurar un rango no autorizado, y comprobar el funcionamiento cambiando la IP local a una dentro de dicho rango

Para denegar el acceso según la IP tenemos una directiva concreta que nos permite hacer que una IP o un rango de IPs no puedan acceder a la página web. Para ellos tendremos un fichero de configuración de la siguiente forma:

<VirtualHost *:80>
ServerAdmin webmaster@acceso1.com
ServerName www.acceso1.com
ServerAlias acceso1.com *.acceso1.com


#Indexes + Directory Root.
DirectoryIndex index.html
DocumentRoot /var/www/acceso1/


#Logfiles
ErrorLog /var/www/acceso1/logs/error.log
CustomLog /var/www/acceso1/logs/access.log combined


<Directory "/var/www/acceso1">
Order deny,allow
Deny from 127.0.0.1
</Directory>
</VirtualHost>


Con esta configuración logramos denegar el acceso al localhost. Por lo que obtendremos del servidor un error 403 de Forbbiden. Es decir la siguiente imagen:
acceso1.png
acceso1.png

b) Denegar el acceso con mod_authz_host en base al navegador

Para este apartado denegaremos el acceso al navegador lynx, es decir, si accedemos a la página web a través de este navegador, el servidor, denegará el acceso a el y el navegador mostrará un mensaje 403, que dirá que no se tiene permisos para acceder al servidor.
Tendremos que configurar el host de la siguiente manera:


<VirtualHost *:80>
ServerAdmin webmaster@acceso2.com
ServerName www.acceso2.com
ServerAlias acceso1.com *.acceso2.com


#Indexes + Directory Root.
DirectoryIndex index.html
DocumentRoot /var/www/acceso2/


#Logfiles
ErrorLog /var/www/acceso2/logs/error.log
CustomLog /var/www/acceso2/logs/access.log combined


<Directory "/var/www/acceso2">
SetEnvIf User-Agent ^Mozilla.* acceso
Order Deny,Allow
Deny from all
Allow from env=acceso
</Directory>
</VirtualHost>

acceso2.png
acceso2.png

c) Denegar el acceso con mod_rewrite en base al navegador

En este apartado realizaremos lo mismo que en el apartado anterior, pero de otra manera. Como en el caso anterior se mirá la variable Agent-user, y según cual sea, se le rederige a la pagina o deniega el acceso a la página. La configuracion queda de la siguiente manera:

<VirtualHost *:80>
ServerAdmin webmaster@acceso3.com
ServerName www.acceso3.com
ServerAlias acceso3.com *.acceso3.com


#Indexes + Directory Root.
DirectoryIndex index.html
DocumentRoot /var/www/acceso3/


#Logfiles
ErrorLog /var/www/acceso3/logs/error.log
CustomLog /var/www/acceso3/logs/access.log combined


RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} ^lynx/.* [NC]
RewriteRule .* - [F]
</VirtualHost>


En el navegador lynx obtendremos una página web como la del apartado anterior.

d) Denegar el acceso con mod_rewrite en base a la fecha

En este apartado se ha utilizado el mismo módulo que el apartado anterior, pero esta vez denegaremos el acceso al host, en el año 2011. El fichero de configuracion queda de la siguiente manera:

<VirtualHost *:80>
ServerAdmin webmaster@acceso4.com
ServerName www.acceso4.com
ServerAlias acceso4.com *.acceso4.com


#Indexes + Directory Root.
DirectoryIndex index.html
DocumentRoot /var/www/acceso4/


#Logfiles
ErrorLog /var/www/acceso4/logs/error.log
CustomLog /var/www/acceso4/logs/access.log combined


RewriteEngine on
RewriteCond %{TIME_YEAR} ^2011$
RewriteRule ^.*$ - [F,L]
</VirtualHost>


Como ya hemos dicho en casos anteriores, saldrá un mensaje 403 que nos denegara el acceso al host.


15. HTTPS

a) Configurar un host virtual basado en IP, y crear un certificado autofirmado a partir de una clave privada sin password, para comprobar el acceso https.

Para poder realizar este apartado tendremos que habilitar el módulo SSL. Para ello añadiremos la siguiente línea al fichero /httpd.conf:

LoadModule ssl_module /usr/lib/apache2/modules/mod_ssl.so

Una vez reiniciado el servidor, crearemos los certificados:

new: nueva petición
nodes: sin contraseña
x509: para que se autofirme
out: clave pública
keyout: clave privada


iker@iker-Studio-XPS-1340:/var/www/https1$ sudo openssl req -new -nodes -x509 -out ca.crt -keyout ca.key
Generating a 1024 bit RSA private key
..................................++++++
............++++++
writing new private key to 'ca.key'

You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.

Country Name (2 letter code) [AU]:SP
State or Province Name (full name) [Some-State]:Bizkaia
Locality Name (eg, city) []:Bilbao
Organization Name (eg, company) [Internet Widgits Pty Ltd]:UPV/EHU
Organizational Unit Name (eg, section) []:Laboratorio de Servidores de Comunicacion
Common Name (eg, YOUR name) []:www.https1.com
Email Address []:.


Para que el host funcione lo configuraremos de la siguiente forma:

<VirtualHost *:443>
ServerAdmin webmaster@https1.com
ServerName www.https1.com
ServerAlias https1.com *.https1.com


#Indexes + Directory Root.
DocumentRoot /var/www/https1/
DirectoryIndex index.html


#Logfiles
ErrorLog /var/www/https1/logs/error.log
CustomLog /var/www/https1/logs/access.log combined


#SSL Certificate
SSLEngine On
SSLCertificateFile /var/www/https1/ca.crt
SSLCertificateKeyFile /var/www/https1/ca.key


<Directory "/var/www/https1">
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
</VirtualHost>


Al ser un servidor seguro y encriptado, el puerto de escucha será el 443, y a la hora de llamar a la página tendremos que realizarlo mediante el protocolo https y no mediante http, ya que este ultimo realizaría la petición por el puerto 80. Al abrir el navegador y realizar la petición obtendriamos lo siguiente:

https1.png
https1.png

b) Siendo la clave privada con password

Se trata de lo mismo que en el caso anterior. La uníca diferencia es que esta vez si pediremos password. Asi cada vez que reiniciemos el sevidor se nos pedirá el password del certificado.

iker@iker-Studio-XPS-1340:/var/www/https2$ sudo openssl req -new -x509 -out ca.crt -keyout ca.key
Generating a 1024 bit RSA private key
....................++++++
...............++++++
writing new private key to 'ca.key'
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:



You are about to be asked to enter information that will be incorporated

into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.



Country Name (2 letter code) [AU]:SP

State or Province Name (full name) [Some-State]:Bizkaia
Locality Name (eg, city) []:Bilbao
Organization Name (eg, company) [Internet Widgits Pty Ltd]:UPV/EHU
Organizational Unit Name (eg, section) []:Laboratorio de Servidores de Comunicacon
Common Name (eg, YOUR name) []:www.https2.com
Email Address []:.


https2.png
https2.png


c) Comprobar el protocolo con: openssl s_client -connect localhost:443 -state -debug

iker@iker-Studio-XPS-1340:/$ openssl s_client -connect localhost:443 -state -debug
CONNECTED(00000003)
SSL_connect:before/connect initialization
write to 0x98b2878 [0x98b3940] (95 bytes => 95 (0x5F))
0000 - 16 03 01 00 5a 01 00 00-56 03 01 4d a1 92 06 c0 ....Z...V..M....
0010 - 3a 2a 6a d6 16 2a 5c dd-5f 64 2b 2e fd 3f d5 c0 :*j..*\._d+..?..
0020 - fe f6 9f 20 e1 19 f6 46-25 ff 06 00 00 28 00 39 ... ...F%....(.9
0030 - 00 38 00 35 00 16 00 13-00 0a 00 33 00 32 00 2f .8.5.......3.2./
0040 - 00 05 00 04 00 15 00 12-00 09 00 14 00 11 00 08 ................
0050 - 00 06 00 03 00 ff 02 01-00 00 04 00 23 ............#
005f - <SPACES/NULS>
SSL_connect:SSLv2/v3 write client hello A
read from 0x98b2878 [0x98b8ea0] (7 bytes => 7 (0x7))
0000 - 16 03 01 00 35 02 ....5.
0007 - <SPACES/NULS>
read from 0x98b2878 [0x98b8ea7] (51 bytes => 51 (0x33))
0000 - 00 31 03 01 4d a1 92 06-a1 00 a9 23 9b 40 b1 1d .1..M......#.@..
0010 - 63 58 be ee 3a 30 6d 56-3a dc 01 d1 35 61 9c c4 cX..:0mV:...5a..
0020 - 1b 1a cd 4e 00 00 39 01-00 09 ff 01 00 01 00 00 ...N..9.........
0030 - 23 #
0033 - <SPACES/NULS>
SSL_connect:SSLv3 read server hello A
read from 0x98b2878 [0x98b8ea0] (5 bytes => 5 (0x5))
0000 - 16 03 01 03 a4 .....
read from 0x98b2878 [0x98b8ea5] (932 bytes => 932 (0x3A4))
0000 - 0b 00 03 a0 00 03 9d 00-03 9a 30 82 03 96 30 82 ..........0...0.
0010 - 02 ff a0 03 02 01 02 02-09 00 c1 a6 fd f7 b7 13 ................
0020 - 29 2f 30 0d 06 09 2a 86-48 86 f7 0d 01 01 05 05 )/0...*.H.......
0030 - 00 30 81 8f 31 0b 30 09-06 03 55 04 06 13 02 53 .0..1.0...U....S
0040 - 50 31 10 30 0e 06 03 55-04 08 13 07 42 69 7a 6b P1.0...U....Bizk
0050 - 61 69 61 31 0f 30 0d 06-03 55 04 07 13 06 42 69 aia1.0...U....Bi
0060 - 6c 62 61 6f 31 10 30 0e-06 03 55 04 0a 13 07 55 lbao1.0...U....U
0070 - 50 56 2f 45 48 55 31 32-30 30 06 03 55 04 0b 13 PV/EHU1200..U...
0080 - 29 4c 61 62 6f 72 61 74-6f 72 69 6f 20 64 65 20 )Laboratorio de
0090 - 53 65 72 76 69 64 6f 72-65 73 20 64 65 20 43 6f Servidores de Co
00a0 - 6d 75 6e 69 63 61 63 69-6f 6e 31 17 30 15 06 03 municacion1.0...
00b0 - 55 04 03 13 0e 77 77 77-2e 68 74 74 70 73 31 2e U....www.https1.
00c0 - 63 6f 6d 30 1e 17 0d 31-31 30 34 31 30 31 31 30 com0...110410110
00d0 - 31 30 31 5a 17 0d 31 31-30 35 31 30 31 31 30 31 101Z..1105101101
00e0 - 30 31 5a 30 81 8f 31 0b-30 09 06 03 55 04 06 13 01Z0..1.0...U...
00f0 - 02 53 50 31 10 30 0e 06-03 55 04 08 13 07 42 69 .SP1.0...U....Bi
0100 - 7a 6b 61 69 61 31 0f 30-0d 06 03 55 04 07 13 06 zkaia1.0...U....
0110 - 42 69 6c 62 61 6f 31 10-30 0e 06 03 55 04 0a 13 Bilbao1.0...U...
0120 - 07 55 50 56 2f 45 48 55-31 32 30 30 06 03 55 04 .UPV/EHU1200..U.
0130 - 0b 13 29 4c 61 62 6f 72-61 74 6f 72 69 6f 20 64 ..)Laboratorio d
0140 - 65 20 53 65 72 76 69 64-6f 72 65 73 20 64 65 20 e Servidores de
0150 - 43 6f 6d 75 6e 69 63 61-63 69 6f 6e 31 17 30 15 Comunicacion1.0.
0160 - 06 03 55 04 03 13 0e 77-77 77 2e 68 74 74 70 73 ..U....www.https
0170 - 31 2e 63 6f 6d 30 81 9f-30 0d 06 09 2a 86 48 86 1.com0..0...*.H.
0180 - f7 0d 01 01 01 05 00 03-81 8d 00 30 81 89 02 81 ...........0....
0190 - 81 00 d4 e1 cd 4e b6 76-ab 6c 14 77 b0 98 37 ee .....N.v.l.w..7.
01a0 - b4 ee 11 08 75 5d 35 63-96 b6 f5 49 49 fc 5a 77 ....u]5c...II.Zw
01b0 - 7d 43 4a 71 7f 29 5a 48-81 84 3e 7a f5 08 77 53 }CJq.)ZH..>z..wS
01c0 - 93 cc 05 c8 f6 b7 e1 69-b9 4c f0 15 8a 4c 96 1d .......i.L...L..
01d0 - 2b 0e 06 74 8f 86 0a 97-fa d3 c6 e3 51 d9 c4 bc +..t........Q...
01e0 - b2 16 31 80 08 6a a4 72-50 55 49 0c f5 bc e6 39 ..1..j.rPUI....9
01f0 - 38 c9 bb a1 0c 07 8b 38-80 2a cb 09 d3 cc 64 97 8......8.*....d.
0200 - 0a a3 b5 b3 45 64 15 d8-d9 c0 ee 05 da 28 0c ee ....Ed.......(..
0210 - b6 e3 02 03 01 00 01 a3-81 f7 30 81 f4 30 1d 06 ..........0..0..
0220 - 03 55 1d 0e 04 16 04 14-74 cd 1a 55 38 e3 e8 9e .U......t..U8...
0230 - a8 2d b3 99 c1 5d 5c ce-ad ae e2 d8 30 81 c4 06 .-...]\.....0...
0240 - 03 55 1d 23 04 81 bc 30-81 b9 80 14 74 cd 1a 55 .U.#...0....t..U
0250 - 38 e3 e8 9e a8 2d b3 99-c1 5d 5c ce ad ae e2 d8 8....-...]\.....
0260 - a1 81 95 a4 81 92 30 81-8f 31 0b 30 09 06 03 55 ......0..1.0...U
0270 - 04 06 13 02 53 50 31 10-30 0e 06 03 55 04 08 13 ....SP1.0...U...
0280 - 07 42 69 7a 6b 61 69 61-31 0f 30 0d 06 03 55 04 .Bizkaia1.0...U.
0290 - 07 13 06 42 69 6c 62 61-6f 31 10 30 0e 06 03 55 ...Bilbao1.0...U
02a0 - 04 0a 13 07 55 50 56 2f-45 48 55 31 32 30 30 06 ....UPV/EHU1200.
02b0 - 03 55 04 0b 13 29 4c 61-62 6f 72 61 74 6f 72 69 .U...)Laboratori
02c0 - 6f 20 64 65 20 53 65 72-76 69 64 6f 72 65 73 20 o de Servidores
02d0 - 64 65 20 43 6f 6d 75 6e-69 63 61 63 69 6f 6e 31 de Comunicacion1
02e0 - 17 30 15 06 03 55 04 03-13 0e 77 77 77 2e 68 74 .0...U....www.ht
02f0 - 74 70 73 31 2e 63 6f 6d-82 09 00 c1 a6 fd f7 b7 tps1.com........
0300 - 13 29 2f 30 0c 06 03 55-1d 13 04 05 30 03 01 01 .)/0...U....0...
0310 - ff 30 0d 06 09 2a 86 48-86 f7 0d 01 01 05 05 00 .0...*.H........
0320 - 03 81 81 00 6f 55 0b 88-d9 b2 29 13 07 16 90 24 ....oU....)....$
0330 - 96 63 88 15 8e 1a 07 21-ee 2a c6 75 86 ff 01 bf .c.....!.*.u....
0340 - 79 d7 22 b6 83 94 97 3b-b1 21 04 12 6c 91 e7 eb y."....;.!..l...
0350 - dc aa f1 03 91 47 3b 19-cb f9 7d c8 1d 9e 8b c0 .....G;...}.....
0360 - c7 6d 05 d2 5b 79 78 12-22 cd cd d3 70 9e 31 63 .m..[yx."...p.1c
0370 - 19 88 02 39 3f 6c d6 3a-b7 b0 12 14 cd 8b 0c 72 ...9?l.:.......r
0380 - e4 d2 6a f7 57 d1 43 1a-0e 36 02 92 94 26 ce 1c ..j.W.C..6...&..
0390 - 0b 6a f7 df 20 e7 a0 ed-50 63 62 96 91 ae b5 82 .j.. ...Pcb.....
03a0 - 9a 65 7e fb .e~.
depth=0 /C=SP/ST=Bizkaia/L=Bilbao/O=UPV/EHU/OU=Laboratorio de Servidores de Comunicacion/CN=www.https1.com
verify error:num=18:self signed certificate
verify return:1
depth=0 /C=SP/ST=Bizkaia/L=Bilbao/O=UPV/EHU/OU=Laboratorio de Servidores de Comunicacion/CN=www.https1.com
verify return:1
SSL_connect:SSLv3 read server certificate A
read from 0x98b2878 [0x98b8ea0] (5 bytes => 5 (0x5))
0000 - 16 03 01 01 8d .....
read from 0x98b2878 [0x98b8ea5] (397 bytes => 397 (0x18D))
0000 - 0c 00 01 89 00 80 d6 7d-e4 40 cb bb dc 19 36 d6 .......}.@....6.
0010 - 93 d3 4a fd 0a d5 0c 84-d2 39 a4 5f 52 0b b8 81 ..J......9._R...
0020 - 74 cb 98 bc e9 51 84 9f-91 2e 63 9c 72 fb 13 b4 t....Q....c.r...
0030 - b4 d7 17 7e 16 d5 5a c1-79 ba 42 0b 2a 29 fe 32 ...~..Z.y.B.*).2
0040 - 4a 46 7a 63 5e 81 ff 59-01 37 7b ed dc fd 33 16 JFzc^..Y.7{...3.
0050 - 8a 46 1a ad 3b 72 da e8-86 00 78 04 5b 07 a7 db .F..;r....x.[...
0060 - ca 78 74 08 7d 15 10 ea-9f cc 9d dd 33 05 07 dd .xt.}.......3...
0070 - 62 db 88 ae aa 74 7d e0-f4 d6 e2 bd 68 b0 e7 39 b....t}.....h..9
0080 - 3e 0f 24 21 8e b3 00 01-02 00 80 93 3f f5 dc 0c >.$!........?...
0090 - be 2a 71 fb 05 37 05 e5-53 15 c3 b8 af f4 cb 4b .*q..7..S......K
00a0 - 3a 10 48 a2 6e 5b 70 99-5c 66 3b 00 50 a9 b7 88 :.H.n[p.\f;.P...
00b0 - db 12 1e 92 88 0b 4a a4-cf 94 93 e8 8f 66 e5 e9 ......J......f..
00c0 - 28 23 38 08 bd 8f c1 6c-36 2f 67 a7 11 88 e3 d9 (#8....l6/g.....
00d0 - a7 ab ad 5d 37 6b bf 10-03 65 dc 39 49 f0 65 cf ...]7k...e.9I.e.
00e0 - ed e9 25 91 2a 3e 6b 20-f9 a9 c8 ce da 50 75 37 ..%.*>k .....Pu7
00f0 - f1 be cc 14 99 ac b1 39-79 cb 74 d6 3b 61 1b d2 .......9y.t.;a..
0100 - dd 72 48 88 00 03 18 67-20 7d 8d 00 80 50 69 c4 .rH....g }...Pi.
0110 - b9 31 a3 2a 51 5b d4 06-08 82 14 9f 12 18 1e cd .1.*Q[..........
0120 - c7 02 c6 34 05 da 45 f6-c8 9c c2 c6 9f 75 78 8e ...4..E......ux.
0130 - bf 5f 27 8c 9b 7b 4b b0-db 43 a9 ec aa 10 48 8b ._'..{K..C....H.
0140 - f4 0f d8 68 07 0f 25 d8-9d 13 27 4f cd 2e 59 4d ...h..%...'O..YM
0150 - e1 d7 38 88 b9 8f a4 b5-46 bb c7 fd 43 f4 fa 55 ..8.....F...C..U
0160 - ef 95 4f 0e c8 5d 8d a5-36 59 56 db bf 95 61 49 ..O..]..6YV...aI
0170 - c7 c7 1b 86 9b 62 ec 62-bf a4 70 c4 14 1f 16 c0 .....b.b..p.....
0180 - b5 c2 3f c5 d4 ac 57 a1-b1 6b b6 54 ba ..?...W..k.T.
SSL_connect:SSLv3 read server key exchange A
read from 0x98b2878 [0x98b8ea0] (5 bytes => 5 (0x5))
0000 - 16 03 01 00 04 .....
read from 0x98b2878 [0x98b8ea5] (4 bytes => 4 (0x4))
0000 - 0e .
0004 - <SPACES/NULS>
SSL_connect:SSLv3 read server done A
write to 0x98b2878 [0x98c30c0] (139 bytes => 139 (0x8B))
0000 - 16 03 01 00 86 10 00 00-82 00 80 c4 85 2b 13 ab .............+..
0010 - dc 30 09 9f 34 cc 47 7d-07 00 94 8b 71 5f 4d b5 .0..4.G}....q_M.
0020 - 34 8a f1 df 63 10 04 dc-eb 27 e4 3a 01 a8 5b 60 4...c....'.:..[`
0030 - 45 3f 1e 50 44 25 72 94-46 dd 33 cd 27 da aa d9 E?.PD%r.F.3.'...
0040 - d1 d0 5f 8c a1 50 c0 25-94 ba ce 87 cc 7b cb e9 .._..P.%.....{..
0050 - 14 d3 aa f3 1e 69 be 54-60 b2 8b a1 92 14 21 cb .....i.T`.....!.
0060 - 52 1b a4 7b 00 68 68 e4-10 1a 70 ad 03 3e 9e ce R..{.hh...p..>..
0070 - ce 86 ca 4b f8 c1 3b 89-6a eb 20 ae 5a 63 1f ff ...K..;.j. .Zc..
0080 - ff e2 6f f6 38 ba d9 f0-c4 c3 c9 ..o.8......
SSL_connect:SSLv3 write client key exchange A
write to 0x98b2878 [0x98c30c0] (6 bytes => 6 (0x6))
0000 - 14 03 01 00 01 01 ......
SSL_connect:SSLv3 write change cipher spec A
write to 0x98b2878 [0x98c30c0] (53 bytes => 53 (0x35))
0000 - 16 03 01 00 30 b7 3b 24-a7 19 25 55 30 0f 40 56 ....0.;$..%U0.@V
0010 - 4c 25 20 4c 3c 67 ef 7b-a2 5d f3 81 04 0f 50 e3 L% L<g.{.]....P.
0020 - 6d 6a 9e ea bd f7 03 67-a1 bd d3 06 89 fb 6b a6 mj.....g......k.
0030 - 95 60 8b fd 2d .`..-
SSL_connect:SSLv3 write finished A
SSL_connect:SSLv3 flush data
read from 0x98b2878 [0x98b8ea0] (5 bytes => 5 (0x5))
0000 - 16 03 01 00 ca .....
read from 0x98b2878 [0x98b8ea5] (202 bytes => 202 (0xCA))
0000 - 04 00 00 c6 00 00 00 00-00 c0 99 f7 cf d2 6c f2 ..............l.
0010 - 5e 5b d5 87 1f bf 79 7d-01 fa 0e 41 ce 4b 5c e2 ^[....y}...A.K\.
0020 - 05 04 16 4c 85 71 ef 41-1b 7c 18 33 f2 43 34 55 ...L.q.A.|.3.C4U
0030 - 9f 46 fd 32 42 8d 21 f0-c4 3f 8e 79 ee 97 51 90 .F.2B.!..?.y..Q.
0040 - b9 7e d9 c8 90 58 93 9c-90 f3 c2 0a 1f 85 48 9e .~...X........H.
0050 - 94 b3 36 93 65 6e 03 85-57 63 81 80 67 0d a6 ec ..6.en..Wc..g...
0060 - f2 a0 1b 00 aa 82 cb 2e-b0 30 05 d6 81 49 c4 d1 .........0...I..
0070 - 36 6d 8f 50 86 69 d0 96-e0 bd 94 04 60 b7 21 0e 6m.P.i......`.!.
0080 - 02 dd ed 86 50 2c 9f 30-24 1a 05 ac a3 97 5a 31 ....P,.0$.....Z1
0090 - b0 07 4c fc af 57 df 92-5c d7 50 7b fb ce e1 36 ..L..W..\.P{...6
00a0 - bf a7 84 29 b2 ad fc e7-0b f3 6c e7 9c 7c ed db ...)......l..|..
00b0 - f3 cb 17 55 a7 03 de f5-33 a4 b1 72 b0 c2 6a f8 ...U....3..r..j.
00c0 - 60 45 f2 1c 81 2b 54 ba-fe 61 `E...+T..a
SSL_connect:SSLv3 read server session ticket A
read from 0x98b2878 [0x98b8ea0] (5 bytes => 5 (0x5))
0000 - 14 03 01 00 01 .....
read from 0x98b2878 [0x98b8ea5] (1 bytes => 1 (0x1))
0000 - 01 .
read from 0x98b2878 [0x98b8ea0] (5 bytes => 5 (0x5))
0000 - 16 03 01 00 30 ....0
read from 0x98b2878 [0x98b8ea5] (48 bytes => 48 (0x30))
0000 - 88 4b d3 6d 01 d1 4e 28-24 ff 65 fa ef 8f ee be .K.m..N($.e.....
0010 - 5c 9f ac 53 95 86 87 a7-fd 0a e7 23 0d fc 8a 42 \..S.......#...B
0020 - 6a 6d 3f c5 a7 ba 62 21-22 ec c3 16 74 68 2a 02 jm?...b!"...th*.
SSL_connect:SSLv3 read finished A
---
Certificate chain
0 s:/C=SP/ST=Bizkaia/L=Bilbao/O=UPV/EHU/OU=Laboratorio de Servidores de Comunicacion/CN=www.https1.com
i:/C=SP/ST=Bizkaia/L=Bilbao/O=UPV/EHU/OU=Laboratorio de Servidores de Comunicacion/CN=www.https1.com
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIDljCCAv+gAwIBAgIJAMGm/fe3EykvMA0GCSqGSIb3DQEBBQUAMIGPMQswCQYD
VQQGEwJTUDEQMA4GA1UECBMHQml6a2FpYTEPMA0GA1UEBxMGQmlsYmFvMRAwDgYD
VQQKEwdVUFYvRUhVMTIwMAYDVQQLEylMYWJvcmF0b3JpbyBkZSBTZXJ2aWRvcmVz
IGRlIENvbXVuaWNhY2lvbjEXMBUGA1UEAxMOd3d3Lmh0dHBzMS5jb20wHhcNMTEw
NDEwMTEwMTAxWhcNMTEwNTEwMTEwMTAxWjCBjzELMAkGA1UEBhMCU1AxEDAOBgNV
BAgTB0JpemthaWExDzANBgNVBAcTBkJpbGJhbzEQMA4GA1UEChMHVVBWL0VIVTEy
MDAGA1UECxMpTGFib3JhdG9yaW8gZGUgU2Vydmlkb3JlcyBkZSBDb211bmljYWNp
b24xFzAVBgNVBAMTDnd3dy5odHRwczEuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GN
ADCBiQKBgQDU4c1OtnarbBR3sJg37rTuEQh1XTVjlrb1SUn8Wnd9Q0pxfylaSIGE
Pnr1CHdTk8wFyPa34Wm5TPAVikyWHSsOBnSPhgqX+tPG41HZxLyyFjGACGqkclBV
SQz1vOY5OMm7oQwHiziAKssJ08xklwqjtbNFZBXY2cDuBdooDO624wIDAQABo4H3
MIH0MB0GA1UdDgQWBBR0zRpVOOPonqgts5nBXVzOra7i2DCBxAYDVR0jBIG8MIG5
gBR0zRpVOOPonqgts5nBXVzOra7i2KGBlaSBkjCBjzELMAkGA1UEBhMCU1AxEDAO
BgNVBAgTB0JpemthaWExDzANBgNVBAcTBkJpbGJhbzEQMA4GA1UEChMHVVBWL0VI
VTEyMDAGA1UECxMpTGFib3JhdG9yaW8gZGUgU2Vydmlkb3JlcyBkZSBDb211bmlj
YWNpb24xFzAVBgNVBAMTDnd3dy5odHRwczEuY29tggkAwab997cTKS8wDAYDVR0T
BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOBgQBvVQuI2bIpEwcWkCSWY4gVjhoHIe4q
xnWG/wG/edcitoOUlzuxIQQSbJHn69yq8QORRzsZy/l9yB2ei8DHbQXSW3l4EiLN
zdNwnjFjGYgCOT9s1jq3sBIUzYsMcuTSavdX0UMaDjYCkpQmzhwLavffIOeg7VBj
YpaRrrWCmmV++w==
-----END CERTIFICATE-----
subject=/C=SP/ST=Bizkaia/L=Bilbao/O=UPV/EHU/OU=Laboratorio de Servidores de Comunicacion/CN=www.https1.com
issuer=/C=SP/ST=Bizkaia/L=Bilbao/O=UPV/EHU/OU=Laboratorio de Servidores de Comunicacion/CN=www.https1.com
---
No client certificate CA names sent
---
SSL handshake has read 1672 bytes and written 293 bytes
---
New, TLSv1/SSLv3, Cipher is DHE-RSA-AES256-SHA
Server public key is 1024 bit
Secure Renegotiation IS supported
Compression: zlib compression
Expansion: zlib compression
SSL-Session:
Protocol : TLSv1
Cipher : DHE-RSA-AES256-SHA
Session-ID: 6EB76EE1032AE442785F4614838A16B6643303A12E3AB6639D4CAF4EC0CA29F5
Session-ID-ctx:
Master-Key: 376BE8296CF85C4832133AB66121E08582DDAA4ADD8403924EB13296726596292AAD9FA9EE509D620E7A0D8E58AA9353
Key-Arg : None
TLS session ticket:
0000 - 99 f7 cf d2 6c f2 5e 5b-d5 87 1f bf 79 7d 01 fa ....l.^[....y}..
0010 - 0e 41 ce 4b 5c e2 05 04-16 4c 85 71 ef 41 1b 7c .A.K\....L.q.A.|
0020 - 18 33 f2 43 34 55 9f 46-fd 32 42 8d 21 f0 c4 3f .3.C4U.F.2B.!..?
0030 - 8e 79 ee 97 51 90 b9 7e-d9 c8 90 58 93 9c 90 f3 .y..Q..~...X....
0040 - c2 0a 1f 85 48 9e 94 b3-36 93 65 6e 03 85 57 63 ....H...6.en..Wc
0050 - 81 80 67 0d a6 ec f2 a0-1b 00 aa 82 cb 2e b0 30 ..g............0
0060 - 05 d6 81 49 c4 d1 36 6d-8f 50 86 69 d0 96 e0 bd ...I..6m.P.i....
0070 - 94 04 60 b7 21 0e 02 dd-ed 86 50 2c 9f 30 24 1a ..`.!.....P,.0$.
0080 - 05 ac a3 97 5a 31 b0 07-4c fc af 57 df 92 5c d7 ....Z1..L..W..\.
0090 - 50 7b fb ce e1 36 bf a7-84 29 b2 ad fc e7 0b f3 P{...6...)......
00a0 - 6c e7 9c 7c ed db f3 cb-17 55 a7 03 de f5 33 a4 l..|.....U....3.
00b0 - b1 72 b0 c2 6a f8 60 45-f2 1c 81 2b 54 ba fe 61 .r..j.`E...+T..a


Compression: 1 (zlib compression)
Start Time: 1302434311
Timeout : 300 (sec)
Verify return code: 18 (self signed certificate)
---
read from 0x98b2878 [0x98b8ea0] (5 bytes => 5 (0x5))
0000 - 15 03 01 ...
0005 - <SPACES/NULS>
read from 0x98b2878 [0x98b8ea5] (32 bytes => 32 (0x20))
0000 - bf 6b a9 e0 4f e8 5d 3b-f0 fd fa a0 05 e6 3b c2 .k..O.];......;.
0010 - 95 33 16 aa 2e 66 0d 53-67 b3 ae 42 07 4a fa 36 .3...f.Sg..B.J.6
SSL3 alert read:warning:close notify
closed
write to 0x98b2878 [0x98bd6b0] (37 bytes => 37 (0x25))
0000 - 15 03 01 00 20 c0 69 b3-b0 18 54 e5 e4 de 3a c3 .... .i...T...:.
0010 - 2f b7 ee 6c 83 35 57 b1-0c c8 36 bd 44 73 48 70 /..l.5W...6.DsHp
0020 - 06 cc 8e 2c 85 ...,.
SSL3 alert write:warning:close notify



d) Comprobar el protocolo con: curl https://localhost/

iker@iker-Studio-XPS-1340:/$ curl https://localhost/
curl: (60) SSL certificate problem, verify that the CA cert is OK. Details:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
More details here: http://curl.haxx.se/docs/sslcerts.html


curl performs SSL certificate verification by default, using a "bundle"
of Certificate Authority (CA) public keys (CA certs). If the default
bundle file isn't adequate, you can specify an alternate file
using the --cacert option.
If this HTTPS server uses a certificate signed by a CA represented in
the bundle, the certificate verification probably failed due to a
problem with the certificate (it might be expired, or the name might
not match the domain name in the URL).
If you'd like to turn off curl's verification of the certificate, use
the -k (or --insecure) option.



iker@iker-Studio-XPS-1340:/$ curl -k https://localhost/
<html>
<head>
<title> certificado autofirmado a partir de una clave privada sin password </title>
</head>
<body>


<div align="center">
<h1>certificado autofirmado a partir de una clave privada sin password</h1>
</div>


</body>
</html>