Generación de Certificados SSL en Mac OS


Objetivo



Habilitar las conexiones SSL para proteger la información que se tenga en un equipo durante la navegación en la Web.

Introducción


Antes que nada, es importante que tomemos un momento para comprender qué es Secure Socket Layers (SSL) y por qué es tan importante para la seguridad en la web. Para eso debemos recordar que existen diferentes actores involucrados durante los intercambios de información (transacciones) en una red o en internet.

  • Hacker: Un atacante malicioso interesado en obtener información confidencial del usuario, de una aplicación o de un servidor. A medida que las transmisiones se mueven entre el usuario, la aplicación y el servidor, los hackers tienen una oportunidad para robar información de cualquiera de esos lugares.
  • User: Los usuarios son personas regulares que normalmente no están conscientes de los problemas de seguridad que puedan existir, lo que los hace una presa fácil para los hackers.
  • Client: Nos referimos a una aplicación cliente, como un navegador web o una aplicación de mensajería electrónica. Estas aplicaciones son creadas por grupos de programadores bajo ciertos estándares y consideraciones. Aunque comúnmente incluyen cierta seguridad, la verdad es que en la mayoría de las ocasiones no es una garantía, por lo que también pueden ser vulnerables para los hackers.
  • Server: Normalmente los servidores son más complicados de atacar, ya que existe un grupo de administradores que se encargan de aplicar ciertas reglas y políticas de seguridad de la compañía. También se instalan herramientas de monitoreo que permiten detectar posibles ataques y tomar las medidas necesarias a tiempo.

Como vimos anteriormente, las transacciones sobre la red se encuentran expuestas a ser interceptadas por atacantes maliciosos. Entonces, ¿Qué debemos hacer?: Tomar control del problema, proporcionando la seguridad que los usuarios esperan. Debemos configurar SSL correctamente en nuestro servidor para encriptar los servicios que pueden ser encriptados, y para los servicios que tienen la capacidad de ser ofrecidos tanto de forma encriptada como desencriptada, nos aseguramos de deshabilitar la versión desencriptada. SSL nos va a ayudar a proveer confianza. SSL prueba que el servidor al que nos estamos conectando es realmente quien dice ser, y una vez que la conexión es confiable, encripta la información que se intercambia entre el cliente y el servidor.

Uno de los componentes más importantes de un negocio en línea es crear un entorno seguro donde los clientes potenciales puedan sentirse con la confianza de realizar sus transacciones. Los certificados SSL crean la base de confianza necesaria para establecer conexiones seguras. Para lograrlo, trabajan con un par de llaves, una llamada Privada y la otra Pública.
Para poder obtener un certificado, es necesario que creemos un Certificate Signing Request (CSR) en nuestro servidor. Este proceso crea una llave privada y una pública. Posteriormente, es necesario mandar el archivo CSR a un Certificate Authority (CA) quien lo usará para crear una estructura de datos que concuerde con nuestra llave privada, sin comprometer dicha llave. El archivo CSR que mandamos solo contiene la llave pública, de modo que el CA nunca ve nuestra llave privada. Una vez que recibimos nuestro Certificado SSL, debemos instalarlo en nuestro servidor junto con otro certificado intermediario que establece la credibilidad al ligarlo al certificado del CA.

Habilitar SSL

Para realizar esta actividad vamos a hacer uso de OpenSSL en la línea de comandos de nuestro sistema operativo, en mi caso Mac OS High Sierra, para crear un Certificate Authority (CA) y posteriormente crear un certificado firmado por nosotros mismos. Además vamos a iniciar el servidor Apache en modo local y activarlo para usar SSL, de modo que podamos hacer uso del certificado creado. Para finalizar vamos a hacer uso de un navegador web para mostrar el certificado en acción.

Creación del CA y el Certificado



A continuación se muestran todos los pasos en Mac OS High Sierra

  1. Abrir la Terminal. Puede encontrarse en Aplicaciones > Utilidades > Terminal
  2. Iniciar sesión como Superusuario, utilizando el comando sudo -s
  3. Comprobar que tenemos OpenSSL instalado, lo cuál debe ser cierto. Para eso utilizamos un comando que nos dirá la ubicación de la aplicación: which openssl
  4. Encontrar la ubicación de nuestros archivos SSL: locate openssl.cnf
  5. Movernos a la carpeta que contiene los archivos SSL, haciendo uso del comando cd y el directorio
Nota: En Mac OS High Sierra existe una restricción de permisos de lectura, incluso para el superusuario, dentro del folder /System/Library/OpenSSL por lo que para resolver los problemas ocasionados por esta restricción, será necesario que usemos un folder alternativo para guardar los archivos generados. Yo he decidido usar la siguiente dirección /Users/franfer/Documents/OpenSSL/

Es importante copiar el archivo de configuraciones openssl.cnf a nuestro folder, para poder editarlo más adelante, y crear algunos ficheros y archivos como se muestra en la siguiente imagen:



Ahora si, primero vamos a crear nuestro CA, y para eso debemos ejecutar el siguiente comando. La parte marcada en roja son los directorios donde queremos guardar los archivos, y pueden modificarse según sea necesario.

openssl req -new -x509 -newkey rsa:2048 -keyout /Users/franfer/Documents/OpenSSL/private/cakey.pem -out /Users/franfer/Documents/OpenSSL/cacert.pem -days 3650

Posteriormente será necesario asignar una clave de paso que podamos recordar, y proporcionar los datos solicitados.


Nuestro siguiente paso es crear el certificado y la solicitud de firma de certificado, para lo cual debemos ejecutar el siguiente comando. La parte marcada en roja son los directorios donde queremos guardar los archivos, y pueden modificarse según sea necesario.

openssl req -new -nodes -newkey rsa:1024 -keyout /Users/franfer/Documents/OpenSSL/private/myprivatekey.key -out /Users/franfer/Documents/OpenSSL/req/myrequest.req -days 1095

  1. Proporcionar los datos solicitados. Es importante que el “Common Name” coincida con el dominio donde queremos instalar el certificado.
  2. El “challenge password” debería ser una contraseña lo suficientemente robusta.


Ahora usaremos la solicitud de certificado y la firmaremos con ayuda de la CA que creamos al principio, ejecutando los siguientes pasos:

  1. Abrir el archivo openssl.cnf y modificar la variable dir con la ubicación de la carpeta donde estamos guardando nuestros archivos ( /Users/franfer/Documents/OpenSSL/ ), para eso puede hacerse uso del programa nano desde la terminal.
  2. Ejecutar el siguiente comando para la creación del certificado. Como parámetro de entrada se utiliza la solicitud de certificado creada anteriormente y el archivo de configuraciones que acabamos de modificar.

openssl ca -policy policy_anything -out /Users/franfer/Documents/OpenSSL/certs/gillab.pem -in /Users/franfer/Documents/OpenSSL/req/myrequest.req -config /Users/franfer/Documents/OpenSSL/openssl.cnf

Poner el Certificado en nuestro servidor


  1. Configurar Apache apropiadamente. Primero vayamos al directorio /etc/apache2/
  2. Abrir el archivo httpd.conf usando la aplicación nano, y quitar el símbolo # de la línea: #Include /private/etc/apache2/extra/httpd-ssl.conf. Podemos hacer uso de Ctrl + W para buscar dentro del archivo. Ctrl + O para guardar los cambios y Ctrl + X para salir del archivo.
  3. Editar el archivo httpd-ssl.conf que se encuentra dentro de la carpeta extra, para actualizar la ubicación del certificado que creamos y la llave privada. Las variables a actualizar son SSLCertificateFile y SSLCertificateKeyFile. En mi caso quedarían de la siguiente manera:

SSLCertificateFile "/Users/franfer/Documents/OpenSSL/certs/gillab.pem"
SSLCertificateKeyFile "/Users/franfer/Documents/OpenSSL/private/myprivatekey.key"

  1. Ahora debemos detener Apache (si está activo) con el comando apachectl stop e iniciarlo con el comando  apachectl start. Nota: Se puede utilizar el comando apachectl para detectar posibles errores al iniciar el servidor. En caso de que todo esté bien, deberíamos ver un mensaje como el siguiente httpd (pid 2042) already running, después de usar el comando apachectl.
  2. Abrir nuestro navegador y colocar en la barra de direcciones https://localhost



La imagen anterior, a pesar de ser un error, nos confirma que tenemos un certificado en el servidor. Si damos clic en “Ver el certificado” podemos confirmar que la información del certificado coincide con los datos que proporcionamos al crear dicho certificado.




La razón por la que el certificado no es de confianza es porque el nombre común no coincide con la dirección proporcionada (localhost). La siguiente imagen tomada del navegador Firefox nos puede confirmar la razón del error.



Esto se puede resolver instalando un servidor de DNS y configurando localhost para responder a la dirección itlabs.com. Si instalamos este certificado en un servidor en internet asociado al dominio itlabs.com, nuestros usuarios no recibirán dicho mensaje de error. Por el momento basta con decirle al navegador que puede confiar en el sitio.



Referencias



  • Lynda Training: Learning Secure Socket Layers
  • Digicert Website

Comentarios

Entradas populares de este blog

U3 - 5. Estrategia y técnicas de negociación integrativa

U3 - Ensayo de la negociación

U3 -2. Estilos alternativos, estrategias y técnicas de negociación