Apache SSL Localhost

Sea por seguridad o imposición de Google los sitios con certificado SSL son indispensables. Un entorno de desarrollo bajo HTTPS no suele ser necesario, aún así en cualquier caso, nos ayudará a cerciorarnos que el sitio esta programado adecuadamente para trabajar bajo el protocolo HTTPS.

Nota: Mi entorno de desarrollo se basa principalmente en macOS con un Ubuntu virtualizado con vagrant y virtualbox. Por lo que toda la configuración la basáremos en Linux / Ubuntu

Generar el certificado

Generar la llave

Crear una carpeta accesible llamada por ejemplo ssl en nuestra home.

$ mkdir ssl
$ cd ssl
$ openssl genrsa -des3 -out serverSSL.key 2048

Te pedirá que añadas una contraseña. Anótala en algún lugar, porque la vas a necesitar.

Generar CSR

$ openssl req -new -key serverSSL.key -out serverSSL.csr
  • Entra la contraseña previamente creada.
  • Sigue el asistente y rellena los campos con lo que quieras, pero pon atención Common Name:

Common Name será dominio que quieres usar y con el subdominio. Por ejemplo: local.midominio.com y no www.midominio.com.

Generar el certificado

$ openssl x509 -req -days 1825 -in serverSSL.csr -signkey serverSSL.key -out serverSSL.crt

Introduce nuevamente la contraseña.

Configurar Apache

Habilita el módulo SSL de Apache.

$ sudo a2enmod ssl

Ejemplo Virtualhost

$ cd /etc/apache2/sites-available
$ touch server.dev.conf

<VirtualHost *:80>

  ServerName server.dev
  ServerAlias www.server.dev
  Redirect permanent / https://server.dev

</VirtualHost>

<VirtualHost *:443>

  ServerName server.dev
  ServerAlias www.server.dev

  DocumentRoot /var/www/www.server.dev

  <Directory /var/www/www.server.dev/public>
    Options FollowSymLinks MultiViews
    AllowOverride All
    Order allow,deny
    Allow from all
  </Directory>

  ## Logging
  ErrorLog /var/log/apache2/www.server.dev.log
  LogLevel warn
  ServerSignature Off
  CustomLog /var/log/apache2/www.server.dev.log combined

  ## SSL
  SSLEngine on
  SSLCertificateFile    /home/vagrant/ssl/serverSSL.crt
  SSLCertificateKeyFile /home/vagrant/ssl/serverSSL.key

</VirtualHost>

Habilita el nuevo virtualhost y reincia el servidor Apache.

$ sudo a2ensite server.dev.conf
$ sudo service apache2 restart

Desde el navegador vamos al dominio que has configurado y nos aparecerá una alerta de seguridad porque es un certificado auto-firmado. Aceptamos la excepción de seguridad. Et voilà! Ya tenemos nuestro sitio funcionando bajo SSL en un entorno de desarrollo local.

Consejo

  • Si buscas un libro de referencia en castellano sobre Apache tal vez te puede interesar Apache de Rich Bowen publicado por Anaya Multimedia/O´Reilly que puedes comprar en Amazon. Es algo caro, pero te aseguro que vale la pena. Actualización

¿Cada vez que enciendes la máquina has de reinicar el Apache? Al Reinicar el apache ¿te pide la contraseña del certificado? Ok, dado que se trata de una máquian de desarrollo y la seguridad no es vital.. vamo sa un método simple.

Crea un fichero en el directorio de apache, lo vamos a llamar passphrase-script (no olvides darle permisos de ejecución con chmod +x

$ cd /etc/apache2
$ sudo touch passphrase-script
$ sudo chmod +x passphrase-script 

Abrelo con vim, nano o lo que te sientas más cómodo y añádele el siguiente contenido:

#!/bin/sh
echo "TuContraseñaAquí"

Luego abre el fichero de configuración de apache apache.conf o httpd.conf y al añade la siguiente linea:

SSLPassPhraseDialog exec:/etc/apache2/passphrase-script 

Reincia el apache y ya no te pedirá la contraseña.

El certificado ya funciona en los navegadores, pero ¿y en la terminal?

En el caso de macOS necesitaremos añadir el certificado al sistema. Para eso abriremos el Acceso a Llaveros y añadiremos el certificado al llavero de sistema.

Comments

gmoya
$ cd /etc/apache2/sites-enabled En éste paso en realidad es en $ cd /etc/apache2/sites-available
Jordi
Merci, corregido, no se en que estaria pensando. Saludos.
Alex
Molt útil i clar, merci!