Configurar HTTPS para Apache2 en Linux

Hace unas semanas publiqué dos artículos sobre como Instalar y configurar Apache2 en Linux y Configurar Virtual Hosts en Apache2. En este post vamos a aprender como configurar nuestro servidor para poder ofrecer páginas seguras utilizando SSL.

El objetivo de este manual no es entrar en los detalles de creación de certificados sinó mostrar los pasos necesarios para configurar un servidor seguro para realizar nuestras pruebas.

En esta ocasión, crearemos un nuevo VirtualHost llamado secure.com. Empezaremos creando el directorio en el cual guardaremos los archivos de la página. Crearemos el directorio secure.com dentro de /var/www y el fichero index.html con el contenido “Hola HTTPS, te encuentras en una conexión segura!”

aitor@httpServer:/var/www$ sudo mkdir secure.com
 [sudo] password for aitor:
aitor@httpServer:/var/www$ sudo vim secure.com/index.html
Hola HTTPS, te encuentras en una conexión segura!

Instalación de los paquetes necesarios

Para la creación de los certificados, es necesario instalar los paquetes openssl y libssl-dev, por lo tanto, procedemos a su instalación:

aitor@httpServer:/var/www$ sudo apt-get install openssl
aitor@httpServer:/var/www$ sudo apt-get install libssl-dev
 Leyendo lista de paquetes... Hecho
 Creando árbol de dependencias
 Leyendo la información de estado... Hecho
...

Para habilitar SSL en nuestro Apache, debemos volver a realizar su instalación habilitando SSL. Para ello, accederemos al directorio donde descomprimimos la primera vez Apache y volveremos a realizar ./configre (añadiendo ciertos parámetros), make y make install.

aitor@httpServer:~$ cd httpd-2.2.21/
aitor@httpServer:~/httpd-2.2.21$ ./configure --enable-ssl --enable-module=all --enable-so
aitor@httpServer:~/httpd-2.2.21$ make
aitor@httpServer:~/httpd-2.2.21$ sudo make install

Una vez instalado, creamos el directorio donde vamos a almacenar los certificados para el servidor y le añadimos el permiso de escritura para otros usuarios del sistema.

aitor@httpServer:~/httpd-2.2.21$ cd /usr/local/apache2/
aitor@httpServer:/usr/local/apache2$ sudo mkdir certs
aitor@httpServer:/usr/local/apache2$ sudo chmod o+w certs/
aitor@httpServer:/usr/local/apache2$ cd certs

Vamos a crear un certificado digital para nuestro servidor HTTPS que va a garantizar nuestra legitimidad a los usuarios que se conecten a el.

Este certificado lo vamos a crear nosotros mismos, por lo tanto, sera un certificado autofirmado y producirá un mensaje de advertencia en todos los clientes cuando visiten https://www.secure.com ya que no está firmado por una autoridad de certificación reconocida.

  • Creamos las claves públicas y privadas:
aitor@httpServer:/usr/local/apache2/certs$ sudo openssl req -new > new.cert.csr
 Generating a 1024 bit RSA private key
 ......................++++++
 ......................++++++
 writing new private key to 'privkey.pem'
 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]:ES
 State or Province Name (full name) [Some-State]:BCN
 Locality Name (eg, city) []:SJD
 Organization Name (eg, company) [Internet Widgits Pty Ltd]:Blog de Aitor
 Organizational Unit Name (eg, section) []:
 Common Name (eg, YOUR name) []:httpServ
 Email Address []:arigada@httpServ.com
Please enter the following 'extra' attributes
 to be sent with your certificate request
 A challenge password []:aitor
 An optional company name []:Blog de Aitor

Esto nos crea las dos claves deseadas (pública y privada)  llamadas new.cert.csr y privkey.pem

  • Eliminamos la frase de descifrado (passphrase):
aitor@httpServer:/usr/local/apache2/certs$ openssl rsa -in privkey.pem -out new.cert.key
 Enter pass phrase for privkey.pem:
 writing RSA key
  • Y, finalmente, creamos el certificado  autofirmado (X509):
aitor@httpServer:/usr/local/apache2/certs$ sudo openssl x509 -in new.cert.csr -out new.cert.cert -req -signkey new.cert.key -days 365
 Signature ok
 subject=/C=ES/ST=BCN/L=SJD/O=Blog de Aitor/CN=httpServ/emailAddress=arigada@httpServ.com
 Getting Private key

