Auto-generar cerfiticado SSL firmado con entidad certificadora y creación del virtual host de apache2 en Ubuntu 14.04
2. Auto-generamos el certificado desde consola.
4. Creamos el certificado en startssl.
1. Registro en startssl.
Puesto que el registro puede demorarse hasta 6 horas lo mejor es hacer esto lo primero, para ello, vamos a su web: https://www.startssl.com/ y picamos en el menú superior derecho en el botón con el icono de las llaves, vamos a Express Lane y rellenamos los datos del formulario.
A los pocos segundos debería llegarnos un email con un código de verificación, lo escribimos, le damos a continuar y esperamos hasta que acepten la solicitud.
Cuando la solicitud haya sido aceptada nos enviarán otro email con otro código y un enlace donde introducirlo. Generamos un certificado de 2048 para nuestro navegador que actuará como medio de login en la web, en el último paso le damos a instalar y ya tendremos acceso al panel de control donde generar nuestro certificado gratuito.
2. Auto-generamos el certificado desde consola.
Abrimos un terminal y escribimos el comando de abajo cambiando las partes en negrita como correspondan a cada uno:
$ openssl req -new -newkey rsa:2048 -nodes -out server.csr -keyout server.key -subj «/C=ES/ST=PROVINCIA/L=CIUDAD/O=EMPRESA/OU=DEPARTAMENTO/CN=*.example.com»
3. Validación de dominio.
Volvemos a startssl esta vez picamos en el menú panel de control y en la pestaña Validation Wizard, en el dropdown seleccionamos Domain Name Validation, introducimos nuestro nombre de dominio, en nuestro ejemplo, example.com, en la siguiente pantalla seleccionamos el email al que deben mandarnos el código de validación y le damos a continuar, en el siguiente paso introduciremos el código que nos ha llegado al email y le damos a finalizar.
4. Creamos el certificado en startssl.
Ahora picamos en la pestaña Certificate Wizard y en el dropdown seleccionamos Web Server SSL/TSL Certificate, en la siguiente pantalla le damos a skip puesto que nosotros ya tenemos generado nuestro certificado, en la siguiente pantalla nos pedirá nuestro certificado, abrimos el fichero generado en el paso 2, server.csr y copiamos todo el contenido del fichero, desde —–BEGIN CERTIFICATE REQUEST—– hasta —–END CERTIFICATE REQUEST—– teniendo mucho cuidado de no añadir ni espacios en blanco ni nuevas líneas tras el último guión. Picamos en continue.
Volvemos a picar en continue, seleccionamos nuestro dominio, en la siguiente pantalla nos deja añadir un subdominio, puede ser el que queramos pero en nuestro caso escribiremos www para que el certificado sea válido tanto para example.com como para www.example.com y le damos a continuar.
Tras varios continuar llegaremos al final, nos abrirá una textarea donde debemos copiar todo el contenido en un archivo y llamarlo ssl.crt.
5. Descargar certificados de la entidad certificadora.
Ahora iremos a la pestaña Tool Box y clicaremos en StartCom CA Certificates, descargamos
- StartCom Root CA (PEM encoded)
- Class 1 Intermediate Server CA
Ya tenemos casi todo, subiremos a nuestro servidor todos los archivos generados, puede ser en cualquier ruta que queramos pero nosotros vamos meter todo en una carpeta dentro de apache, /etc/apache2/ssl/example
# mkdir -p /etc/apache2/ssl/example
En esta ruta debemos tener los siguientes ficheros:
- server.key
- server.csr
- ca.pem
- sub.class1.server.ca.pem
Sólo nos queda desencriptar el archivo de clave privada necesario para el server, esto lo haremos a través de nuestro fichero server.key generado en el apartado 1 con el siguiente comando:
openssl rsa -in server.key -out private.key
Y ahora sí, ya tenemos todos los archivos necesarios para crear nuestro virtual host con https
6. Creación del virtual host de apache2.
El texto de abajo es la configuración del virtualhost de apache, la primera parte redireccionará todo lo que venga por el puerto 80, es decir, sin https hacia nuestra web con certificado ssl, debemos tener en cuenta cambiar las cosas en negrita por nuestras rutas y configuraciones.
Llamaremos a este fichero, 010-example.com.conf y lo meteremos en la ruta /etc/apache2/sites-available/
<VirtualHost *:80> ServerName www.example.com ServerAlias example.com DocumentRoot /var/www/example Redirect permanent / https://www.example.com/ </VirtualHost> <IfModule mod_ssl.c> <VirtualHost *:443> ServerAdmin joseca@example.com ServerName www.example.com ServerAlias example.com DocumentRoot /var/www/example <Directory /var/www/example/> AllowOverride All Require all granted </Directory> BrowserMatch ^Mozilla/4 gzip-only-text/html BrowserMatch ^Mozilla/4.0[678] no-gzip BrowserMatch bMSIE !no-gzip !gzip-only-text/html BrowserMatch "MSIE [2-6]" \ nokeepalive ssl-unclean-shutdown \ downgrade-1.0 force-response-1.0 BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown ErrorLog ${APACHE_LOG_DIR}/example-ssl-error.log CustomLog ${APACHE_LOG_DIR}/example-ssl-access.log combined SSLEngine on SSLProtocol all -SSLv2 SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM SSLCertificateFile /etc/apache2/ssl/example/ssl.crt SSLCertificateKeyFile /etc/apache2/ssl/example/private.key SSLCertificateChainFile /etc/apache2/ssl/example/sub.class1.server.ca.pem <FilesMatch "\.(cgi|shtml|phtml|php)$"> SSLOptions +StdEnvVars </FilesMatch> <Directory /usr/lib/cgi-bin> SSLOptions +StdEnvVars </Directory> </VirtualHost> </IfModule>
Activamos nuestro nuevo virtual host
sudo a2ensite 010-example.com.conf
sudo service apache2 restart
También debemos activar el módulo ssl de apache, para ello
sudo a2enmod ssl
sudo service apache2 restart