Minientrada

Generar un certificado autofirmado

A veces necesito que mis sitios web funcionen sobre un canal HTTP seguro y no quiero, por falta de presupuesto o por falta de necesidad, que una CA (entidad certificadora de confianza) me firme un certificado.

Para estos casos, y usando OpenSSL, genero un certificado auto-firmado.

El certificado auto-firmado no sirve para garantizar la identidad de mi servidor, pero al menos me provee de un canal de comunicación seguro.

Esto suele ser un caso de uso bastante habitual en entornos de pruebas y/o de desarrollo.

Prerrequisitos

Autofirmar el certificado.

[1er paso] Generar una solicitud de firma de certificado (CSR, Certificate Signing Request)

La solicitud de firma de certificado contiene la información del certificado junto con la clave pública, y es la información que se envía a las autoridades certificadoras (CAs) para  que la firmen y generen el certificado de confianza.

Para generar la solicitud de firma CSR de un website que se llama techstrategydev.midominio.net, se ejecuta el siguiente comando:

$> openssl req -new -newkey rsa:2048 -nodes -keyout techstrategydev.midominio.net.key -out techstrategydev.midominio.net.csr

Generating a 2048 bit RSA private key

.....+++

...........................+++

writing new private key to 'techstrategydev.midominio.net.key'

-----

You are about to be asked to enter information that will be incorporated

into your certificate request.

What you are about to enter is what is called a Distinguished Name or a DN.

There are quite a few fields but you can leave some blank

For some fields there will be a default value,

If you enter '.', the field will be left blank.

-----

Country Name (2 letter code) [AU]:ES

State or Province Name (full name) [Some-State]:Bizkaia

Locality Name (eg, city) []:Bilbao

Organization Name (eg, company) [Internet Widgits Pty Ltd]:EGV COMPANY

Organizational Unit Name (eg, section) []:ARQUITECTURA

Common Name (e.g. server FQDN or YOUR name) []:techstrategydev.midominio.net

Email Address []:mi.email@midominio.net

Please enter the following 'extra' attributes

to be sent with your certificate request

A challenge password []:xxxxxxxxxxxx

An optional company name []:

Esta ejecución debería generar dos ficheros:

  • El fichero *.key que es la clave privada que hay que guardar en un lugar seguro bajo siete candados. Este fichero está protegido por la contraseña que hemos introducido cuando nos ha pedido «A challenge password».
  • El fichero *.csr, que es la petición de firma de certificado que contiene la clave pública.

 

[2o paso (opcional)] Comprobar los datos introducidos en la solicitud de firma de certificado (CSR, Certificate Signing Request)

Se puede comprobar que la información que hemos introducido en la petición es correcta.

Se puede comprobar el «Subject» ejecutando el siguiente comando:

$> openssl req -subject -noout -in techstrategydev.midominio.net.csr

subject=/C=ES/ST=Bizkaia/L=Bilbao/O=EGV COMPANY/OU=ARQUITECTURA/CN=techstrategydev.midominio.net/emailAddress=mi.email@midominio.net

 

[3er paso] Auto-firmar la petición CSR y generar el certificado auto-firmado.

El fichero CSR es el que se envía a la entidad certificadora (CA) para que lo firme y nos devuelva el certificado firmado. En este caso, como ya hemos dicho, no vamos a enviarlo a ninguna CA si no que vamos a firmar nosotros la solicitud (CSR) usando la clave privada.

$> openssl x509 -req -days 1095 -in techstrategydev.midominio.net.csr -signkey techstrategydev.midominio.net.key -out techstrategydev.midominio.net.crt

El parámetro -days indica el número de días en los que el certificado es válido. En este caso, al indicar 1095 días estamos diciendo que el certificado tiene una validez de 3 años (365×3).

La ejecución de este comando nos genera un fichero *.crt que contiene el certificado auto-firmado.

[4o paso (opcional)] Generar el certificado en formato PFX

La extensión PFX se utiliza en los servidores de Windows para los archivos que contienen tanto los archivos de clave pública (el archivo *.crt con el certificado auto-firmado) y la clave privada que corresponde a ese certificado (generado por el servidor cuando hemos generado la CSR en el 1er paso).

Para obtener el fichero PFX se ejecuta el siguiente comando:

$> openssl pkcs12 -export -out techstrategydev.midominio.net.pfx -inkey techstrategydev.midominio.net.key -in techstrategydev.midominio.net.crt

Este comando nos solicitará una password para proteger la clave privada y tras esto nos genera un fichero *.pfx que ya podemos incluir en nuestro servidor windows, o como es mi caso en la nube de azure.

 

 

 

WhatsApp para empresas

Transmitir mensajes de interés corporativo.

Al hilo de un problema de seguridad informática que vivimos el año pasado mientras trabajaba desplazado en un cliente. La crisis que se produjo, hizo patente la necesidad de un sistema de comunicaciones corporativo y ágil para transmitir mensajes de interés general a los empleados de la compañía en momentos determinados.

Un poco de información de contexto.

Entre otros muchos canales, SMS, EMAIL, llamadas de teléfono, el CTO de la compañía propuso utilizar WhatsApp como herramienta que podría cubrir las necesidades de comunicación al personal de la empresa. La idea a priori sonaba viable y le dimos prioridad. WhatsApp es una aplicación con una gran difusión, casi todo el mundo la tiene instalada en sus móvil. Dispone de un interfaz web para facilitar su uso desde ordenadores y no solo desde elementos de movilidad. Su principal cometido es poner en contacto a personas. La estabilidad de WhatsApp parece más que probada en sus casi 10 años de servicio. Parecía un candidato adecuado y fuerte.

Desgraciadamente, en el momento del estudio nos topamos con varias pegas. La principal fue que la licencia de WhatsApp es una licencia de uso personal, WhatsApp no está diseñado para ser usado por un ente, empresa o similar. Es por este motivo que WhatsApp no permite el uso de su plataforma para el envío masivo de mensajes.

Uso legal y aceptable. Debes acceder a nuestros Servicios y usarlos solo con fines legales, autorizados y aceptables. No usarás (o ayudarás a que otros usen) nuestros Servicios en formas que: (a) (…) (e) impliquen el envío de comunicaciones ilegales o inadmisibles, como mensajería masiva, mensajería automática, marcado automático y metodologías similares; o (f) impliquen cualquier otro uso no personal de nuestros Servicios a menos que nosotros autoricemos lo contrario.

Como todavía no queríamos rendirnos prematuramente y desechar WhatsApp como herramienta, pensamos en sortear estos impedimentos legales creando un perfil personal corporativo que actuará como fuente de información y posteriormente crear un grupo donde incluir a los empleados. La empresa para la que trabajamos supera los 3000 empleados, y aquí es donde encontramos un nuevo handicap, whatsapp solo permite grupos de 256 sujetos.

Sin tirar la toalla todavía, encontramos la posibilidad de utilizar servicios de terceros que a través de whatsapp ofrecen el envío masivo de mensajes. Dos eran las empresas que destacaban ofreciendo estos servicios: MassyPhone y WhatsAppMarketing.

MassyPhone. Multiuser whatsapp web chat. Whtsapp marketing. Envío de mensajes masivos.

 

 

Después de investigar esta vía, tuvimos que descartarla por los siguientes motivos:

  • El primero es que teníamos que entregar a éstas empresas los números de teléfono de los empleados, lo que iba en contra de la política de privacidad.
  • El Segundo fue que tras investigar el funcionamiento de estos servicios descubrimos qué, como legalmente Whatsapp no permite el envío masivo de mensajes, estas empresas usan un pool de teléfonos para permitir el envío masivo sin ser inhabilitados. No nos pareció una buena práctica apostar por empresas que usan el servicio de una manera que el propio WhatsApp prohibe.
  • Además, los mensajes serían enviados desde diferentes números de teléfonos cambiantes, lo que impediría al empleado corroborar la veracidad de la fuente y abría una puerta al envío de mensajes falsos y maliciosos.

Llegados a este punto, decidimos abandonar la idea de utilizar Whatsapp para el envío de información y seguir confiando en el envío masivo de SMS, pues la alternativa no era viable.

Whatsapp para empresas

Finalmente, hoy anuncia WhatsApp que ha creado una aplicación llamada WhatsApp para empresas (o Whatsapp Business en inglés) que permite a las pequeñas y medianas empresas interactuar con personas pudiendo utilizar herramientas de automatización, organización y respuesta rápida a mensajes.

La aplicación permite crear un perfil de empresa con información interesante sobre el negocio desempeñado, horario, ubicación, etcétera. Permite establecer mensajes de ausencia donde se indique el horario para poder contactar, mensajes de bienvenida, respuestas rápidas que permite guardar en la aplicación mensajes que se envían de manera frecuente y así reutilizarlos para responder a las preguntas más rápidamente.

De momento la aplicación está sólo disponible para Android, aunque se espera una versión iOS no muy lejos en el tiempo, y solo está disponible para Indonesia, Italia, México, Reino Unido y Estados Unidos, pero se espera su expansión en pocas semanas en el resto del mundo.

Conclusión

Aunque esta nueva aplicación empresarial de Whatsapp tampoco soluciona nuestra premisa de comunicación masiva a los empleados, va avanzando en el camino adecuado para que en un futuro no muy lejano Whatsapp se convierta en la solución empresarial para la interacción empresa-empleado y empresa-cliente. Habrá que seguir con interés lo qué nos depara el futuro.

Minientrada

Firefox, el proxy y el continuo error 407 (Proxy Authentication Required).

En el último proyecto en el que estoy recientemente involucrado he definido un entorno de trabajo virtualizado con máquinas basadas en Windows 10 que no se incluyen en el dominio y por tanto no realizan autenticación en él; la autenticación se realiza mediante usuarios locales. Sin embargo, para salir a internet se utiliza un proxy, en el que sí es necesario autenticarse a través del dominio windows de la organización.

A priori, sobre el papel esta configuración es bastante común y no da problemas. Para abrir una URL de internet desde el navegador, inicialmente se intenta hacer login con el usuario local, al no ser usuario de dominio y no poder autenticarse en el dominio, el navegador muestra una ventana para introducir el usuario y la password correctas. Si con ese usuario y password la autenticación es correcta en el dominio, automáticamente se navega a la url exterior solicitada.

En las máquinas virtuales de los desarrolladores, con Internet Explorer no hay ningún tipo de problema, se introduce el usuario, la password y la salida a internet es automática. Con Microsoft Edge el funcionamiento es correcto también, pero con Firefox (cualquier versión, aunque concretamente estamos utilizando Firefox Developer Edition 50.0a2) empiezan los problemas ya que este navegador se bucla solicitando continuamente el usuario y la password que el proxy necesita para realizar la autenticación.

2016-09-08_16-16-55

Solución

Este problema que es bastante engorroso, porque anula el funcionamiento de Firefox y lo elimina como navegador, se soluciona cambiando varias configuraciones internas de Mozilla Firefox.

Para acceder a dichas configuraciones hay que teclear la url about:config.

Es probable que si no hemos accedido antes a ésta URL, nos pida una confirmación para mostrar la página, pues modificar las configuraciones avanzadas puede ser potencialmente peligroso para el navegador.

2016-09-08_15-47-08

En este caso como estamos seguros de lo que vamos a configurar pinchamos en Aceptamos el riesgo.

Las configuraciones que hay que cambiar son:

  • signon.autologin.proxy –> TRUE
  • network.automatic-ntlm-auth.allow-proxies –> FALSE
  • network.auth.use-sspi –> FALSE

Estas configuraciones pueden ser encontradas mediante el campo de Busqueda. El cambio en los campos booleanos se realiza haciendo doble click sobre ellos.

2016-09-08_16-08-28

Completadas las configuraciones, se cierra y vuelve a abrir el navegador, se teclea la url de internet a la que se quiere navegar, se rellena el usuario y la password (una única vez), et voila, debería mostrarse el contenido web de la URL.

Links

Explicaciones de las diferentes configuraciones avanzadas de Firefox.