Una vez creados los certificados, es recomendable modificar los permisos del directorio que contiene los certificados y el de los propios certificados para que solo puedan ser leídos.

aitor@httpServer:/usr/local/apache2$ sudo chmod -R 400 certs/

A continuación, vamos a configurar Apache para hacer uso de ellos y poder ofrecer páginas seguras.

En primer lugar, añadiremos el fichero de configuración httpd-ssl.conf en el fichero de configuración principal de Apache. Para ello, accedemos a httpd.conf y descomentamos la siguiente línea (406).

aitor@httpServer:/usr/local/apache2$ sudo vim conf/httpd.conf
...
# Various default settings
 #Include conf/extra/httpd-default.conf
# Secure (SSL/TLS) connections
Include conf/extra/httpd-ssl.conf
 #
 # Note: The following must must be present to support
 #       starting without SSL on platforms with no /dev/random equivalent
 #       but a statically compiled-in mod_ssl.
 #
...

A continuación, accedemos al fichero recién incluido (httpd-ssl.conf) y modificamos las líneas 99 y 107.

aitor@httpServer:/usr/local/apache2$ sudo vim conf/extra/httpd-ssl.conf
...
#   Server Certificate:
 #   Point SSLCertificateFile at a PEM encoded certificate.  If
 #   the certificate is encrypted, then you will be prompted for a
 #   pass phrase.  Note that a kill -HUP will prompt again.  Keep
 #   in mind that if you have both an RSA and a DSA certificate you
 #   can configure both in parallel (to also allow the use of DSA
 #   ciphers, etc.)
SSLCertificateFile "/usr/local/apache2/certs/new.cert.cert"
 #SSLCertificateFile "/usr/local/apache2/conf/server-dsa.crt"
#   Server Private Key:
 #   If the key is not combined with the certificate, use this
 #   directive to point at the key file.  Keep in mind that if
 #   you've both a RSA and a DSA private key you can configure
 #   both in parallel (to also allow the use of DSA ciphers, etc.)
SSLCertificateKeyFile "/usr/local/apache2/certs/new.cert.key"
 #SSLCertificateKeyFile "/usr/local/apache2/conf/server-dsa.key"

Configuración del Host Virtual

Para terminar, creamos el Virtual Host necesario para añadir secure.com al servidor teniendo en cuenta el directorio creado anteriormente y los certificados creados. Para ello, añadiremos el siguiente contenido al fichero httpd-vhosts.conf.

aitor@httpServer:/usr/local/apache2$ sudo vim conf/extra/httpd-vhosts.conf

NameVirtualHost *:443

<VirtualHost *:443>
 ServerAdmin arigada@mailServ.com
 DocumentRoot "/var/www/secure.com"
 ServerName secure.com
 ServerAlias www.secure.com
 ErrorLog "logs/secure.com-error_log"
 CustomLog "logs/secure.com-access_log" common
 SSLEngine on
 SSLCertificateKeyFile "/usr/local/apache2/certs/new.cert.key"
 SSLCertificateFile "/usr/local/apache2/certs/new.cert.cert"
</VirtualHost>

Finalmente, debemos configurar el DNS de nuestra red para que, al acceder a secure.com y http://www.secure.com, las peticiones se dirijan a nuestro servidor web. De momento, para hacer pruebas, podemos modificar el fichero /etc/hosts de nuestro servidor (o del cliente si queremos acceder desde otra máquina Linux) para comprobar el correcto funcionamiento de Apache. Este fichero será usado como DNS local en el equipo.

El fichero /etc/hosts quedaria de la siguiente manera:

127.0.0.1       localhost
127.0.1.1       httpServer
127.0.0.1       host1.com
127.0.0.1       www.host1.com
127.0.0.1       host2.com
127.0.0.1       www.host2.com
127.0.0.1 secure.com
127.0.0.1 www.secure.com

 # 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

Una vez hechas estas configuraciones, ya podemos acceder sin problemas desde un cliente a https://www.secure.com y, tras aceptar el certificado autofirmado, accedemos a la página web creada en el servidor de forma segura.

Posts relacionados:

Instalación y configuración de Apache2 en Linux

Configurar Virtual Hosts en Apache2

Permisos de acceso con Apache2 y .htaccess

Anuncios

One Response to Configurar HTTPS para Apache2 en Linux

  1. Pingback: Configurar Virtual Hosts en Apache2 « Aitor Rigada

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: