:::: MENU ::::

Apache HTTP Server: Configurar HTTPS

Con Apache HTTP Server podemos publicar nuestras páginas Web con HTTPS (Hypertext Transfer Protocol Secure). Aquí veremos cómo hacerlo.

Introducción

En la actualidad prácticamente ninguna página Web usa HTTP. La mayoría usan HTTPS. HTTPS es un protocolo seguro que sirve (entre otras cosas) para cifrar las comunicaciones entre cliente y servidor.

Requisitos previos

Necesitamos un servidor Apache HTTP Server instalado e iniciado.

Configuración

Instalación de herramientas

Necesitaremos instalar dos herramientas, con los siguientes comandos:

Editor Vi:

apt install -y vim

Navegador Web de consola Links:

apt install -y links

Configuración de Apache HTTP Server

Y ahora configuramos el servidor Apache HTTP Server:

Activamos el módulo de Apache SSL:

a2enmod ssl

Y creamos la configuración SSL con:

a2ensite default-ssl

Iniciamos el servidor Apache con:

service apache2 start

O reiniciamos el servidor con:

service apache2 restart

Creación y configuración de certificados

Es necesario que creemos y configuremos claves y certificados para dos tipos de entidades:

  • La Autoridad Certificadora (CA).
  • El Servidor Web en el que vamos a configurar HTTPS.

Autoridad Certificadora (CA)

Creamos la clave de la Autoridad Certificadora:

openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -pkeyopt rsa_keygen_pubexp:65537 -out cakey.pem

Hacemos que la CA autofirme su propio certificado:

openssl req -new -x509 -key cakey.pem -out cacert.pem -days 365

Nos pedirá estos datos:

  • Country Name (2 letter code) [AU]:ES
  • State or Province Name (full name) [Some-State]:Madrid
  • Locality Name (eg, city) []:Madrid
  • Organization Name (eg, company) [Internet Widgits Pty Ltd]:MyCompany
  • Organizational Unit Name (eg, section) []:MySection
  • Common Name (e.g. server FQDN or YOUR name) []:localhost
  • Email Address []:me@myemail.com

En este momento tenemos estos dos elementos:

  • La clave de la CA (cakey.pem).
  • El certificado auto-firmado por la autoridad certificadora, es decir, nosotros mismos (cacert.pem).

Ahora necesitamos unos directorios para que esta autoridad firme el certificado Web.

mkdir demoCA
mkdir demoCA/certs
mkdir demoCA/crl
mkdir demoCA/newcerts
mkdir demoCA/private
touch demoCA/index.txt
echo 02 > demoCA/serial
mv cacert.pem demoCA/
mv cakey.pem demoCA/private/

Y con esto, ya tenemos los archivos de la Autoridad Certificadora (CA).

Servidor Web

Creamos un par de claves:

openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -pkeyopt rsa_keygen_pubexp:65537 -out privkey-localhost.pem

Creamos la petición de firma del certificado:

openssl req -new -key privkey-localhost.pem -out certreq-localhost.crs

Nos pedirá estos datos:

  • Country Name (2 letter code) [AU]:ES
  • State or Province Name (full name) [Some-State]:Madrid
  • Locality Name (eg, city) []:Madrid
  • Organization Name (eg, company) [Internet Widgits Pty Ltd]:MyCompany
  • Organizational Unit Name (eg, section) []:MySection
  • Common Name (e.g. server FQDN or YOUR name) []localhost
  • Email Address []:me@myemail.com

No introducimos ningún valor cuando solicite Challenge password o Optional company name.

Ahora enviamos el request a la Autoridad Certificadora y la misma (nosotros) expidirá un certificado:

openssl ca -in certreq-localhost.crs -out cert-localhost.pem

Y después respondemos a todo con “y”.

Ahora configuramos Apache para usar estos certificados.

Antes de nada, verificamos:

openssl verify -CAfile demoCA/cacert.pem cert-localhost.pem

El sistema responde con:

cert-localhost.pem: OK

Configuración de Apache HTTP Server para usar SSL

Copiamos los ficheros importantes:

cp cert-localhost.pem /etc/ssl/certs/
cp demoCA/cacert.pem /etc/ssl/certs/
cp privkey-localhost.pem /etc/ssl/private/

Editamos la configuración de SSL de Apache:

vi /etc/apache2/sites-available/default-ssl.conf

Modificamos estas dos líneas con la ruta de nuestros archivos:

SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key

Por éstas:

SSLCertificateFile /etc/ssl/certs/cert-localhost.pem
SSLCertificateKeyFile /etc/ssl/private/privkey-localhost.pem

Después de esas dos, introducimos una nueva:

SSLCACertificateFile /etc/ssl/certs/cacert.pem

Grabamos y salimos de Vi con “:wq”.

Ahora hacemos un reload para que cargue la configuración:

service apache2 reload

Si obtenemos un error porque el servidor esta apagado, lo encendemos con:

service apache2 start

Prueba

Probamos de la siguiente manera (usando la consola de comandos y el navegador Web de texto “Links” en lugar de un navegador Web gráfico):

Cargamos la URL sin HTTPS:

links http://localhost

Después, caramos la URL con HTTPS:

links https://localhost

Nos dirá que el certificado es inválido (porque lo hemos creado nosotros mismos). Pulsmos en Sí y cargará la página sin problema.

Nota: Para evitar este mensaje, y para poder usar un navegador Web como Google Chrome sin ningún mensaje de alerta, necesitamos una Autoridad Ceritifadora valide el certificado que hemos creado.


So, what do you think ?