Archivo de la etiqueta: Let's Encrypt

Conceptos Básicos de Comunicaciones Seguras

Puesto que la base de IoT es la comunicación, debemos establecer conexiones seguras, para ello es básico la autenticación y que la comunicación sea cifrada.

Que es TLS

Transport Layer Security (TLS) y Secure Sockets Layer (SSL) proporcionan un canal de comunicación seguro entre un cliente y un servidor. En el núcleo, TLS y SSL son protocolos criptográficos que utilizan un mecanismo de handshake para negociar varios parámetros para crear una conexión segura entre el cliente y el servidor. Una vez completado el handshake, se establece una comunicación cifrada entre el cliente y el servidor y ningún atacante puede escuchar cualquier parte de la comunicación. Los servidores proporcionan un certificado X509 (normalmente emitido por una autoridad de confianza) que los clientes utilizan para verificar la identidad del servidor.

Wikipedia: https://es.wikipedia.org/wiki/Seguridad_de_la_capa_de_transporte 

Porque es TLS Importante

Imagine que está enviando una postal. Está claro quién es el destinatario de la tarjeta y el cartero se asegurará de que llegue la tarjeta. Pero, nada impide que el cartero lea el contenido de la tarjeta. De hecho, todas las personas que participan en la entrega de la postal pueden leer el contenido de la misma. Un trabajador postal malintencionado podría incluso alterar el contenido de su tarjeta!

La esencia de este escenario también se aplica a las redes informáticas en general y a Internet en particular. El uso de TCP/IP simple es como enviar una postal. El paquete TCP pasa a través de muchos componentes de la infraestructura (routers, cortafuegos, puntos de intercambio de Internet) antes de llegar al objetivo. Cada participante en el camino puede leer el contenido del paquete en texto claro (e incluso modificarlo). Este no es un escenario ficticio, la historia reciente muestra que el tráfico de Internet es frecuentemente intervenido por agencias de inteligencia. Aunque la mayoría de los atacantes no tienen muchos recursos para escuchar a escondidas su conexión, no es difícil para los atacantes sofisticados realizar ataques Man-In-The-Middle.

TLS es todo acerca de proporcionar un canal de comunicación seguro. TLS garantiza que el contenido de su comunicación no puede ser leído o alterado por terceros, asumiendo que se utilicen suites de cifrado seguras y que no haya ataques no descubiertos en la versión de TLS utilizada.

TLS es en realidad sólo una versión más reciente de SSL. Corrige algunas vulnerabilidades de seguridad en los protocolos SSL anteriores.

Aquí está el historial completo de las versiones de SSL y TLS:

  • SSL 1.0 – nunca se ha publicado debido a problemas de seguridad.
  • SSL 2.0 – lanzado en 1995. Desaparecido en 2011. Ha tenido problemas de seguridad.
  • SSL 3.0 – lanzado en 1996. Se depreció en el 2015. Ha tenido problemas de seguridad.
  • TLS 1.0 – lanzado en 1999 como una actualización a SSL 3.0. La depreciación prevista para el año 2020.
  • TLS 1.1 – publicado en 2006. La depreciación prevista para el año 2020.
  • TLS 1.2 – publicado en 2008.
  • TLS 1.3 – lanzado en 2018.

No sólo es TLS más seguro y eficiente, sino que la mayoría de los navegadores web modernos ya no soportan SSL 2.0 y SSL 3.0. Por ejemplo, Google Chrome dejó de ser compatible con SSL 3.0 en 2014 y la mayoría de los principales navegadores tienen previsto dejar de ser compatibles con TLS 1.0 y TLS 1.1. Google empezó a mostrar notificaciones de advertencia ERR_SSL_OBSOLETE_VERSION en Chrome.

Navegadores que usan TLS 1.3: https://caniuse.com/tls1-3 

Para comprobar la versión SSL que usa el navegador, ver: https://www.howsmyssl.com/ 

Información del INCIBE: https://www.incibe.es/protege-tu-empresa/blog/si-tu-web-cuenta-certificado-seguridad-comprueba-utilizas-version-segura-del 

Más información:

Certificados SSL

¿Qué es un certificado SSL? Básicamente podemos decir que es un estándar de seguridad global que permite que los datos transferidos al navegar vayan cifrados correctamente. Evita que la información enviada entre un navegador y un servidor pueda ser filtrada. 

Para establecer esta conexión segura, se instala en un servidor web un certificado SSL (también llamado «certificado digital») que cumple dos funciones:

  • Autenticar la identidad del sitio web, garantizando a los visitantes que no están en un sitio falso.
  • Cifrar la información transmitida.

Los certificados SSL son emitidos por Autoridades de Certificación (CA), que son organizaciones de confianza a cargo de verificar la identidad y legitimidad de la entidad que solicita un certificado.

La autoridad de certificación (CA), también a veces referido como autoridad de certificación, es una empresa u organización que actúa para validar las identidades de las entidades (como sitios web, direcciones de correo electrónico, empresas o personas individuales) y vincularlas a claves criptográficas mediante la emisión de documentos electrónicos conocidos como Certificados digitales. Un certificado digital proporciona:

  • Autenticación, al servir como credencial para validar la identidad de la entidad a la que se expide.
  • Cifrado, para una comunicación segura a través de redes inseguras como Internet.
  • Integridad de documentos firmados con el certificado para que no puedan ser alterados por un tercero en tránsito.

El rol de la CA es recibir solicitudes de certificados, autenticar las solicitudes, emitir certificados y mantener información sobre el estado de los certificados emitidos.

Hay varios tipos de certificados SSL según la cantidad de nombres de dominio o subdominios que se tengan, como por ejemplo:

  • Único: asegura un nombre de dominio o subdominio completo (FQDN).
  • Comodín: cubre un nombre de dominio y un número ilimitado de sus subdominios.
  • Multidominio: asegura varios nombres de dominio.

Otros tipos de certificados dependen del nivel de validación requerido, como por ejemplo:

  • Validación de dominios: este nivel de validación es el más económico y brinda un cifrado básico y la verificación del titular del registro del nombre de dominio. Este tipo de certificado se entrega en unos minutos o unas pocas horas.
  • Validación de organización: además del cifrado básico y la verificación del titular del registro del nombre de dominio, autentica algunos detalles del propietario, como el nombre y su dirección. Este tipo de certificado se entrega en unas pocas horas o algunos días.
  • Validación extendida (EV): proporciona el mayor nivel de seguridad debido a la investigación exhaustiva que se lleva a cabo antes de emitir este certificado según lo estipulado en las pautas establecidas por el consorcio de la industria de certificados SSL. Además de la autenticación de la entidad y la titularidad del registro del nombre de dominio, se verifica la existencia legal, física y operativa de la entidad. Este tipo de certificado se entrega en unos días o semanas.

Coste de certificados: https://www.ssl.com/es/certificados/ 

Certificado Raíz: En criptografía y seguridad informática, un certificado raíz es un certificado de clave pública sin firma o autofirmado que identifica la autoridad de certificación raíz (CA). Un certificado raíz forma parte de un esquema de infraestructura de clave pública. La variedad comercial más común está basada en el estándar ITU-T X.509, el cual normalmente incluye una firma digital de una autoridad de certificación.

En SSL/TLS, S/MIME y otras aplicaciones de Certificados X.509, se utiliza una jerarquía de certificados para verificar la validez del emisor de un certificado. Esta jerarquía se conoce como cadena de confianza. En una cadena de confianza, los certificados son emitidos y firmados por certificados que viven más arriba en la jerarquía.

Es fácil ver una cadena de confianza por sí mismo al inspeccionar un HTTPS certificado del sitio web. Al comprobar certificado SSL /TLS en un navegador web, encontrará un desglose de la cadena de confianza de ese certificado digital, incluido el ancla de confianza, los certificados intermedios y el certificado de entidad final. Estos diversos puntos de verificación están respaldados por la validez de la capa anterior o «enlace», que se remonta al ancla de confianza.

Firma digital: https://firmaelectronica.gob.es/Home/Ciudadanos/Firma-Electronica.html 

Comprobar seguridad de un certificado SSL:

Más información:

Noticias sobre certificados SSL:

Cómo Funciona la Comunicación Segura

Pasos:

  1. La CA genera el certificado del servidor (srv.crt) con la clave pública (paso previo ya hecho).
  2. El cliente se conecta al servidor y recibe el certificado del servidor.
  3. El cliente verifica que el certificado del servidor ha sido firmado por una autoridad de certificación (CA) válida.
  4. El cliente cifra la comunicación con la clave pública del certificado ya validado.
  5. La comunicación cifrada sólo puede ser descifrada con la clave privada del servidor que en ningún momento ha salido del servidor.

Más información:

Certificados Gratuitos con Let’s Encrypt

Let’s Encrypt​ es una autoridad de certificación que se puso en marcha el 12 de abril de 2016 y que proporciona certificados X.509 gratuitos para el cifrado de Seguridad de nivel de transporte (TLS) a través de un proceso automatizado diseñado para eliminar el complejo proceso actual de creación manual, la validación, firma, instalación y renovación de los certificados de sitios web seguros.

Su objetivo es cifrar toda la web y hacerla un lugar que respete más la privacidad. Google ha estado fuertemente empujando a HTTPS en todas partes durante los últimos años. Y Let’s Encrypt realmente ha comenzado a tener un gran impacto en la industria, especialmente en lo que se refiere a hospedaje SSL de forma gratuita.

Sólo se emiten certificados de dominio validado, no se ofrecerá la validación de organizaciones certificados de validación extendida, esto significa que los certificados no tienen una garantía, que asegura al usuario final contra pérdida de dinero al enviar un pago a un sitio web asegurado por SSL.

No cualquiera puede de repente convertirse en una autoridad de certificación, porque se necesita la confianza de diferentes plataformas. Exploradores y dispositivos confían en una entidad emisora de certificados (CA) aceptando el certificado raíz en su almacén raíz, que básicamente es una base de datos aprobado por CA que viene preinstalada con el explorador o el dispositivo.

Microsoft, Mozilla, Apple, todos tienen sus propios almacenes de raíz. Así que para convertirse en una entidad emisora de certificados, necesita tener la confianza de algunos de los grandes nombres de la industria. Cuando Let’s Encrypt se lanzó por primera ocasión recibieron firmas cruzadas de IdenTrust, que les dio la confianza de todos los principales navegadores.

Estadísticas Let’s Encrypt: https://letsencrypt.org/stats/ 

Transparencia de certificados: https://certificate.transparency.dev/. Todos los certificados emitidos o revocados son públicamente registrados y disponibles para cualquier persona a inspeccionar.

Herramienta de búsqueda de certificados: https://crt.sh/ 

Para que funcionen los certificados de Let’s Encrypt es necesario:

  • Tener el certificado IdenTrust DST X3 raíz en su almacén de confianza.
  • La plataforma debe soportar modernos certificados de SHA-2. Los certificados de Let’s Encrypt son compatibles con los navegadores modernos.

Al tener acceso a Let’s Encrypt, no es necesario entrar en el confuso proceso de obtención de las claves de su certificado, claves privadas, depurar el certificado intermedio, o generar una CSR. Básicamente es una integración con un solo clic. Let’s Encrypt también es completamente segura. Es respaldada por las corporaciones y empresas como Automattic, Mozilla, Cisco, Google Chrome, Facebook, Sucuri – sólo para nombrar unas cuantas.

