0

Explicando y creando un certificado SSL para nuestro sitio web

creacion certificado ssl

 

Navegar por Internet puede ser una tarea titánica. Si no tenemos sumo cuidado, nuestra seguridad puede verse comprometida, y esto se torna algo peliagudo cuando pretendemos acceder a páginas donde tenemos que otorgar nuestros datos. Estos datos pueden ser datos tan peliagudos como los bancarios que ingresamos al acceder para mirar nuestras cuentas y realizar alguna operación Para subsanar este deficit, vienen los certificados SSL junto al protocolo HTTPS que nos harán la vida un poco más segura en este campo de minas que a veces supone Internet.

¿Qué son los certificados SSL?

Imagínate que te llaman para una entrevista de trabajo, están encantados con tu CV y tu experiencia pero quieren verificar que realmente seas licenciado en tu doctrina como dices ser en tu CV. Ante este caso, lo que harías es hacer una fotocopia de tu expediente. Sin embargo dicho expediente no está compulsado por la universidad y la empresa puede pensar que has suplantado o falsificado dicho expediente, por lo que sólo pueden fiarse de tu palabra.

El certificado SSL sería aquel certificado que posee una parte privada, que se instala en el servidor, y sirve para realizar las firmas en todas las comunicaciones. Contiene el dominio al que hace referencia acreditando que haces la conexión con la entidad que dice ser. En nuestra analogía, este certificado sería otorgado por la universidad, una entidad externa de confianza, el cual firmaría nuestro expediente validando la autenticidad del mismo. Sí, y remarco esto último, por una entidad externa de confianza ya que los certificados SSL pueden ser generados de forma pública, autofirmarse e instalarlos en nuestro servidor. Con esto se consigue cifrar las comunicaciones, el certificado se instala en el navegador del cliente y mediante la clave pública que almacena, el usuario encripta sus comunicaciones con el servidor y el servidor la desencripta con su clave privada. De esta manera conseguimos cifrar en todos momentos las comunicaciones evitando así que un atacante pueda interceptar las comunicaciones. Esto funciona bien en la práctica pero también genera una vulnerabilidad, ya que si el certificado SSL instalado no se puede asegurar que sea de confianza, podría tratarse un certificado fraudulento.

Alguna que otra vez os habréis encontrado en la siguiente tesitura. Navegamos a un sitio bajo el protocolo https y el navegador nos advierte con el siguiente mensaje:

excepcion

Si leemos el mensaje, se está intentando realizar una conexión segura pero sin embargo no ha podido ser verificada por una entidad externa la identidad del sitio. Esta advertencia surge muchas veces de la necesidad de realizar certificados autofirmados para poder cifrar las conexiones entre emisor y receptor, como hemos comentado, pero al no poder ser verificados por una entidad externa, podemos tener nuestra seguridad comprometida ya que el servidor podría ser fraudulento y ver nuestra seguridad comprometida.

En páginas rudimentarias cuya finalidad busca cifrar la comunicación, podría no ser una vulnerabilidad muy grave, pero si lo extrapolamos al ejemplo del banco, esto significaría otorgar nuestros datos de acceso y dejarlos a merced del atacante para poder acceder a nuestras cuentas, divertido ¿eh?. Por tanto, es muy importante que a la hora de acceder a dichos sitios potencialmente proclives a ser atacados, observar que la entidad ha sido verificada por un tercero de confianza y acceder con total seguridad.

 

Certificado verificado por la autoridad de certificación (CA) Symantec Corporation para el sitio BBVA.

Certificado SSL verificado por la autoridad de certificación (CA) Symantec Corporation para el sitio BBVA.

Autoridades de Certificación (CA)

Si queremos proporcionar seguridad a nivel de verificación a los usuarios que quieran acceder a nuestro sitio, necesitamos que una autoridad de certificación (CA) nos otorgue un certificado firmado. Estas autoridades expiden los certificados asegurándose siempre que pueden probar la identificación de la persona que dice ser el propietario del dominio. Algunas CA incluso piden hacer la validación presencial otorgando los datos esenciales como registro mercantil, CIF, DNI y cualquier dato que sea fundamental para poder verificar de forma unívoca a la entidad que se quiere registrar. El certificado generado posee la clave pública y será la que se instale en los navegadores y comprueben que la firma, generada por la clave privada del certificado SSL en la parte del servidor, sea válida y por lo tanto, no se esté realizando una conexión fraudulenta. Ya verificado podremos realizar la conexión al servidor de forma segura sin tener nuestros datos comprometidos.

 

Creando nuestro certificado SSL con la CA StartCom

Pese a que SSL es un estándar en términos de seguridad y cada día está más presente, no existe muchos sitios que provean estos certificados gratis o a un precio módico. Sólo hace falta darse una vuelta por algunas webs de hosting famosas que proveen certificados y estás raramente bajan de los 50€ anuales, lo cual no es algo ‘prohibitivo’ pero que si da pie a pensárselo cuando estamos en Internet dedicándonos a un blog o haciendo algo por amor al arte. Existen varios proyectos en marcha para llegar a todo el mundo esta tecnología. Mozilla sin ir más lejos, se ha puesto seria últimamente en temas de seguridad, y junto a la Universidad de Michigan y otras fundaciones han llevado a buen término un proyecto denominado Let’s Encrypt que funcionará a modo de CA para expedir certificados y hacer la web más segura. Está empezando a ser aceptada por muchos navegadores, sin embargo se encuentra en una beta cerrada y todavía falta por pulir. Es un proyecto que merece la pena seguir de cerca ya que en breves tienen pensado lanzar su primera beta sin límites.

Nosotros por el momento nos fijaremos en una CA que nos puede otorgar certificados gratuitos cuyo nombre es StartCom. Esta página expide certificados de clase 1 con un año de duración. Tiempo suficiente para comprobar las virtudes de tener implementado https y dar el salto definitivo a este protocolo. A continuación explicaremos paso a paso como crear nuestro certificado así como instalarlo en nuestro servidor web:

 

  • Accedemos a la página de StartSSL y hacemos click en la imagen Sign up for free en la parte superior izquierda. Acto seguido accederemos a la siguiente página donde haremos click en Sign-up:Captura de pantalla 2015-11-11 a las 14.08.24
  • A continuación tendremos un formulario que rellenar. Como bien nos informan, debemos suministrar nuestros datos personales válidos. No vale inventarse los datos puesto que serán revisados y validados, de lo contrario, procederían a bloquearnos el acceso y revocarnos nuestros certificados. Es bastante coherente ya que en todo momento necesitan validar nuestra autenticidad y demostrar que nuestro sitio no es fraudulento. Mucho cuidado con esto.

 

Captura de pantalla 2015-11-11 a las 14.08.50

 

  • Una vez suministrado nuestros datos, debemos esperar a recibir a nuestro correo un código de validación para completar nuestro registro.

 

Captura de pantalla 2015-11-11 a las 14.11.31

 

  • Inmediatamente introducido el código, la página procederá a verificar la autenticidad de nuestros datos. Tened en cuenta que este proceso puede llevar hasta 6 horas.

 

 

 

Captura de pantalla 2015-11-11 a las 14.12.20

 

  • Una vez realizada la verificación y aprobada por la CA, nos mandarán un correo con otro código de verificación junto al enlace para ingresarlo. Tened en cuenta que si por algún casual no ha podido verificarse correctamente, deberéis volver a rellenar el formulario y repetir los pasos.

Captura de pantalla 2015-11-11 a las 15.26.45
  • Una vez introducido el código de verificación, es hora de generar nuestra clave privada para el certificado de autenticación en la página StartCom. Dicha clave puede ser de 1024 o 2048 bits. Obviamente, se recomienda claves de longitud de 2048 bits, así que seleccionaremos esa opción:
Captura de pantalla 2015-11-11 a las 15.26.57

 

  • Generada la clave, procedemos a instalar el certificado en nuestro navegador. Dicho certificado nos servirá para autenticarnos en el servidor de forma que podamos demostrar de forma unívoca que somos nosotros. Muy importante guardar este certificado en un sitio seguro:

 

 

Captura de pantalla 2015-11-11 a las 15.27.10 Captura de pantalla 2015-11-11 a las 15.28.08

 

  • Podemos ahora comprobar la información del certificado y que está todo correcto:
Captura de pantalla 2015-11-11 a las 15.30.17

 

  • Recibiremos un correo informándonos de la creación de nuestra cuenta y el acceso a la creación de los certificados desde el panel de control:

 

Captura de pantalla 2015-11-11 a las 15.32.32

 

  • Si hacemos click en el enlace del correo, nos dirigirá al panel de control. Accederemos a la opción Validation Wizard, en el cual crearemos el certificado del tipo Domain Name Validation. Acto seguido nos pedirá especificar nuestro dominio y por último seleccionaremos una cuenta de correo para validar los datos. Podemos usar nuestra cuenta de correo usada hasta ahora o bien una cuenta de tipo postmaster, hostmaster o webmaster si las provee nuestro servidor:
Captura de pantalla 2015-11-11 a las 15.33.10 Captura de pantalla 2015-11-11 a las 15.33.37

 

  • Recibiremos un nuevo correo para introducir otro código de validación para verificar el dominio en la siguiente página. Lo introducimos y le damos a siguiente para finalizar. Ya validado el dominio, podemos proceder a crear nuestro certificado SSL. Volvemos al panel de control y seleccionamos esta vez la opción Certificates Wizard. Tenemos que seleccionar el tipo de certificado que queremos crear, como es obvio, elegiremos la opción Web Server SSL/TLS Certificate:
Captura de pantalla 2015-11-11 a las 15.35.44

 

  • Ahora tendremos que generar la clave privada del certificado SSL. Recomendable usar un tamaño de clave 2048. Recordad usar una contraseña segura y guardadla a buen recaudo. Nos hará falta para después:
Captura de pantalla 2015-11-11 a las 15.36.18
  • Ya generada la clave privada encriptada, la copiamos y guardamos en un archivo de nombre ssl.key en nuestro servidor. Muy importante guardar este archivo en un lugar seguro junto a la contraseña que hemos usado para generarla:
private_key

 

  • Usaremos ahora openssl para desencriptar la clave privada. Si no tenéis el paquete siempre podéis instalarlo desde el repositorio de la distribución Linux que uséis. En mi caso que uso CentOS, lo instalaré del repositorio yum:
yum install openssl

...

openssl rsa -in ssl.key -out ssl.key

Enter pass phrase for ssl.key:

writing RSA key

 

  • Una vez desencriptada y guardada la clave privada, damos a siguiente y seleccionamos nuestro dominio que deseamos para nuestro certificado (aquel que introdujimos previamente en la sección Validation Wizard) y damos a siguiente:
Captura de pantalla 2015-11-11 a las 16.06.30

 

  • Acto seguido nos pedirá elegir un sub dominio. Para el caso, usaremos www y seguimos:
Captura de pantalla 2015-11-11 a las 16.06.55

 

  • Ya confirmado, la página nos devolverá información relevante con el dominio registrado para la creación de nuestro certificado. Tened en cuenta que la creación del certificado puede llevar hasta 3 horas, así que toca ser pacientes:


Captura de pantalla 2015-11-11 a las 16.07.30

Captura de pantalla 2015-11-11 a las 16.07.52

 

  • Pasado el tiempo requerido, recibiremos el correo notificándonos de que nuestro certificado ha sido firmado y se encuentra disponible en el Control Panel. Accedemos desde el enlace que nos proporcionan y hacemos click en Toolbox. Allí seleccionamos la opción Retrieve Certificate y seleccionamos el certificado asociado a nuestro dominio, damos a siguiente y nos mostrará el certificado el cual deberemos copiar en un archivo y guardarlo con el nombre ssl.crt:
certificate_ssl

 

  • Este certificado se enviará al cliente cuando se realice la petición https a nuestro servidor. Como ya comentamos, el certificado porta la clave pública con la que cifrará las comunicaciones aunque antes de nada verificará a la CA de que el certificado sea de confianza. Una vez verificado, procederá a usar la clave pública para establecer la comunicación con el servidor. StartSSL como CA está reconocida en la gran mayoría de navegadores pero de no estarlo, tendríamos que guardar la CA Root en nuestro servidor para que el usuario reconozca la CA y poder comprobar nuestro certificado contra la misma. Para ello, nos dirigimos de nuevo a Toolbox > StartCom CA Certificates y nos bajamos el StartCoom Root CA y Server Certificate Bundle with CRLs, ambos codificados en formato PEM. Preferiblemente bajaremos este último ya que establece la cadena de certificados necesarias para la autenticación y que usaremos para instalarlo en Apache:
