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