Los certificados SSL de Let’s Encrypt por diseño, caducan cada 90 días y hay que programar la renovación automática o hacerlo manualmente.

Más información:

Instalar Certificado

Instalar certificado TLS/SSL confiado de Lets Encrypt:

Certbot simplifica todo el proceso: https://certbot.eff.org/ 

Instrucciones certbot: https://certbot.eff.org/instructions 

Certbot en CentOS 8: https://certbot.eff.org/lets-encrypt/centosrhel8-other 

Más información:

Instalar: 

  • sudo yum install epel-release
  • yum install certbot

Solo certificado: certbot certonly –standalone

Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/midominio.com/fullchain.pem

   Your key file has been saved at:
   /etc/letsencrypt/live/midominio.com/privkey.pem

   Your cert will expire on 2021-02-04. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot
   again. To non-interactively renew *all* of your certificates, run
   "certbot renew"

Solo con certbot certonly –standalone ya me genera el certificado.

Para renovar hacer: certbot renew

Interesante nodo de lets encrypt para solicitar y renovar certificados: https://github.com/bartbutenaers/node-red-contrib-letsencrypt 

Mejores prácticas

Utilice siempre TLS si puede

Utilice siempre TLS si puede permitirse el ancho de banda adicional y sus clientes tienen suficiente potencia de cálculo y memoria para TLS. Como regla general, utilice siempre canales de comunicación encriptados, también para otros protocolos como HTTP, MQTT, etc…

Utilizar la versión TLS más alta posible

Aunque TLS 1.0, TLS 1.1 y TLS 1.2 no están rotos en la práctica (al menos hasta ahora), siempre debe utilizar la versión más alta de TLS que sea factible para sus clientes. Existen ataques conocidos contra TLS 1.0 y 1.1, que pueden ser mitigados. Algunos ataques están diseñados para explotar HTTP.

En mosquitto, apachem etc.., se puede elegir la versión de TLS a usar en la configuración.

No utilice SSLv3

No utilice SSLv3 ni ninguna versión anterior. El ataque a POODLE demostró que SSLv3 debe ser considerado roto. Todas las demás versiones de SSL también se consideran rotas y no deben utilizarse.

Siempre validar la cadena de certificados X509

Para evitar ataques Man-In-The-Middle, haga que sus clientes (MQTT, HTTP, etc…) validen el certificado X509 del servidor. Algunas implementaciones de clientes descuidadas utilizan un enfoque «allow-all» (a menudo en combinación con certificados de servidor autofirmados). Siempre vale la pena hacer un esfuerzo adicional para validar los certificados.

Utilizar certificados de las autoridades de certificación de confianza

Los certificados de las autoridades de certificación de confianza valen el dinero extra que cuestan. Los certificados autofirmados no se adaptan bien a muchas implementaciones de TLS y a menudo conducen a un código erróneo. Por ejemplo, código que no valida los certificados y abre la puerta a los ataques Man-In-The-Middle.

Si su broker de MQTT es público, un certificado de confianza es imprescindible. Si utiliza MQTT sobre sockets web, los certificados autofirmados no son óptimos. La mayoría de los navegadores web modernos no permiten conexiones de sockets web a recursos con certificados no confiables.

Utilizar otros mecanismos de seguridad

Además de TLS, siempre es una buena idea utilizar otros mecanismos de seguridad como el cifrado de la carga útil, las verificaciones de la firma de la carga útil y los mecanismos de autorización. En general, más seguridad nunca hace daño.

Utilice sólo suites de cifrado seguro

Hay muchas suites de cifrado inseguras disponibles para TLS. Asegúrese de permitir únicamente suites de cifrado seguras para su comunicación. Se sabe que muchas suites de cifrado están rotas y no tienen una falsa sensación de seguridad.

Cipher Suite:

Más información: https://www.hivemq.com/blog/mqtt-security-fundamentals-tls-ssl