Escenario: HTTPS en Apache Web Server

De MediaWiki
Revisión del 11:36 9 feb 2026 de Joselv (discusión | contribuciones) (Página creada con « = Introdución = O obxectivo deste escenario é explicar como configurar o servidor web Apache para traballar tanto con http como https: Implementar un sistema coas segui…»)
(dif) ← Revisión anterior | Revisión actual (dif) | Revisión siguiente → (dif)
Ir a la navegación Ir a la búsqueda

Introdución

O obxectivo deste escenario é explicar como configurar o servidor web Apache para traballar tanto con http como https:

Implementar un sistema coas seguintes características:

  • O servidor servidor web Apache corre nun Linux Ubuntu Server 22.04.
  • O servidor web terá un sitio por defecto e dous dominios: www.tenda1.example e www.tenda2.example.
  • O acceso ós dous dominios poderá facerse tanto por http coma por https.
  • Cada dominio usará o seu propio certificado.
  • Os certificados dixitais serán crearanse por nós (certificados autoasinados).
NOTA. Empregaremos o dominio .example seguindo a recomendación da IANA en relación á elaboración de documentación.

Configuración do escenario

A creación e configuración dos equipos a usar no Escenario 5C implica configurar o server (servidor web) e o equipo cliente dende onde visitaremos as páxinas web dos sitios www.tenda1.example e www.tenda2.example. A continuación explícase:

Como crear/configurar o server mediante un script Como configurar a resolución dns do cliente para as probas de funcionamento A configuración do cliente explícase ó final desta páxina.

Configuración do server

Creación automática do escenario

Como primeiro paso hai que levar o arquivo script_esc_5C.tar.gz ó equipo anfitrión dos contedores. Esto dependerá da situación particular de cada un; eu normalmente nos equipos instalo o servidor openssh-server e subo os arquivos mediante scp (dende Windows pódese usar a utilidade pscp.exe de putty):

~$ scp -r script_esc_5C.tar.gz asir@192.168.1.150:
script_esc_5C.tar.gz                    100% 1252     958.3KB/s   00:00

Unha vez subido procedemos a descomprimilo:

~$ tar zxvf script_esc_5C.tar.gz 
script_esc_5C/profile_WAN
script_esc_5C/network_3IPS_PLANTILLA.yml
script_esc_5C/config_server_incus.yml
script_esc_5C/
script_esc_5C/escenario_5C.sh
 ~$ cd script_esc_5C/
 ~/script_esc_5C$ chmod 755 escenario_5C.sh.
 ~/script_esc_5C$ ls -lhF
<pre>
total 16K
-rw-rw-r-- 1 asir asir 2,1K feb  7 22:10 config_server_incus.yml
-rwxr-xr-x 1 asir asir 1,7K feb  7 22:11 escenario_5C.sh*
-rw-rw-r-- 1 asir asir  211 feb  7 22:07 network_3IPS_PLANTILLA.yml
-rw-rw-r-- 1 asir asir  190 feb  7 22:03 profile_WAN
~/script_esc_5C$ ./escenario_5C.sh
----- Escenario 5C -----
Seleccionar a operación:
1. Crear escenario
2. Parar server
3. Arrincar server
4. Borrar escenario
------
1
Crear escenario
Network wan created
Perfil WAN creado
------------------------------
     creando server       
------------------------------
Launching server-https

+--------------+---------+-------------------+----------+-----------+----------------------+
|     NAME     |  STATE  |       IPV4        | PROFILES | SNAPSHOTS |     LAST USED AT     |
+--------------+---------+-------------------+----------+-----------+----------------------+
| server-https | RUNNING | 192.0.2.13 (eth0) | WAN      | 0         | 2026/02/07 22:22 CET |
|              |         | 192.0.2.12 (eth0) |          |           |                      |
|              |         | 192.0.2.11 (eth0) |          |           |                      |
+--------------+---------+-------------------+----------+-----------+----------------------+

Tras deixar actuar un par de minutor a cloud-init para a configuración inicial da máquina, verifícase que todo foi ben:

~/script_esc_5C$ incus shell server-https
~# tail -f /var/log/cloud-init-output.log
...
To activate the new configuration, you need to run:
  systemctl restart apache2
