Información blog

Linux, tutoriales, noticias, sistemas, redes y seguridad informática, entre otras cosas.

lunes, 6 de julio de 2015

Creando certificados SSL manualemente.

En muchísimas ocasiones, cuando queremos instalar una herramienta que está diseñada para mantener una comunicación segura con un otro equipo, ya sea para Servidores de Correo, Servidores VPN o servidores Web, siempre veremos que durante la instalación son instalados unos paquetes relacionados con el protocolo de seguridad SSL. Eso es debido a que durante la instalación, los desarrolladores suelen dar por hecho que uno carece de certificados generados por uno mismo y debido a que una comunicación sin estos certificados es altamente inseguro (e incluso en algunos casos imposible). En su día ya vimos como hacer unos certificados específicos para OpenVPN, pero en esta ocasión realizaremos unos certificados genéricos que podremos usar en cualquier aplicación que requiera del uso de certificados SSL. Con esto lograremos centralizar toda la seguridad dentro de nuestro certificado y además tendremos mucho más control sobre éste, especialmente debido a la posible caducidad de éste o a fallos de seguridad. Estos certificados serán firmados por nosotros mismos, lo que significará que por ejemplo cuando queramos hacer una conexión https a nuestro servidor, siempre veremos un mensaje de aviso, pero no es algo de lo que tengamos que preocuparnos, a menos que queramos darle un uso más profesional a nuestro certificado, en cuyo caso podría ser una buena idea acudir a alguna entidad certificadora como Globalsign.
Logo-ssl
Para poder tener nuestros propios certificados requerimos de dos herramientas. Openssl y una herramienta certificadora llamada ca-certificates. Dependiendo de si ya tenemos instalado algún paquete que uso SSL, puede que no sea necesario instalarlos; aún así nunca esta de más estar seguros e introducir el comando de todas formas, ya que si ya están instalados los paquetes simplemente no hará nada.

  1. apt-get install openssl ca-certificates

Con ambos paquetes instalados, podríamos proseguir con la generación de nuestra clave y certificado; aunque es importante resaltar que todo el proceso debe hacerse como root. En este caso empezaremos realizando una clave rsa de 4096 bytes, que actualmente es considerada como la más robusta debido a su tamaño. Para ello habría que introducir este comando:

  1. openssl genrsa -des3 -out server.key 4096

Esta clave está protegida por una contraseña elegida a nuestra elección. El problema con esta protección es que si queremos hacer uso de esta clave, es necesario introducir la constraseña que protege la susodicha, lo cual es poco práctico y engorroso. Por suerte, dicha introducción se puede evitar mediante un comando muy simple que simplemente consta de la clave que hemos generado como parámetro de entrada y el nombre de la clave que NO tendrá contraseña como parámetro de salida. Además protegeremos dicha clave para que solamente root sea capaz de manipularla, es por ello que es tan importante que root sea el que realice todo el proceso. En esta ocasión he optado por el nombre servernopasswd.key.

  1. openssl rsa -in server.key -out servernopasswd.key
  2. chmod 600 servernopasswd.key

Ahora llegaría el turno de crear un certificado en base a la clave generada. Para ello usaríamos la clave que no está protegida con contraseña, y el comando tendría esta estructura:

openssl req -new -key ${clave} -out ${certificado}

Con dicha estructura y con la clave que previamente hemos generado, cuyo nombre es servernopasswd.key, generaremos un certificado con un nombre genérico que DEBE tener la extensión csr. En mi caso por ejemplo he optado por server.csr.

  1. openssl req -new -key servernopasswd.key -out server.csr

La generación del certificado requiere la introducción de unos parámetros informativos; parámetros que ya tienen un valor introducido por defecto y que pueden dejarse sin rellenar perfectamente. Entre estos parámetros se encontrarían el país, la ciudad, nombre organización,,,

Opciones-certificado

Aún con el certificado generado, es necesario firmarlo con el fin de que éste sea válido. La firma del certificado consisten simplemente validar dicho certificado. Generalmente esto requiere envíar el certificado a una entidad certificadora, pero en este caso vamos a optar por la alternativa "casera", que sería firmarlo nosotros mismos. Al tener control total sobre la firma que haremos en el certificado, haremos que el susodicho tenga una validez de muchos años con el fin de tener un certificado "indefinido". Para realizar la firma primero habría que entender la estructura que vamos a usar:

openssl x509 -req -days ${dias_validez_certificado }-in ${certificado_sin_firmar} -signkey ${clave_ssl} -out ${nombre_certificado_firmado.crt}


Con esta estructura ya podríamos tener una idea general de lo que deseamos. Por ejemplo en el parámetro days, es recomendable poner muchísimos días, ya que en caso contrario el certificado caducará y tendremos que renovarlo... Además es muy importante que el nombre del certificado firmado posea la extensión .crt. Basándonos en esa información, el comando que deberíamos de introducir en nuestro caso sería:

  1. openssl x509 -req -days 99999 -in server.csr -signkey servernopasswd.key -out server.crt

Con este procedimiento ya habríamos logrado ambas cosas, tanto la clave como el certificado. Ahora solo faltaría darles uso. Una buena forma de tener localizados estos dos ficheros sería mediante el traslado de los dos a la carpeta oficial de ssl, la cual sería: /etc/ssl. Dentro de dicha carpeta poseemos dos directorios muy importantes: certs y private. Certs es la carpeta donde oficialmente se guarda el certificado SSL, mientras que private almacenaría la clave que hemos generado antes. Debido a esto, una buena práctica sería copiar los ficheros server.crt y servernopasswd.key a las carpetas certs y private respectivamente.

  1. cp server.crt /etc/ssl/certs/
  2. cp servernopasswd.key /etc/ssl/private/

A partir de ahora podríamos disfrutar de ambos ficheros para cualquier aplicación que requiera de SSL.

Espero que os resulte útil.

Saludos.

2 comentarios :

  1. Voy a implementar los certificados ssl tal como explicas en tu post, voy a ver si me funciona :)

    ResponderEliminar
    Respuestas
    1. Muchas gracias. Espero que el post te resulte de utilidad y que puedas implantar los certificados sin problemas.

      Saludos.

      Eliminar