Captura de pantalla 2015-11-13 a las 21.45.46

 

Instalando los certificados en Apache

En este punto tendremos los archivos ssl.key, ssl.crt y ca-bundle.pem. Ya podemos instalarlos en nuestro servidor web que para el caso, usaremos Apache. La instalación la haremos en un CentOS pero para casi todas las distribuciones las localizaciones serán similares, antes de todo lo que necesitamos es editar nuestro archivo httpd.conf que se encontrará en /etc/httpd/conf y activaremos el módulo openssl añadiendo la siguiente línea:


LoadModule ssl_module modules/mod_ssl.so

Con el módulo activado, el servidor será capaz de realizar correctamente la autenticación SSL y el cifrado de las comunicaciones.  La implementación la podemos realizar de dos formas distintas: editando el archivo ssl.conf el cual se encuentra en /etc/httpd/conf.d/ o creando un VirtualHost.

 

Editando el archivo ssl.conf

En este archivo tenemos que descomentar SSLEngine On así como el DocumentRoot y ServerName a los cuales asignaremos la carpeta a la que apunte nuestro directorio web y el nombre del dominio que registramos para nuestro certificado respectivamente.

Asignaremos nuestra clave privada, el certificado Root de la CA y el certificado del servidor en el directorio donde los tengamos alojados. En este caso usaremos el directorio por defecto que viene en Apache:


# 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. A new
# certificate can be generated using the genkey(1) command.
SSLCertificateFile /etc/pki/tls/certs/ssl.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 /etc/pki/tls/private/ssl.key

# Server Certificate Chain:
# Point SSLCertificateChainFile at a file containing the
# concatenation of PEM encoded CA certificates which form the
# certificate chain for the server certificate. Alternatively
# the referenced file can be the same as SSLCertificateFile
# when the CA certificates are directly appended to the server
# certificate for convinience.
SSLCertificateChainFile /etc/pki/tls/certs/ca-bundle.pem

Ahora sólo resta reiniciar nuestro servidor:


apachectl restart

Si accedemos a nuestro servidor web a través de una conexión https observamos que se ha podido establecer la conexión segura. Lo observaremos mediante el candado verde que se encuentra al lado de la barra de direcciones. Si hacemos click en dicho candado podremos observar con más detalle la información relevante al certificado de confianza y la conexión cifrada al sitio:

 

ssl_screen

 

 

Creando un VirtualHost para manejar un sitio con SSL

Creamos un VirtualHost como otro cualquiera sólo que este tendrá los campos que configuramos en el archivo ssl.conf

 


Listen 443 https

<VirtualHost *:443>
DocumentRoot /var/www/html/
ErrorLog /var/logs/httpd/ssl_virtualhost_log
SSLEngine on
SSLProtocol all -SSLv2
SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM

SSLCertificateFile /etc/pki/tls/certs/ssl.crt
SSLCertificateKeyFile /etc/pki/tls/private/ssl.key
SSLCertificateChainFile /etc/pki/tls/certs/ca-bundle.pem
</VirtualHost>

 

De aquí hacer mención en especial a las directivas SSLCipherSuite y SSLProtocol all -SSLv2. La primera directiva viene activada por defecto en el archivo ssl.conf y es ni más ni menos que los cifrados que acepta a la hora de hacer las negociaciones de conexión. El último campo va referido a la versión del protocolo SSL el cual se conectará el cliente a nuestro servidor, que en nuestro caso es la versión 2.

Con todo esto, ya quedaría implementado el certificado SSL satisfactoriamente en nuestro servidor posibilitando las conexiones seguras al mismo 😀

Tone

Ingeniero del Software y procrastinador sin remedio, interesado en todo lo que tenga que ver con el mundo del desarrollo web y la inteligencia artificial, no sé si seré el responsable de la creación de Skynet algún día pero se intenta.

ESCRIBIR UN COMENTARIO
  • (will not be published)

XHTML: Puedes usar estas etiquetas: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>