Enabling site default-ssl.
To activate the new configuration, you need to run:
  systemctl reload apache2
--2026-02-07 22:24:57--  https://www.adminer.org/latest.php
Resolving www.adminer.org (www.adminer.org)... 95.168.218.179, 2a01:28:ca:112::1:907
Connecting to www.adminer.org (www.adminer.org)|95.168.218.179|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: static/download/5.4.1/adminer-5.4.1.php [following]
--2026-02-07 22:24:57--  https://www.adminer.org/static/download/5.4.1/adminer-5.4.1.php
Reusing existing connection to www.adminer.org:443.
HTTP request sent, awaiting response... 200 OK
Length: 507471 (496K) [application/octet-stream]
Saving to: ‘/var/www/html/adminer.php’

     0K .......... .......... .......... .......... .......... 10%  467K 1s
    50K .......... .......... .......... .......... .......... 20%  965K 1s
   100K .......... .......... .......... .......... .......... 30% 10.9M 0s
   150K .......... .......... .......... .......... .......... 40% 1.02M 0s
   200K .......... .......... .......... .......... .......... 50% 28.6M 0s
   250K .......... .......... .......... .......... .......... 60% 16.3M 0s
   300K .......... .......... .......... .......... .......... 70% 23.7M 0s
   350K .......... .......... .......... .......... .......... 80% 22.4M 0s
   400K .......... .......... .......... .......... .......... 90% 1.06M 0s
   450K .......... .......... .......... .......... .....     100%  114M=0.3s

2026-02-07 22:24:58 (1.82 MB/s) - ‘/var/www/html/adminer.php’ saved [507471/507471]

Cloud-init v. 25.2-0ubuntu1~22.04.1 finished at Sat, 07 Feb 2026 21:24:58 +0000. Datasource DataSourceNoCloud [seed=/var/lib/cloud/seed/nocloud-net].  Up 144.59 seconds
root@server-https:~# cloud-init status
status: done

Configurar a resolución DNS dende os clientes

Para poder acceder ós sitios web dende os clientes hai que configurar a resolución dns.

Hai dúas posibles solucións:

  • Instalar un servidor dns cunha zona para cada un dos dominios tenda1.example e tenda2.example.
  • Nos equipos cliente poden engadirse as entradas correspondentes ós hosts www.tenda1.example e www.tenda2.example no arquivo hosts.

Aínda que non é a mellor solución, por ser un escenario de probas escolleuse a segunda por ser a máis rápida e sinxela. A modo de exemplo así quedaría o arquivo hosts dun cliente linux:

$ sudo nano /etc/hosts
127.0.0.1       localhost
127.0.1.1       lxd
192.0.2.11      www.tenda1.example
192.0.2.12      www.tenda2.example

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

Probamos a resolución DNS e a conexión co server dende o equipo cliente:

$ ping -c 2 www.tenda1.example
PING www.tenda1.example (192.0.2.11) 56(84) bytes of data.
64 bytes from www.tenda1.example (192.0.2.11): icmp_seq=1 ttl=64 time=0.095 ms
64 bytes from www.tenda1.example (192.0.2.11): icmp_seq=2 ttl=64 time=0.086 ms

--- www.tenda1.example ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1004ms
rtt min/avg/max/mdev = 0.086/0.090/0.095/0.010 ms
$ ping -c 2 www.tenda2.example
PING www.tenda2.example (192.0.2.12) 56(84) bytes of data.
64 bytes from www.tenda2.example (192.0.2.12): icmp_seq=1 ttl=64 time=0.131 ms
64 bytes from www.tenda2.example (192.0.2.12): icmp_seq=2 ttl=64 time=0.104 ms

--- www.tenda2.example ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.104/0.117/0.131/0.017 ms

En sistemas Windows habería que editar, como administrador, o arquivo C:\Windows\System32\drivers\etc\hosts e engadir as liñas:

192.0.2.11      www.tenda1.example
192.0.2.12      www.tenda2.example

Apache, http e virtualhosts

No caso de non usar o script, hai que instalar o servidor web Apache no servidor:

$ sudo apt update 
$ sudo apt install apache2

Verifícase que o servidor web Apache está correndo:

$ sudo ss -ltnp
State      Recv-Q     Send-Q          Local Address:Port           Peer Address:Port     Process                                                                                    
LISTEN     0          4096            127.0.0.53%lo:53                  0.0.0.0:*         users:(("systemd-resolve",pid=168,fd=13))                                                 
LISTEN     0          128                   0.0.0.0:22                  0.0.0.0:*         users:(("sshd",pid=216,fd=3))                                                             
LISTEN     0          511                         *:80                        *:*         users:(("apache2",pid=1445,fd=4),("apache2",pid=1444,fd=4),("apache2",pid=1443,fd=4))     
LISTEN     0          128                      [::]:22                     [::]:*         users:(("sshd",pid=216,fd=4))  

Accedendo dende un cliente ó servidor obtense a páxina principal do sitio por defecto:

Sitio Web por defecto

Fig. Páxina por defecto de Apache en http://192.0.2.13

En Linux Ubuntu Server os arquivos de configuración do servidor Apache están na carpeta /etc/apache2:

$ ls -lhF /etc/apache2/
total 32K
-rw-r--r-- 1 root root 7.1K Mar  8 17:32 apache2.conf
drwxr-xr-x 2 root root    7 May  7 17:58 conf-available/
drwxr-xr-x 2 root root    7 May  7 17:58 conf-enabled/
-rw-r--r-- 1 root root 1.8K Feb 23  2021 envvars
-rw-r--r-- 1 root root  31K Feb 23  2021 magic
drwxr-xr-x 2 root root  143 May  7 17:58 mods-available/
drwxr-xr-x 2 root root   31 May  7 17:58 mods-enabled/
-rw-r--r-- 1 root root  320 Feb 23  2021 ports.conf
drwxr-xr-x 2 root root    4 May  7 17:58 sites-available/
drwxr-xr-x 2 root root    3 May  7 17:58 sites-enabled

En Apache 2.X hai que diferenciar entre sitios web dispoñibles e sitios habilitados. Os dispoñibles non son accesibles por parte dos clientes; en cambio, os habilitados sí.

Os arquivos dos sitios web dispoñibles poden verse en /etc/apache2/sites-available/ e os habilitados poden verse en /etc/apache2/sites-enabled/.

A instalación de Apache por defecto ven con dous sitios dispoñibles (un para http e outro para https) estando activado unicamente o sitio para acceso por http:

 $ ls -lhF /etc/apache2/sites-available/
total 6.5K
-rw-r--r-- 1 root root 1.4K Feb 23  2021 000-default.conf
-rw-r--r-- 1 root root 6.2K Feb 23  2021 default-ssl.conf
ubuntu@server5C:~$ ls -lhF /etc/apache2/sites-enabled/
total 512
lrwxrwxrwx 1 root root 35 May  7 17:58 000-default.conf -> ../sites-available/000-default.conf

Estos arquivos de configuración poden usarse como punto de partida para crear novos sitios web; de feito, así o faremos neste escenario. A continuación crease o arquivo de configuración do sitio web para www.tenda1.example tomando como punto de partida o arquivo de configuración do sitio por defecto:

$ sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/www.tenda1.example.conf
$ sudo nano /etc/apache2/sites-available/www.tenda1.example.conf
<VirtualHost 192.0.2.11:80>
        ServerName www.tenda1.example    
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/tenda1.example

        ErrorLog ${APACHE_LOG_DIR}/tenda1.example_error.log
        CustomLog ${APACHE_LOG_DIR}/tenda1.example_access.log combined
</VirtualHost>

Personalízanse as directivas:

  • Virtualhost: indícase a IP e porto asociado ó sitio web.
  • ServerName: nome de dominio asociado ó virtualhost.
  • DocumentRoot: carpeta onde estarán os arquivos do sitio web.
  • ErrorLog e CustomLog: para indicar os arquivos de logs do sitio web. Especificáronse uns propios para o sitio www.tendaprobas1.com para non compartilos con outros dominios.

Créase o directorio e a páxina principal do sirio www.tendaprobas1.com:

$ sudo mkdir /var/www/tenda1.example
$ sudo nano /var/www/tenda1.example/index.html
<html>
<head><title>Tenda Probas 1</title></head>
<body>
<b>TENDAPROBAS1</b>
</body>
</html>

Actívase o sitio:

$ sudo a2ensite www.tenda1.example.conf 
Enabling site www.tenda1.example.
To activate the new configuration, you need to run:
  systemctl reload apache2
$ sudo systemctl reload apache2

Usando o comando apache2ctl podemos ver os sitios servidos polo servidor Apache e verificamos que o sitio www.tenda1.example está activo e correndo no porto 80/tcp da IP 192.0.2.11.

Estamos a traballar con hosts virtuais baseados en IP; é dicir, cada sitio ten a súa propia combinación IP-porto:

$ sudo apache2ctl -S

AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1. Set the 'ServerName' directive globally to suppress this message
VirtualHost configuration:
192.0.2.11:80          www.tenda1.example (/etc/apache2/sites-enabled/www.tenda1.example.conf:1)
*:80                   127.0.0.1 (/etc/apache2/sites-enabled/000-default.conf:1)
ServerRoot: "/etc/apache2"
Main DocumentRoot: "/var/www/html"
Main ErrorLog: "/var/log/apache2/error.log"
Mutex watchdog-callback: using_defaults
Mutex default: dir="/var/lock/apache2" mechanism=fcntl 
PidFile: "/var/run/apache2/apache2.pid"
Define: DUMP_VHOSTS
Define: DUMP_RUN_CFG
User: name="www-data" id=33
Group: name="www-data" id=33
ubuntu@server5C:~$ 

Se accedemos dende un navegador web:

Tenda 1

Fig. Acceso por http ó sitio www.tenda1.example

Repítese o proceso para www.tenda2.example

$ sudo cp /etc/apache2/sites-available/www.tenda1.example.conf /etc/apache2/sites-available/www.tenda2.example.conf
$ sudo nano /etc/apache2/sites-available/www.tenda2.example.conf
<VirtualHost 192.0.2.12:80>
        ServerName www.tenda2.example
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/tenda2.example

        ErrorLog ${APACHE_LOG_DIR}/tenda2.example_error.log
        CustomLog ${APACHE_LOG_DIR}/tenda2.example_access.log combined
</VirtualHost>
sudo mkdir /var/www/tenda2.example                                                                                                    
sudo nano /var/www/tenda2.example/index.html                                                                                          
<html>
<head><title>Tenda Probas 2</title></head>
<body>
<b>TENDAPROBAS2</b>
</body>
</html>
$ sudo a2ensite www.tenda2.example.conf
Enabling site www.tenda2.example.
To activate the new configuration, you need to run:
  systemctl reload apache2
$ sudo systemctl reload apache2
$ ls -lhF /etc/apache2/sites-enabled/
total 1.5K
lrwxrwxrwx 1 root root 35 May  7 17:58 000-default.conf -> ../sites-available/000-default.conf
lrwxrwxrwx 1 root root 42 May  7 18:02 www.tenda1.example.conf -> ../sites-available/www.tenda1.example.conf
lrwxrwxrwx 1 root root 42 May  7 18:04 www.tenda2.example.conf -> ../sites-available/www.tenda2.example.conf
$ sudo apache2ctl -S
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1. Set the 'ServerName' directive globally to suppress this message
VirtualHost configuration:
192.0.2.11:80          www.tenda1.example (/etc/apache2/sites-enabled/www.tenda1.example.conf:1)
192.0.2.12:80          www.tenda2.example (/etc/apache2/sites-enabled/www.tenda2.example.conf:1)
*:80                   127.0.0.1 (/etc/apache2/sites-enabled/000-default.conf:1)
ServerRoot: "/etc/apache2"
Main DocumentRoot: "/var/www/html"
Main ErrorLog: "/var/log/apache2/error.log"
Mutex watchdog-callback: using_defaults
Mutex default: dir="/var/lock/apache2" mechanism=fcntl 
PidFile: "/var/run/apache2/apache2.pid"
Define: DUMP_VHOSTS
Define: DUMP_RUN_CFG
User: name="www-data" id=33
Group: name="www-data" id=33
ubuntu@server5C:~$ 

Se accedemos dende un navegador web:

Sitio Web tenda 2

Fig. Acceso por http ó sitio www.tenda2.example

Neste momento temos configurado o acceso por http ós sitios www.tenda1.example e www.tenda2.example. Na seguinte sección configuraremos o acceso por https.