Vamos a realizar la implantaciond el protocolo HTTP/2 en una maquina debian strech, sobre un servidor apache.
Ahora vamos a configurar dos máquinas para las pruebas que más adelante realizaremos, y vamos a instalar una maquina con un servidor apache con “http/2” y otra máquina con “http/1.1” (el cual viene habilitado por defecto).
Para poder implantar http/2 en un servidor apache primero tenemos que tener un certificado ssl instalado, para ello vamos a realizar un certificado auto firmado con «OpenSSL».
Generar certificado auto firmado
Un certificado SSL es un certificado digital utilizado por el protocolo para el encriptamiento de la información.
Este certificado es proporcionado por un proveedor autorizado (Verisign, Thawte, Comodo, etc…) y es enviado al cliente por el servidor con quien estamos estableciendo una conexión segura.
Hay muchos servicios que utilizan este protocolo, algunos ejemplos pueden ser: HTTPS, SMTPS, IMAPS, SSH, POP3S, etc…
Instalar OpenSSL
El primer paso sera instalar openssl apt install openssl
Creamos una clave privada
La llave privada nos será útil para la generación del certificado. Una vez creado, nuestro certificado SSL dependerá de esta llave para la implementación del mismo en cualquier servicio que requiera una conexión segura.
Por ejemplo, vamos a crear una clave de 1024 bits:
root@http2:/home/usuario# openssl genrsa -out server.key 1024 Generating RSA private key, 1024 bit long modulus ....++++++ ..........................................................++++++ e is 65537 (0x010001)
Generar CSR
Un CSR es la base para un certificado SSL, en él se definen datos como el dominio, organización, ubicación, información de contacto, entre otros.
Es importante destacar que estos pasos también son necesarios cuando vas a adquirir un certificado SSL de un proveedor autorizado, durante la gestión del mismo, el proveedor va a solicitar este archivo para crear tu certificado. Por lo tanto, debemos tener mucho cuidado en que la información que ingresamos sea correcta.
Para generar el CSR debemos ejecutar el siguiente comando, si te fijas uno de los parámetros que introducimos es la clave privada.
root@http2:/home/usuario# openssl req -new -key server.key -out server.csr 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]:ES State or Province Name (full name) [Some-State]: Seville Locality Name (eg, city) []: Seville Organization Name (eg, company) [Internet Widgits Pty Ltd]: Juanlu Ramirez Organizational Unit Name (eg, section) []: Juanlu Ramirez Common Name (e.g. server FQDN or YOUR name) []: Juanlu Email Address []: admin@juanluramirez.com Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []:
Generamos certificado SSL
Para generar el certificado SSL vamos a necesitar tanto la llave privada como el CSR que acabamos de crear.
Para generar el certificado SSL debemos ejecutar el siguiente comando:
root@http2:/home/usuario# openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt Signature ok subject=C = ES, ST = Seville, L = Seville, O = Juanlu Ramirez, OU = Juanlu Ramirez, CN = Juanlu, emailAddress = admin@juanluramirez.com Getting Private key
Instalación pila LAMP
Para poder instalar un CMS vamos a intalar la pila LAMP apt install apache2 php mariadb-server
y ya tendremos el servidor web instalado.
Habilitar modulo SSL
Primero copiamos los certificados en /etc/sssl/certs/
root@http2:/home/usuario# cp server.crt /etc/ssl/certs/ root@http2:/home/usuario# cp server.key /etc/ssl/certs
Y lo habilitamos:
root@http2:/home/usuario# a2enmod ssl Considering dependency setenvif for ssl: Module setenvif already enabled Considering dependency mime for ssl: Module mime already enabled Considering dependency socache_shmcb for ssl: Enabling module socache_shmcb. Enabling module ssl. See /usr/share/doc/apache2/README.Debian.gz on how to configure SSL and create self-signed certificates. To activate the new configuration, you need to run: systemctl restart apache2
Y modificamos el vhosts por defecto de SSL /etc/apache2/sites-available/default-ssl
, borramos todo el contenido y añadimos lo siguiente.
<IfModule mod_ssl.c> <VirtualHost _default_:443> ServerName www.http2.com ServerAdmin admin@juanluramirez.com DocumentRoot /var/www/html <Directory /> Options FollowSymLinks AllowOverride None </Directory> <Directory /var/www/html> Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all </Directory> ErrorLog ${APACHE_LOG_DIR}/error.log LogLevel warn CustomLog ${APACHE_LOG_DIR}/ssl_access.log combined SSLEngine on SSLCertificateKeyFile /etc/ssl/certs/server.key SSLCertificateFile /etc/ssl/certs/server.crt #SSLCACertificateFile /etc/ssl/certs/bundle.crt BrowserMatch "MSIE [2-6]" \ nokeepalive ssl-unclean-shutdown \ downgrade-1.0 force-response-1.0 # MSIE 7 and newer should be able to use keepalive BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown </VirtualHost> </IfModule>
Habilitamos el vhosts a2ensite default-ssl
y reiniciamos el servidor apache systemctl restart apache2
.
Habilitamos el modulo http2
Primero activamos el paquete nghttp2 apt install nghttp2
, y habilitamos el modulo http2:
root@http2:/home/usuario# a2enmod http2 Enabling module http2. To activate the new configuration, you need to run: systemctl restart apache2
Y añadimos la siguiente linea a nuestro fichero «default-ssl», justo detras de los certificados especificados:
Protocols h2 http/1.1
Y ya solo queda reiniciar el servidor web systemctl restart apache2
I relish, result in I found just what I was taking a look for.
You have ended my four day long hunt! God Bless you man. Have a nice day.
Bye