Auto-generar cerfiticado SSL firmado con entidad certificadora y creación del virtual host de apache2 en Ubuntu 14.04


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

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *